ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DGU_탐색적자료분석] 지하철 승하차 인구 분석 및 보조 배터리 대여 서비스 장소 선정
    My practice 2021. 12. 25. 00:00

    2020년 탐색적자료분석 기말고사 프로젝트 정리


     

    1. 데이터 수집 및 가공

    2. 군집분석

    3. 모델링

    4. 결과 분석

     


     

    1. 데이터 수집 및 가공

     

    선행 연구 분석과, 현실적으로 수집할 수 있는 자료의 타협 내에서 자료를 수집하여 분석에 활용함.

    (가) 2015-2019 서울교통공사 일별 역별 시간대별 승하차 인원(1~8호선 지하철)
    서울 열린데이터 광장 제공; 지하철 역의 승하차 인원을 분석하는 데에 있어서 종속변수가 되는 중요한 변수이다. 역명 표기가 제각각인 경우가 많아 수작업으로 고치거나, 지하철역 코드를 활용해서 일괄적으로 통일되도록 수정하였음. 이하의 자료들을 2019년에 한하여 수집하였으므로 2019년의 승하차 인원 수만 사용

    (나) 지역 거주 및 근로 인구수, 지역 연령대 통계
    공공데이터포털 제공; 출퇴근, 등하교 등 지하철을 이용하는 주요 요인이 해당 지역이 근로 중심인지, 거주 중심인지가 중요하다고 판단하였으며, 연령대가 큰 비중을 차지한다고 생각함. 연령의 경우는 연령대 통계를 이용한 고령화 지수를 활용하였다. 1년 평균으로 재집계함.

    (다) 도시 별 녹지, 병원, 산업체, 유통업체, 학교 및 학생 통계
    공공데이터포털 제공; 해당 지역의 특성을 알 수 있는 녹지, 병원, 산업체, 유통업체, 학교 및 학생 수의 통계를 이용하였으며, 이는 서울시 25개 구의 군집 분석 과정의 도시별 통계를 반영하는 변수로 사용함. (나)의 데이터와 함께 merge 하여 군집분석에 사용하였으며, nomalization 또한 진행함. 쇼핑몰의 수, 쇼핑시설 연면적, 학교 수, 학생 수, 의료 규모(병상 수) 변수 사용.

    (라) 주말, 휴일 데이터 등 기타 통계
    주말, 휴일 여부는 출퇴근, 등하교와 대중교통 운영에 있어 중요한 변수임. 요일과 휴일 여부를 범주형 변수로 생성하였다.

    (마) 역 정보
    서울 열린데이터 광장 제공; 역의 층수, 면적, 건설 연도를 담은 자료를 활용함. 노선과 장소한 도시만으로 분류하기에는 역의 특징이 미치는 영향이 크다고 판단하였다. 문자형 변수를 수치형 혹은 범주형으로 바꿔주고, 역의 길이, 면적, 층수, 연식이 역 주변의 시설 다양성과 주변 상권과의 연관이 크다고 생각하여 사용. 건설 방식이나 역의 이름은 사용하지 않음.

    (바) 공공 대여 시스템의 선례
    따릉이, 피프틴, 쏘카 등의 공유 시스템을 가진 분석 내용들을 참고하고자 수집함. 

     


     

    2. 군집분석

     

    Hierarchical Clustering을 통해 서울시 내 25개 구를 k=5 개의 군집으로 분류하였다. 분류에 사용한 변수는 (1) 구 주민 계, (2) 고령화 비율, (3)사업체 계, (4)종사자 계, (5)쇼핑몰 수, (6)쇼핑몰 총 연면적, (7)학교 수, (8)학생 수, (9)의료 규모 이다. 

    Hclust dendrogram

    k가 4 이하일 경우, 한 군집의 크기만이 너무 커지며, 6개 이상의 군집은 불필요한 분류가 많아진다고 판단하여 k를 5로 선정하였다. 해당 분석을 통해 얻어낸 군집은 이후 모델링에서도 사용하기 때문에, 범주형 변수로 정리하였으며, 결과는 다음과 같다.

    A 강서구 노원구
    B 강북구 종로구 동작구 도봉구 서대문구 관악구 성북구 은평구
    C 광진구 성동구 금천구 용산구 마포구 양천구 구로구 영등포구 강동구 동대문구 중랑구
    D 중구
    E 송파구 강남구 서초구

    도시 지표에 관한 자료를 살펴보면, 완벽한 분류는 아니어도 어느정도 특징이 비슷한 도시들끼리 묶였음을 확인할 수 있었다. 특히, E의 경우는 강남 3구라고 일컬어지는 특수한 지역들이며, D의 중구는 남산의 존재로 인한 건물고도제한과 주거지 부족적은 인구와 대기업 및 언론사 다수가 본사를 두고 있는 등의 특징이 있음을 감안하면 혼자 분류된 것도 이상하지 않다.

     


     

    3. 모델링

     

    군집분석을 통해 얻어진 5가지의 도시 분류와 나머지 설명변수들을 통해 트리 기반 모델인 XGboost를 통해 승하차 인구를 예측하고자 하였음.

    우선, 8:2의 비율로 Train, Validation을 구분지었다. 예측해야 할 변수 y는 5시~24시의 시간별 승하차 인원으로, 20회의 학습과 예측이 이루어진다. 역을 기준으로, 시계열 성분을 이용해서 예측하는 방식도 있으나, 시간별로 다른 모델을 만드는 대신 역별 정보를 독립변수로 사용하는 방법으로 진행해보았었다.

    Hyperparameter의 tuning은 분석 환경 상 타협을 통해 좁은 범위에서 두 단계로 진행하는 grid search를 활용했다. 선행 연구를 통해, 대략의 탐색 범위를 선택하였다.

    max_depth eta colsample_bytree subsample
    3 4 5 6 7 8 9 10 seq(0.01, 0.3, length=6) 0.7 0.8 0.9 0.7 0.8 0.9

    (가) nround : 과적합 방지를 위한 조기 종료 옵션을 택하였으므로 과적합 걱정은 없으나, 200 정도로 하여 상대적인 모델 성능 비교만 가능하도록 하였다. 

    (나) max_depth : 일반적으로는 3과 10 사이의 값이 사용되나, 대부분의 선행 연구에서 5~10 사이의 값이 사용되므로 이 범위 내에서 조사하였다.

    (다) eta: 일반적으로는 0.01 이상의 값을 이용한다고는 하나, 너무 큰 eta도 부정적인 영향을 미치기도 하므로 0.01부터 0.3 사이의 값에 대해 조사하였다.

    (라) colsample_bytree와 subsample은 각각 모형에 사용할 변수의 비율과 임의 표본의 비율로, 보통 0.8 주변을 사용하므로 [0.7, 0.8, 0.9]에서 조사하였다.

    위 범위에 대해, (나)(다)에 대한 조사, 그리고 해당 조사에서 우수한 평가 값을 낸 모델에 대해서 (라)에 대한 조사를 진행함.

    최종 선정 Hyperparameter는, max_depth=9, eta=0.126, colsample_bytree=0.9, subsample=0.9 였음.

    모형의 예측

     


     

    4. 결과 분석

     

    분석 대상의 역은 221개 였으나, 승하차 인원이 적은 역에 대해서는 결과 분석이 무의미하다고 생각하였고, 승하차 인원이 많은 상위 50개 역에 대해 결과 분석을 진행하였다. 2만 회 정도 되는 역별, 일별 평균 승하차에 대해, 출퇴근 시간대에만 절반 가까이가 이뤄지는 만큼, 출퇴근 시간을 중점적으로 살펴보았다.

    또한 역 별로 출퇴근 시간의 승하차 편차가 큰 경우가 많다. 본 프로젝트의 목표인 보조배터리 대여 시설의 장소를 선정하는 데에 있어, 승차와 하차 편차가 작다는 것은 승객 대비 대여 인원 비율이 일정하다는 가정 하에 반납과 대여량이 비슷하다는 것을 의미하며, 보조배터리의 재고 분배에 큰 신경을 쓸 필요가 없음을 의미한다. 반대로, 승하차 편차가 크다는 것은 보조배터리의 재고 재분배가 필수적이다.

    출근 : 승차 < 하차
    퇴근 : 승차 > 하차
    가산디지털단지역 삼성역 역삼역 을지로입구역 선릉역 강남역 종각역 광화문역
    여의도역 시청역 성수역 양재역 서울역 학동역 충무로역
    출근 : 승차 > 하차
    퇴근 : 승차 < 하차
    신림역 까치산역 연신내역 쌍문역 화곡역 서울대입구역 수유역 신대방역 창동역
    미아사거리역 봉천역 낙성대역 신도림역 강변역 구의역

    위는 평일 승하차 편차에 따라 50개의 역 중 각각 상위 15개씩 분류한 것이다. 평일의 출퇴근 시간대에 따른 승하차 인원의 차이는 해당 역이 주거 위주의 지역에 위치해 있는지, 아니면 근로 위주의 지역에 있는지를 반영하여 보여준다고 볼 수 있다. 출근과 퇴근의 패턴이 반대라는 점이 이를 설명한다.

    즉, 위 표에서 1행의 역들은 근로 우세 지역이라고 판단하였고, 2행의 역들은 주거 우세 지역이라고 판단하였다. 일반적으로, 보조배터리를 대여한다고 하면 그것의 사용은 지하철 내에서 이루어질 것이라고 생각되기 때문에 (평일에 집이나 회사에서 사용하기 위해 보조배터리를 대여하진 않을 것이다) 승차 때 빌리고 하차 때 반납한다는 점을 참고하면 보조배터리 대여 시설의 적절한 장소를 선정할 수 있다.

    다만, 주말은 조금 더 복잡하다. 주말에도 출퇴근 인원이 있는 반면, 놀러다니는 사람도 있을 것이므로 출근 시간과 퇴근 시간으로 나누기엔 무리가 있다. 즉, 전체적인 시간 별 승하차 인원을 살펴볼 필요가 있다.

    x축은 아침,점심,저녁,밤

    좌측 그래프의 역(강남, 경복궁, 신사, 안국, 을지로, 홍대 등)은 아침~점심에 하차하여 저녁~밤에 승차하는 역이며, 우측 그래프의 역(구로디지털단지, 미아사거리, 서울대입구, 수유, 연신내 등)은 아침~점심에 승차하여 저녁~밤에 하차하는 역이다. 주로 우측 그래프의 역은 평일의 주거 우세 지역과 같았는데, 평일과 주말에 상관없이 주거 우세 지역은 동일하기 때문이다. 다만, 좌측 그래프의 역은 평일의 근로 우세 지역과는 조금 달랐다.

    눈여겨볼 점은, 우측 그래프의 역들도 조금씩 패턴이 다르다는 점인데, 예외적인 경우로 홍대입구역의 경우에는 이른 시간의 승차 수가 하차 수보다 많았다. 확언할 수는 없지만, 주말의 경우에 첫차 혹은 이른 차를 타고 귀가하는 인원 또한 존재함을 예측할 수 있다. 이를 참고하면 주말 시간 보조배터리 대여 시설의 적절한 장소를 선정할 수 있겠으나, 평일보다는 조금 더 다양한 변수가 존재하기 때문에 고려할 것이 더 많을 것으로 보인다. 예를 들어, 주말의 경우에는 평일과 다르게 하차할 때 대여하고 승차할 때 반납하는 경우도 많을 수 있다.

     


     

    R로 분석한 2020년 2학기 전공 프로젝트를 저장 겸 정리해보았다.

    지역 별 특성을 반영하고자 시간대 별로 다른 모델을 사용하려고 했으나, 때문에 변수 해석이 어려웠던 기억이 있다. 변수 해석을 위해서는 다른 방법으로 분석을 했어야 할 듯 하다.

    좋은 성적을 받기는 했지만, 1년이 지난 지금 다시 보기에는 머리가 좀 컸는지 아쉬운 점이 많았다. 올해 했던 것들도 내년에 봤을 때 이랬으면 좋겠다.

     


     

    댓글

since 2021