Data cleaning을 일단 해두고, 이제야 문제를 해결하기 위한 현상 파악 단계로 돌아간다.
2023.06.29 - [Project] - 나의 첫 데이터 분석기
위 글에서 내가 처음 이 자료를 보게 된 계기로 돌아가면
(1) 전체 프로젝트 : 개별 이용자 맞춤형 자율주행 대중교통 서비스를 개발하려함.
(2) 연구실 목표 : 이용자의 수요를 예측하려함. (for 서비스 효율성 + 이용자의 편의성)
에서 과거 이력자료를 알아서~ 만져볼 기회가 생겼고 ! (내가 정확히 기억을 못하는건지는 모르겠는데, 정말 막연하게 한 번 만져봐라.. 하고 던져주심 ㅠ0)
그래서 내가 정말 알아서 정한 내 목표 는
(3) 내 목표 : 과거 시행된 이력자료를 보면서 / 잠재적 수요자의 서비스적 선호 요소를 추측 / 서비스의 향상을 위해 볼 key metrics 정하고 관찰 / 추후 서비스를 위해 수요를 예측하기 위한 개선하거나 더 필요한 데이터가 있을까 생각해보기 / 로 크게 3가지로 나뉜 것 같다.
딱히 정해진 '문제'나 '해결해야 할 요소'가 없었기 때문에 더 막연하게 느꼈던 기억이 난다.
일단 이 숫자들을 도식화하면서 눈에 뭐라도 보여야
현상을 발굴하고, 현상에 대해 고민할 기회가 생길 것 같았다.
따라서,
1. 먼저 서비스 자체에 대한 이해 + 서비스 운영 지역에 대한 배경조사
2. column별 통계치 산출
부터 시작하였다.
1. IMOD 및 영종도 배경조사
- 인천광역시 중구 영종도
(출처: 부동산사이트)
- 영종도는 4개의 행정동으로 구성 (용유동, 운서동, 영종동, 영종 1동), 운서동에 인천국제공항 위치
영종1동이 면적이 가장 좁음에도 불구하고 등록인구 수 최다 (인구밀도 최고)
등록세대수는 운서동이 최다
=> 영종1동이 주거밀집지역인가보다..
(출처: KOSIS, 지도 및 표 자체제작)
- 유동인구
2018년 인천광역시의 주민등록인구 대비 유동인구가 많은 지역은 중구(12.7배), 옹진군(8.12배), 강화군(7.04배) 순으로 나타남.
=> 중구가 거주인구에 비해 특히나 유동인구가 제일 많은 것으로 보아 다른 지역에서 중구로 특정 목적으로 (통근 통학) 이동하는 경우가 많은가보다...
(출처: SKT, 그래프 자체제작)
- IMOD 운영실태
- 이용자 반응
웹 서치 및 어플리케이션 후기 하나하나 읽어보고 정리했다.
https://www.ohmynews.com/NWS_Web/View/at_pg.aspx?CNTN_CD=A0002727933
+ 현 대중교통 버스 정류장 분포
정류장 총 449개 있음 (공공데이터포털 인천광역시 시내버스 정류장 위치)
2. Column별 통계치 산출
'탑승자 정보'를 담고 있는 column
ID :
이용자 고유 ID
11,577 distinct users
adult & teen & child :
탑승 성인/청소년/아이 수
성인 이용이 대다수 (80%)이며, 최대 6인까지 동시 탑승하는 경우가 있다.
'시간정보'를 담고 있는 column
call_time :
호출 시각
최초 호출 시각 = 2021-02-15 00:00:24 , 최후 호출 시각 = 2022-07-02 22:59:05
특이사항 : 2021.05.16일부터 2021.07.24에 해당하는 데이터 없음
주중사용 > 주말사용 (약 1.3배)
누적 호출횟수로 보아, 기울기가 거의 일정 : 서비스 초기부터 종류까지 이용자 수의 변화가 크지 않음 (거의 일정)
오전피크 : 7시-9시, 오후피크 : 16시-17시 + 낮시간대 (12시-13시)에 일시적 증가
cancel_time :
호출을 취소한 시각
파생변수 'interval(호출 후 취소까지 시간)' 생성 가능 ('cancel_time' - 'call_time')
정말 대다수의 이력이 호출 후 결국 하차완료까지 가는데 실패함. (약 4%에 불과)
배차가 성공하기까지 기다리지 못하여 취소했다가 다시 재배차를 신청하거나 아예 포기하는 경우가 많았고, 이는 i-MOD 호출 서비스의 단점이라는 user 리뷰 및 기사도 있었다. 따라서 실제로 사용자들이 버스를 호출했다가 취소하기까지 얼마나 기다렸는지 알아보자.
cancel_time과 call_time이 모두 기록된 전체 3,527,268건의 기록 중
cancel_time = call_time (아예 interval이 0분) 기록 | 1,467,502건 (41.6%) |
1분 이내로 취소한 기록 | 2,023,549건 (57.4%) |
1분 이상 대기한 기록 | 36,217건 (1%) |
1분 이상 대기한 유저는 전체의 1%에 불과하다. 물론 짧게 짧게 호출-취소를 반복했다면 해당 기록에서 누적된 시간은 1분을 넘을 수 있을 것이다.
누적 대기시간도 한 번 계산해봐야겠다. (각 호출하려는 trip별로 번호를 매겼으므로 같은 number의 trip끼리의 interval을 더하면 될 것이다. )
suc_time :
배차 성공 시각
board_time & alight_time:
실제로 승차/하차완료를 한 시각
승차하고 하차를 완료한 자료에 대해서만 기록됨 (전체 호출이력의 3.66%)
최초 승차 시각 = 2021-02-15 00:09:11, 최후 승차 시각 = 2022-07-02 23:13:50
최초 하차 시각 = 2021-02-15 00:10:58, 최후 하차 시각 = 2022-07-02 23:23:14
시간대별 승하차 분포 관찰
이동시간이 거의 30분 이내인지라 (밑에 ivt 참고) 호출 vs 실제 호출에 응답하여 승차 및 하차 한 시간대별 count 그래프의 개요는 거의 유사하다.
여기서 살펴볼 점은 실제 호출 count와 board 또는 alight한 count를 비교하는 것이다. 위 그래프로만 비교해보면, 빨간색 선이 그어져 있는 시간대에 실제 승차한 승객도 많지만, 그 외에도 승차한 승객이 많은 시간대가 존재한다. >> 바로 13-14시와 22-23시이다.
한편, 14-15시에는 전체 호출에 비해 승차한 승객 수가 상대적으로 많이 감소한다.
다시 시간대별로 호출 수 - 호출 대비 하차 완료율을 비교하는 그래프로 만들어봐야겠다.
파생변수 'ivt(이동시간)' 생성 가능 ('alight_time' - 'board_time')
사분범위 기준으로 이상치를 제거한 후 분포 시각화한 결과이다. 평균 15분 정도 이동함을 알 수 있고 거의 정규성을 보였다.
파생변수 'wait time(탑승대기시간)' 생성 가능 ('board_time' - 'call_time')
평균적으로 유저가 imod를 호출하고 탑승하는데까지 걸리는 시간은 15분이다. (중위값도 15분) 매우 오래 걸린 경우도 있었으나 (최대 70분), 대기시간은 19분이 75%이내로 들어왔다. 영종도는 대중교통 배차간격이 긴 편이다. 특히, 버스의 경우에는 기존 노선을 이용하면 30분 ~ 최대 200분까지 대기해야 버스를 타는 경우가 많다고 한다. 이와 비교하면 유저가 배차를 배정받았다는 전제하에 대기시간이 획기적으로 감소한 것이므로 iMOD가 '수요응답형' 대중교통에 충실한 서비스라는 사실을 알 수 있다.
https://www.incheonilbo.com/news/articleView.html?idxno=1200929
'공간정보'를 담고 있는 column
x & y :
호출 좌표 (위도,경도)
4,844개의 value가 NULL (이유 확인 불가)
시스템 기록 상의 오류 때문인지, 호출 위치가 인천 외에 전국 각지까지 흩뿌려져 있는 모습을 관찰할 수 있었다. (진짜 그 곳에서 호출했을리가.. 사실 카카오모빌리티 리포트에서 어떤 유저가 다른 지역에 있는 다른 사람을 위해 대신 불러줬을 것이다라는 분석을 보긴 했는데, 내가 본 데이터에서는 그렇게 생각하기에는 너무 많은 점들이 영종도 밖에 찍혀 있어서 시스템 상 오류로 판단하는 것이 최선이었다. )
영종도 내 (서비스 범위 내)로만 지역을 좁혀보아도 승차할 수 있는 정류장에 비해 호출 장소가 매우 분산되어 있음을 확인했다. UI상 확인했을 때 처음에 호출버튼 누르기 전에 승차를 원하는 정류장과 하차를 원하는 정류장을 먼저 선택하도록 나와있기 때문에 주변에 정류장이 있음을 인지하지 못하고 잘못 호출했을 가능성은 낮아 보인다.
호출 위치가 수요 예측에 있어서 중요한 정보가 될 수 있을 것 같아 plotting 해보았지만 신뢰도가 매우 떨어져 아쉬웠다.
alight_station & off station :
승하차 정류장
승차 정류장 사용 빈도는 영종역 (운북동) > 운서역 (운서동_주거) > 인천공항T1 3층 (운서동_공항) 순
하차 정류장 사용 빈도는 영종역 (운북동) > 인천공항T1 3층 (운서동_공항) > 힐스테이트 (중산동) 순이었다.
전체적으로 승차 및 하차 빈도가 높은 정류장 TOP 10은 아래 위치와 같았다.
운서동에 주거하는 사람들의 수요는 거의 '운서역'과 'KT인천공항지사'가 담당하고 중산동 거주민의 수요도 아파트단지 내부에 있는 4개의 정류장들이 수요를 분담함을 알 수 있다. 추가로 영종역에서 승차 및 하차 빈도가 제일 높았으며, 인천공항 제 1터미널에도 수요가 높았다.
영종역에 대한 POI 추가 조사 결과, 영종역은 1. 공항철도가 통하는 길 + 2. 공영주차장 있음의 특징이 있다.
영종도 대부분의 주민들이 영종역에서 공항으로 가거나, 차를 주차해놓고 공항으로 간다고 한다. 또한, 영종도 주민 외의 주차 수요도 매우 높아 공영주차자의 자리가 부족해서 영종역 근처에 대고 가는 경우도 있다고 한다. 운서역 또한 공영주차장이 있다고 한다.
(요즘 휴가가는 사람들이 많아지면서 영종도 전체가 불법주차 대행 업소가 될 정도로 주차난이 심각하다고 한다..)
위의 시간대별 승하차 동의 위치로 보아, 특정 시간대에 특정 위치에서 수요가 몰림을 확인할 수 있었다. 그렇다고 그 위치로 모든 차들이 운행을 하도록 알고리즘이 짜여진다면 그 다음으로 수요가 많은 다른 위치에서는 상대적으로 다시 차가 부족하다고 느낄 수 있다. 특히나 당시 운행 차량수가 적은 경우에서는 더더욱 그랬을 것이다.
운서동 공항지역, 주로 인천공항 제 1터미널에서 타고 내리는 이용객들이 많았는데 해당 장소에서는 유독 저녁시간대에 차를 '타려는' 사람들이 많고 (공항이 출발점) 반대로 이른 오전시간대에는 차에서 '내리려는' 사람들이 많다는 (공항이 목적지) 사실도 매우 신기한 관측 결과였다.
운서동(공항)에서 출발한 사람들이 많이 내리는 곳은 운서동(주거)이었고, 반대로 운서동(공항)에서 내리려는 사람들이 많이 승차한 곳도 마찬가지로 운서동(주거)이었다. 해당 구역은 위에서 언급했듯이 운서역, 그리고 공영주차장의 시설이 갖춰져 있는 곳이다.
따라서 서비스 운영을 시작하는 이른 오전 시간대에는 운영하는 버스의 일부가 미리 운서역 쪽을 순회하고, 서비스 운영이 종료되는 시간대에는 운영 버스의 일부가 미리 공항일대를 순회하여 오전에는 영종도의 동쪽에서 서쪽으로 향하는 + 저녁에는 영종도의 서쪽에서 동쪽으로 향하는 공항 이용객들의 수요를 원활하게 분담할 수 있다면 좋을 것이라고 생각했다.
추가로, 중산동은 운서동(주거)보다는 적지만, 모든 시간대에 꾸준한 승차 수요를 갖고 있었으며 하차 수요는 9시부터 17시까지 모든 운행 구역 중 최고를 차지했다. 중산동에 하차하거나 승차한 대부분의 승객들은 운서동(주거)에서 탑승하거나 하차했다. 각 동을 zone이라고 정의한다면 zone 내부통행량이 가장 많은 곳은 운서동(주거) 구역이므로 공항이용객 외 다른 승객들을 위해서는 차들이 운서(주거)에서 중산동을 순환하는 형태로 효율적으로 운영될 수 있을 방법에 대한 (배차 및 수요 예측) 알고리즘 설계가 필요할 것이라는 생각이 든다.
distance :
호출 시 입력된 출발지에서 목적지까지의 예상 거리
75% 값이 9km, 50% 값이 7.2km 이었으니 이용자의 약 절반이 기본요금 거리인 7km이내로만 이동함을 알 수 있었다. (영종도 내에서 동 간 이동 하면 7km 정도 나온다) 11km 이상부터 빈도가 매우 떨어졌다.
fare :
호출 시 입력된 출발지에서 목적지까지의 예상 요금
예상거리에 따라 기본요금 + 추가요금이 계산되어 예상 요금이 책정됨
(요금제가 8km 이하 성인기준 기본요금 1,800원에, 추가 1km당 100원이다.)
'기타' column
suc_status:
배차 상태
다른 column 분석 시 '배차상태'가 '하차완료'인 행에 대해서만 분석 가능
suc_status_d:
배차 상태 상세
** 배차 상태 및 배차 상태 상세에 대해서는 이전 글 user flow chart 분석에서 자세히 다룸
'Project' 카테고리의 다른 글
[청년주거(2)] 문제정의 (0) | 2023.07.31 |
---|---|
[청년주거(1)] 현상의 파악 (0) | 2023.07.30 |
[iMOD(4)] 지표 도출 (0) | 2023.07.26 |
[iMOD(2)] Data Cleaning 부터 (0) | 2023.07.20 |
[iMOD(1)] 나의 첫 데이터 분석기 (0) | 2023.06.29 |