Tech Review of Uber #3
이 글은 2017년 6월에 작성된 아래 블로그 아티클을 리뷰한 것으로, 간단히 의역 및 번역을 한 뒤 중간중간 제 의견을 첨부하였습니다. (검은색 글이 번역이고 파란색 글이 의견입니다.)
https://eng.uber.com/neural-networks/
Uber에서는 '이벤트 예측'을 통해 사용자 수요를 예상함으로써, 서비스의 미래에 대한 대비를 하고 있다. 목표는 주어진 시점에 언제, 어디서, 얼마나 많은 탑승 요청이 우버로 유입될지 정확히 예측하는 것이다.
특히 사용자가 많은 공휴일, 콘서트, 악천후, 스포츠 경기 등과 같은 주요 이벤트('extream event'를 '중요 이벤트'로 번역하였습니다.)들은 서비스 운영 계획을 세울 때 예측이 더 중요해지게 만든다. 주요 이벤트가 발생했을 때, 수요에 대한 시계열 예측치를 계산하는 것은 이상 탐지와 자원 할당 최적화, 그리고 예산 산정을 위한 아주 핵심적인 요소이다.
주요 이벤트 예측이 Uber 서비스 운영에 있어서 아주 중요함에도 불구하고, 데이터의 희소성이 정확한 예측을 어렵게 만든다. Uber에서 가장 바쁜 날 중에 하나인 New Year's Eve(NYE)를 떠올려 보자. 우리는 단지 몇 개의 NYE 데이터만 가지고 있을 뿐이고, 각각의 데이터는 서로 다른 사용자 집단으로 구성되어 있다. 그리고 주요 이벤트를 예측하는 일은 과거 데이터뿐만 아니라 날씨, 인구 증가, 드라이버 인센티브와 같은 마케팅 정책의 변화 등 온갖 외부 요인들에도 큰 영향을 받는다. (Horne, John D. and Manzenreiter, Wolfram. Accounting for mega-events. International Review for the Sociology of Sport, 39(2):187–203, 2004.)
표준 R 예측 패키지에서 찾을 수 있는 고전적인 시계열 모델들과 기계학습 방법론의 조합으로 종종 특정 이벤트를 예측하기 한다. (Hyndman, Rob J and Khandakar, Yeasmin. Automatic time series forecasting: the forecast package for R. Journal of Statistical Software, 26(3):1–22, 2008., Meinshausen, Nicolai. Quantile regression forests. Journal of Machine Learning Research, 7:983– 999, 2006.) 그러나 이런 접근법들은 유연하지도 않고 Uber에서 사용할 만큼 규모 확장을 할 수도 없는 편이다.
이 글에서는, 과거 데이터와 외부 요인들을 조합하여 주요 이벤트를 좀 더 정확하게 예측하는 Uber의 예측 모델과 그 아키텍처, 그리고 기존 모델들에 비해 어떤 점이 더 좋은지 살펴볼 예정이다.
사용자들에게 365일 24시간 동일한 서비스를 제공한다는 것은 쉬운 일이 아닙니다. 특히 Uber와 같이 글로벌 스케일로 성장한 서비스는 온갖 종류의 외부 이벤트에 의해 사용자들의 수요가 들쭉날쭉 변화하게 되고, 이런 상황에 어떻게 대응하는지에 따라 서비스의 품질 또한 천차만별 달라질 것입니다. 통계적으로 시계열 데이터를 예측하는 몇 가지 방법론들이 존재하긴 하지만, 다이내믹한 서비스 환경에서 다 정확하게 적용되는 것은 아니기 때문에 Uber에서도 기계학습을 도입하게 된 것으로 보입니다.
우리는 시간이 점점 흐를수록 Uber의 마켓 전반에 대한 주요 이벤트 예측 정확도를 높이기 위해서 우리의 예측 모델을 업그레이드해야 한다는 것을 깨달았다.
결론적으로 우리는 end-to-end 모델링이 가능하고 외부 변수 적용이 편리하면서도 자동 특성 추출 기능이 있는 Long Short Term Memory(LSTM) 기반의 아키텍처를 만들기로 결정했다. (Assaad, Mohammad, Bone, Romuald, and Cardot, Hubert. A new boosting algorithm for improved time-series forecasting with recurrent neural networks. Inf. Fusion, 9: 41-55, 2006.) LSTM은 수많은 차원의 대용량 데이터를 제공함으로써 복잡한 비선형 특성들의 상호작용을 모델링할 수 있다.
우리의 아키텍처를 선택한 다음에는, 아래와 같이 모델을 학습하는데 필요한 과거 데이터들을 테스트해보았다.
주요 이벤트는 자주 발생하는 일이 아니기 때문에 예측하기 어려울 수 있다. 이런 데이터 부족 문제를 극복하기 위해서 우리는 여러 도시에서 수집된 데이터들을 가지고 한꺼번에 하나의 유연한 신경망을 학습시키기로 결정했고, 정확도를 엄청나게 많이 향상할 수 있었다.
1년에 한 번 있는 휴일에 대한 데이터는 최근 5년 치를 가져오더라도 표본이 5개밖에 안된다는 문제가 있습니다. 게다가 인터넷 환경에서 5년 전 사용자들의 행동 패턴은 현재와는 많이 다를 확률이 높기 때문에 표본의 대표성도 떨어집니다. 이런 문제를 피하기 위해 Uber에서는 여러 장소에서 수집한 데이터로 하나의 모델을 학습시키는 방법을 썼다고 합니다. 하지만 이 방법으로는 각 장소별 특성이 모델에 반영되지 않아서 정확도가 오히려 떨어졌을 수도 있겠다는 생각이 듭니다. 결국 '주요 이벤트'에 대한 예측은 데이터 부족에서 발생하는 근본적인 한계가 있을 수밖에 없고, 적당한 수준의 품질에서 만족해야 합니다. 그 타협 지점을 어디로 잡느냐가 핵심적인 의사결정 포인트가 될 것입니다.
우리의 목표는 확장 가능하고 정확하면서 다양한 형태의 시계열 정보를 처리할 수 있는 일반적인 end-to-end 시계열 예측 모델을 만드는 것이었다. 이를 위해 우리는 수 천 개의 시계열 데이터를 다중 모듈 신경망을 학습시키기 위해 사용하였다.
우리는 신경망을 만들기 위한 외부 원천 데이터를 측정하고 추적하여 아래와 같이 보여주었다.
이 원천 데이터는 모델을 학습시킬 때 로그 변환이나 스케일링, 데이터 추세 제거 등의 단순한 전처리를 하기 위해 사용되었다.
우리 신경망의 학습을 위한 데이터셋은 예측 수평선뿐만 아니라 필요한 지연(예를 들면, input size) 만큼의 슬라이딩 윈도 X(input), Y(output)가 필요하였다. 이 두 윈도를 사용하여, Mean Squared Error와 같은 손실 함수를 최소화하면서 신경망을 학습시켰다.
아래와 같이, X와 Y 윈도 둘 다 하나씩 증가하면서 학습 데이터를 생성한다.
다음으로, 이렇게 학습된 데이터를 커스텀 LSTM 모델을 설계하기 위해서 어떻게 사용했는지 알아보자.
테스트를 하면서 우리는 vanilla LSTM 구현이 단변량 예측(univariate forecasting)과 기계학습 요소들을 조합한 기준 모델과 비교했을 때 그렇게 압도적인 성능을 보여주지는 않는다는 것을 알았다. 이 vanilla 모델은 학습되지 않은 도메인에 적용될 수 없었고, 그래서 하나의 신경망을 사용해서는 좋은 성능을 낼 수 없었다.
수백만 개의 metric으로 만들어진 시계열 데이터마다 각각 하나의 모델을 학습시키는 것은 실용적이지가 않다. 일단 그럴만한 충분한 리소스가 없다. 게다가, 하나의 vanilla LSTM을 학습하는 것만으로는 서로 다른 시계열 데이터들을 구분할 수 없기 때문에 좋은 성능을 얻을 수 없었다. 수작업으로 각 시계열 데이터의 특성과 input들을 vanilla LSTM 모델에 집어넣을 순 있지만, 이런 방식을 매우 지루하고 에러를 만들어 내기 쉽다.
정확도를 향상하기 위해서, 우리는 아래와 같이 자동 특성 추출 모듈을 모델에 포함시켰다. (Ogunmolu, Olalekan P., Gu, Xuejun, Jiang, Steve B., and Gans, Nicholas R. Nonlinear systems identification using deep dynamic neural networks. CoRR, 2016.)
우리는 자동 특성 추출 모듈을 통해 하나의 모델로 다양한 예측을 수행하는 신경망 아키텍처를 만들기로 결정했다. (Rob J. Hyndman, Earo Wang, Nikolay Laptev: Large-Scale Unusual Time Series Detection. ICDM Workshops 2015) 그림 4에서 보여주다시피, 이 모델은 먼저 자동으로 앙상블 기반의 특성 추출을 활용하여 신경망을 준비한다. 특성 벡터가 추출된 뒤에는, 기본적인 앙상블 기법으로 평균을 구하게 된다. 마지막 벡터는 input과 함께 최종 예측을 만들기 위해 합쳐진다.
테스트 결과, 기본 LSTM 아키텍처 대비 Symmetric mean absolute percentage error(SMAPE)가 14.09% 향상되었고, Uber의 실시간 모니터링, 근본 원인 탐색 도구인 Argos의 고전적인 시계열 모델 대비 25% 향상되었다.
성공적으로 개발되고, 적용되고, 테스트된 아키텍처는 이제 실제 서비스에 투입될 수 있었다.
LSTM 모델을 약간 수정하여 예측 정확도를 향상했다는 내용입니다. 여기서 인상적인 부분은 처음부터 LSTM 모델을 수정한 멋진 모델을 만든 것이 아니라 고전적인 모델과 vanilla LSTM의 비교부터 수행했다는 점입니다. 무조건 새로운 것을 만들기 위해서만 애쓰는 것보다는, 기존 방법들을 최대한 활용해본 뒤 개선점을 찾아서 조금씩 보완하고 고치는 것이 좋은 연구 개발 전략이 아닌가 싶습니다.
신경망의 가중치들이 계산되면 임의의 프로그래밍 언어로 뽑아내서 구현할 수 있다. 우리의 파이프라인은 먼저 Tensorflow와 Keras를 이용하여 오프라인에서 신경망을 학습하고, 생성된 가중치들을 아래 그림과 같이 네이티브 Go 코드로 출력해준다.
이 글을 위해 우리는 5년 동안의 미국 전체에서 발생한 Uber 운행 일간 기록을 사용하여, 크리스마스와 New Year's Day와 같은 공휴일의 앞, 연휴 중, 뒤 7일 치 데이터에 대한 모델을 만들었다.
아래는 우리의 기존 모델과 새로운 모델의 평균 SMAPE 비교표이다.
예를 들어, 새로운 모델은 크리스마스를 가장 예측하기 어려워했는데, 이는 이때 오차가 가장 크고 Rider 수요가 불확실하다는 것을 보여준다.
아래 그림은 어느 한 도시의 200일 동안 있었던 운행 기록의 실제값과 예측치를 보여준다.
테스트의 결과는 기존 모델 대비 정확도가 약 2-18% 정도 향상된 것을 보여주었다.
신경망이 Uber에서 도움이 되긴 했지만, 이 방법이 은탄환인 것은 아니다. 우리 경험에 의하면, 신경망이 유용하게 사용되기 위해서는 다음 세 가지 조건이 필요하다. (a) 시계열 데이터 개수 (b) 시계열 데이터의 길이 (c) 시계열 데이터 사이의 상관관계. 이 세 가지 조건 모두 고전적인 시계열 모델보다 신경망을 활용한 방법이 더 정확해질 수 있는 가능도(likelihood)를 높여준다.
충분히 좋은 결과를 얻었음에도 불구하고 자랑만 하는 것이 아니라 주의할 점을 잘 지적하고 있습니다. 앞에서 말한 바와 같이 이런 종류의 데이터는 sample 수가 많지 않고 경우에 따라 매우 다른 특성을 보이기 때문에 모델을 일반화하기가 매우 어렵습니다. 그리고 아마 이 방법으로 수요를 어느 정도 정확하게 예측하더라도 실제 서비스 운영에 의미 있게 반영되기 위해서는 많은 난관들을 극복해야 합니다. 그렇기 때문에 글 내용이 예상보다 조금 건조한 것이 아닌가 생각합니다.
우리는 하나의 자체적인 end-to-end 도구, 혹은 더 크고 자동화된 예측 시스템의 일부 재료로 사용될 수 있는 범용 신경망 예측 모델을 만들기 위해 노력하고 있다. 만약 이런 종류의 연구에 흥미가 있다면 (그리고 Down Under에 가고 싶다면), 2017년 8월 6일 시드니에서 열리는 ICML의 시계열 워크숍에서 Uber의 논문을 확인하길 바란다.
Nikolay Laptev, Santhosh Shanmugam, and Slawek Smyl are data scientists on Uber’s Intelligent Decision Systems team.
Acknowledgements: Li Erran Li is a deep learning engineer with Uber ATG. Jason Yosinski is a research scientist at Uber AI Labs.
Editor’s Note February 5th, 2018: We have clarified Uber’s contribution to the ICML time series workshop. ~ Conor Myhrvold
데이터의 조건에 대해 조금 더 자세히 다뤄줬으면 얻을 정보가 많았겠다는 아쉬움이 들긴 하지만, 그래도 방법론 그 자체보다는 연구를 진행하는 과정과 문제 해결 방식은 좋은 참고가 될 것 같습니다. 이 글은 Uber의 기술력이나 성취를 과시하기보다는 조금 더 객관적이고 냉정한 느낌으로 학구적인 내용을 다루고 있습니다. 분야 자체가 어렵고 가시적인 성과가 나오기 힘든 영역이라 그런 것이 아닐까 생각합니다. 이 글은 이미 작성된 지 2년이 지난 글이기 때문에, 이후 어떤 추가적인 성과가 있었는지 추적해보는 것도 재미있을 것 같습니다.
https://brunch.co.kr/@andrewhwan/55
https://brunch.co.kr/@sonjoosik/5