한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
머신러닝으로 버스 지연 예측하기
2019년 10월 2일 수요일
게시자: Alex Fabrikant, Google Research 연구원
원문은
이 곳
에서 확인하실 수 있습니다.
전 세계 수억 명의 사람이 매일 대중교통을 이용해 출퇴근하고 있고, 전 세계 대중교통의 절반 이상을 버스가 담당하고 있습니다. 지구촌의 수많은 도시가 계속 성장함에 따라, 출퇴근하는 사람들은 기다리는 차편, 특히 교통 상황에 따른 영향을 크게 받는 버스 도착 시간의 지연 여부를 정확히 알고싶어 합니다. Google 지도에서 제공하는 대중교통 안내 정보는 수많은 교통 관련 기관에서 실시간으로 제공하는 데이터에 의존하지만, 기술 및 리소스의 제약으로 인해 실시간으로 제공하지 못하는 기관도 많습니다.
현재, Google 지도에서는
버스용 실시간 도착 지연 서비스를 도입
했는데, 애틀랜타부터 자그레브, 이스탄불, 마닐라 등에 이르는 전 세계 수백 개의 도시에서 버스 도착 지연을 예측하는 서비스입니다. 덕분에 6천만 명 이상의 사람이 버스 도착 시간을 더 정확히 알 수 있게 되었습니다.
3주일 전에 인도에서 첫선을 보인
이 시스템은 실시간 자동차 교통 흐름 예측 데이터를 버스 노선 및 정류소 데이터와 결합하여 버스 운행 시간이 얼마나 될지 예측하는 머신러닝 모델로 운영됩니다.
모델의 시작
교통 기관에서 실시간 예측 정보를 제공하지 않는 많은 도시에서는 사람들이 Google 지도 운전 안내 기능을 사용해 버스 지연을 대략적으로 추정하는 현명한 임시방편을 쓴다는 사실을 설문조사를 통해 파악할 수 있었습니다. 하지만 버스는 단순히 덩치가 큰 자동차가 아닙니다. 버스는 정류소에서 정차하고, 일반 자동차보다 가속, 감속, 회전에 시간이 더 걸리면서도 때로 버스 전용 차선처럼 특별한 도로를 사용할 수 있는 특권을 받기도 합니다.
한 가지 예로, 수요일 오후에 시드니에서 버스에 탑승하는 사례를 살펴봅시다. 버스의 실제 운행(파란색)이 공표된 일정(검은색)보다 몇 분 정도 늦어지고 있습니다. 자동차 교통 흐름 속도(빨간색)가 버스 운행에 영향을 주지만(예: 2,000미터 지점에서 감속), 800미터 지점의 정류소에서 정차하는 바람에 일반 자동차에 비해 버스 속도가 상당히 느려지게 됨을 알 수 있습니다.
모델을 개발하기 위해 교통 기관의 실시간 피드에서 받은 데이터를 해당 노선 운행 중 버스 운행 경로에서의 교통 흐름 속도에 맞춰 조정했고, 이를 반영하여 시간의 경과에 따른 버스 위치 시퀀스로부터 훈련 데이터를 추출했습니다. 이 모델은 운행 스케줄 단위의 시퀀스(도로 블록과 정류소 도착)로 분할되며, 각 시퀀스는 버스 운행 스케줄의 한 부분에 해당하고 각 단위에서 시간을 예측합니다. 보고가 자주 이루어지지 않거나 버스가 빨리 움직이거나 블록과 정류소 거리가 짧은 등의 이유 때문에 인접한 한 쌍의 관측 데이터는 대개는 많은 단위에 걸쳐 있게 됩니다.
이 구조는 최근에
음성 처리
,
기계 번역
등에 성공적으로 적용된 것과 같은 신경 시퀀스 모델에 적합합니다. 이 모델은 더 간단합니다. 각 단위에서 시간을 독립적으로 예측하며, 단위별 예측의 합이 최종 출력됩니다. 많은 시퀀스 모델과는 달리, 이 모델에서는 각 단위에서 도출한 결과를 결합할 방법을 학습할 필요, 단위 시퀀스를 통해 state를 전달할 필요도 없습니다. 대신에 시퀀스 구조를 사용하여 공동으로 (1) 개별 단위에서 시간 모델을 훈련하고 (2) 관찰되는 각각의 궤적이 총 시간을 궤적이 걸쳐 있는 많은 단위의 합에 할당하는 'linear 시스템'을 최적화할 수 있습니다.
파란색 정류소에서 출발하는 버스 운행 (a)를 모델링하기 위해, 모델 (b)에서는 파란색 정류소, 세 개의 도로 부분, 흰색 정류소 등에 대해 운행 스케줄 단위에서 지연 예측 값을 합산합니다.
‘위치’ 모델링하기
도로 교통의 지연 외에도, 우리는 모델을 훈련하는 과정에서 버스 노선에 관한 세부 정보뿐 아니라 버스 운행의 위치와 타이밍에 관한 신호도 고려합니다. 소규모 지역 내에서도 모델은 다양한 거리에서 자동차 속도 예측을 버스 속도로 다르게 변환해야 합니다. 아래의 왼쪽 패널에는 한 버스 운행 노선에 대해 모델에서 예측하는 자동차 속도와 버스 속도 간의 비율이 색으로 표시되어 있습니다. 빨간색에 더 가깝고 더 느려지는 부분은 정류소 근처에서 버스가 감속하기 때문에 그렇게 표시될 수 있습니다. 상자로 강조표시한 부분에서 빠른 속도를 나타내는 녹색 구간의 경우, 모델이 버스 전용 회전 차선을 발견했으며 이는 스트리트 뷰(오른쪽)에서도 확인할 수 있습니다. 그런데 이 노선은 우회전이 좌회전보다 느린 호주에 있는 노선으로, 해당 지역의 특색을 고려하지 않는 모델에서는 놓치게 되는 또 다른 측면입니다.
특정 거리, 인근 지역, 도시의 고유한 특성을 포착하기 위해, 운행 스케줄 단위의 지리 정보(도로 또는 정류소의 정확한 위치)가 다양한 축척으로 해당 위치의 삽입 데이터의 합으로 모델에 표시되는 상태에서, 우리는 모델이 다양한 크기의 지역에 대한 표시의 계층 구조를 학습하도록 합니다. 먼저 특수한 사례를 이용해 더욱 세분화된 위치에 대해 점진적으로 더 큰 페널티를 부과하며 모델을 훈련하고, 특징 선택(feature selection)에 대한 결과를 사용합니다. 그와 같이 세분화된 특징이 거의 문제가 되지 않는 교외의 개활지와는 반대로, 이를 통해 100미터의 거리도 버스의 움직임에 영향을 미칠 정도로 충분히 복잡한 지역에서 세분화된 특징이 고려되도록 할 수 있습니다.
또한 훈련 시에 훈련 데이터에는 없었던 지역에 대해 이후에 쿼리가 있을 가능성도 시뮬레이션합니다. 각 훈련 배치에서 예시를 임의로 자른 조각을 선택하고 각 조각에 대해 임의로 선택한 눈금 미만의 지리적 특징은 삭제합니다. 일부 예시는 정확한 버스 노선 및 거리와 함께 유지되고, 다른 예시는 인근 지역이나 도시 수준의 위치만 유지하며, 또 다른 예시에는 아예 지리적 컨텍스트가 없습니다. 그러면 훈련 데이터에 관련 내용이 없거나 부족한 지역에 관한 이후의 쿼리에 대한 모델의 준비 수준을 더 높일 수 있습니다. 우리는 Google 지도가
업무상 붐비는 시간
,
주차 곤란
및 기타 특징에 대해 사용하는 것과 동일한 데이터셋에서 사용자의 버스 이용에 관해 익명화된 추론을 사용하여 훈련 자료의 범위를 확장합니다. 하지만 이 데이터에는 전 세계 버스 노선 대다수가 포함되지 않으므로, 우리의 모델은 새 지역으로 확고하게 일반화해야 합니다.
지역적 특색 학습
도시와 인근 지역은 저마다 다른 생활 리듬으로 움직이므로, 모델이 위치 표시를 시간 신호와 결합할 수 있도록 허용합니다. 버스는 시간에 대해 복잡한 종속성을 가집니다. 예컨대, 화요일 오후 6시 30분에서 오후 6시 45분 사이의 시간대에 일부 인근 지역에서는 러시아워의 교통 혼잡이 진정 기미를 보이는 반면에, 다른 인근 지역에서는 저녁 약속으로 사람들이 분주하게 모여드는 시간대일 수 있고, 또 다른 곳은 완전히 적막한 느낌을 주는 마을도 있을 것입니다. 우리의 모델은 특정 지역의 하루 중 몇 시인지, 일주일 중 무슨 요일인지와 같은 신호의 임베딩을 학습하는데, 이를 위치 표시와 결합하면 자동차 교통량을 통해서는 관찰할 수 없는 러시아워의 버스 정류장 혼잡과 같은 두드러진 지역별 변화를 포착할 수 있습니다.
이 임베딩은 하루의 각 시간대에 4차원 벡터를 할당합니다. 대부분의 신경망 내부 구조와는 달리, 4차원은 거의 시각화하기에 충분하지 않으므로, 모델이 아래와 같은 예술적 렌더링을 통해 이러한 차원 중 세 차원에서 하루의 시간을 어떻게 배열하는지 살펴봅시다. 이 모델은 실은 시간이 순환적이라는 점을 학습하여 시간을 '루프' 형태로 배치합니다. 그러나 이 루프는 시계 앞면의 평평한 원 모양이 아닙니다. 모델은 버스 움직임의 변화에서 많은 특징을 잡아낼 수 없는 '한밤중'이나 '늦은 오전'과 같이, 다른 뉴런이 개념을 쉽게 구분할 수 있는 간단한 규칙을 만들 수 있도록 하는 넓은 굴곡부를 학습합니다. 반면에, 저녁의 퇴근 패턴은 인근 지역과 도시 간에 훨씬 더 큰 차이를 보이며, 모델은 오후 4시부터 오후 9시 사이에 더욱 복잡하고 '찌그러진' 패턴을 생성하는 것으로 보이는데 이를 통해 각 도시의 러시아워 타이밍에 관해 더욱 난해하고 복잡한 추론이 가능합니다.
모델의 시간 표시(4가지 차원 중 3가지)가 루프를 형성하는데, 여기서는 시계의 원주로 재구성했습니다. 오후 4시~9시 및 오전 7시~9시와 같이 위치에 더욱 종속적인 시간 범위는 더 복잡하게 '찌그러지는' 반면에, 오전 2~5시와 같은 특징이 없는 큰 범위는 더 간단한 규칙에 맞게 완만하게 표시됩니다. ( textures.com에서 구한 텍스처와 hdrihaven에서 구한 HDRI 사용한 Will Cassella의)
다른 신호와 함께, 이런 시간 표시를 통해 자동차 속도를 일정하게 유지하더라도 복잡한 패턴을 예측할 수 있습니다. 예를 들어 뉴저지를 관통하는 10km 거리의 버스에 탑승한 경우를 가정하여, 우리 모델에서는 점심시간에 거리로 나오는 인파와 평일의 러시아워를 선택합니다.
종합적으로 살펴보기
모델을 완전히 훈련한 상태에서 위의 시드니 버스 탑승에 관해 학습한 내용을 살펴봅시다. 당일의 자동차 교통 데이터를 기반으로 모델을 실행하면 아래와 같이 녹색으로 예측 결과를 얻을 수 있습니다. 이 모델이 모든 걸 포착하지는 못합니다. 예를 들어 버스는 적어도 31초 이상 정지했지만 800미터 지점에 있는 정류소에서 머문 시간은 10초에 불과합니다. 그러나 우리의 예측 모델이 실제 버스 이동과는 1.5분 이내의 범위에서 오차를 유지하므로, 해당 버스 운행에 관해 운행 스케줄이나 자동차 주행 시간만으로 주어지는 정보에 비해 훨씬 많은 뉘앙스를 포착하는 셈입니다.
앞으로의 여정
현재로선 우리 모델에 한 가지가 없죠? 버스 운행 스케줄 자체 말입니다. 지금까지는 기관에서 제공하는 공식 버스 운행 스케줄을 포함하여 실험한 결과, 예측 결과를 현저히 개선하는 효과는 없었습니다. 어떤 도시에서는 교통 상황의 변동이 워낙 심해 스케줄 계획을 세우려는 시도 자체가 무의미할 수도 있습니다. 반면에 다른 도시에서는 버스 스케줄이 정확히 지켜질 수 있지만, 그건 아마 교통 기관에서 교통 패턴을 신중하게 고려하기 때문일 것입니다. 그리고 우리는 데이터로부터 그러한 점을 추론합니다.
우리는 계속해서 스케줄의 제약 조건과 다른 많은 신호를 더 나은 방식으로 실험하면서 더욱 정확하게 시간을 예측하여 사용자가 더 쉽게 여정을 계획할 수 있도록 하겠습니다. 또한, 우리가 여러분의 편안한 여행길에 유익한 존재이길 바랍니다. 즐거운 여행길 되시길!
감사의 말
이번 작업은 Google Research의 James Cook, Alex Fabrikant, Ivan Kuznetsov, Fangzhou Xu와 Google 지도의 Anthony Bertuca, Julian Gibbons, Thierry Le Boulengé, Cayden Meyer, Anatoli Plotnikov, Ivan Volosyuk가 공동으로 진행했습니다. Senaka Buthpitiya, Da-Cheng Juan, Reuben Kan, Ramesh Nagarajan, Andrew Tomkins에게 감사드리고, 특히 지원과 큰 도움이 된 토론에 아낌없는 성원을 보내주신 Transit 팀에 감사드립니다. 또한 모델의 시간 임베딩을 다시 생각해보는 데에 영감을 주신 Will Cassella에게도 감사의 인사를 드립니다. 시스템 훈련의 기초가 된 교통 데이터 피드를 제공해주신 관련 기관에도 많은 신세를 졌습니다.
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed