[译] 解密 Uber 如何使用RNN预测极端事件

原作者:NIKOLAY LAPTEV, SLAWEK SMYL, & SANTHOSH SHANMUGAM

原文地址:https://eng.uber.com/neural-n...

clipboard.png

在Uber,事件预测能够给辅助推断用户需求。它包含几个要素:何地、何时、有多少用户在任意时间内将会到达。

极端事件发生的时间比如:节假日、音乐会、恶劣天气、运动赛事在提高预测精度方面都非常重要。在极端事件中计算需求时间序列是异常检测、最有资源分配、预算中是关键的一环。

虽然极端事件预测是一个 Uber 运营中关键的一部分,但是却面临数据稀疏对预测精度的挑战。想象一下,在除夕夜预测,那么需要为数不多的除夕夜数据而且在每个用户分组里都不尽相同。对于传统的历史数据,极端事件预测也依赖于大量外部因素,比如天气、人口增长、市场变化比如运力激励

一个经典的时间序列模型的组合比如标准的R包和机器学习方法是通常被用来预测事件。这些方法对于Uber来说不够具有灵活性和拓展性。

本文,我们引入Uber结合历史数据和外部因子的极端事件预测模型,相比此前模型主要在架构上有些亮点。

创建 Uber 新的极端事件预测模型

经过一段时间,我们意识到为了满足业务增长的需要,我们需要提升我们的预测模型精度。

我们最终使用了LSTM架构构造时间序列模型,它是一个端到端提取特征的建模方法,容易从每个外部变量中自动提取特征。通过提供海量高维数据,lstm的方法可以构建复杂非线性特征交叉。

在选定框架之后,我们使用备份数据训练模型:

图 1: 骑行增长数量随着时间推移而变化。断层处表示在新年有许多人用Uber乘车回家。

极端事件预测因为它们不同的频率所以带来了困难,为了克服数据缺陷,我们决定训练单一、灵活的神经网络来给许多城市做一次性建模,这极大提升我们的进度。

用神经网络建立一个新的体系结构

我们的目标是设计一个通用、端到端时间序列预测模型,满足可拓展、精确并且适用于异构时间序列。为了实现这个目标,我们使用成千上万的时间序列来训练多个模块的神经网络。

我们测量和跟踪原始外部数据来建立神经网络:

clipboard.png

图 2:我们的模型使用一些衍生变量的组合,包括天气(降水、风速、温度)、城市信息(给定时空范围的骑行量)、注册用户信息、当地节日与事件。

这些原始数据被用在我们的模型训练上来进行简单预处理,包括日志解析、扩容和数据趋势消除。

使用滑动窗口训练

训练集包括滑动窗口数据(输入 X)和(输出Y),使用这两个窗口,可以训练神经网络最小化损失,比如使用RMSE作为评估。

X 和 Y 的窗口滑动每次都增加一些小的训练数据:

clipboard.png

图3:X和Y的滑动窗口包括 批处理大小、时间、特征(X)和预测变量(Y)。

接下来,将解释如何使用训练数据来设计一个自定义LSTM模型。

裁剪LSTM模型

在测试期间,我们会用一个没有调整过任何参数的简单 lstm 作为模型基准,包含多变量预测因子和机器学习要素。该模型在使用单一神经网络时表现较差,单一适应时间序列。

你可能感兴趣的:(r,uber)