+-
滴滴ETA论文解读:WDR模型

引言

paper:Learning to Estimate the Travel Time

读后感:整体中规中矩,将WD模型和LSTM相结合,解决实际的业务问题。

备注:ETA 是 Estimate Travel Time 的缩写,即,到达时间预估。这个问题描述是,在某一个时刻,估计从 A 点到 B 点需要的时间。对于滴滴,关注的是司机开车把乘客从起点送到终点需要的时间。显然,ETA 就是一个时空相关的回归问题。

Learning to Estimate the Travel Time

规则

用规则模型计算 ETA 是此前地图行业通用做法之一。即分别计算各段路的行驶时间,全部加起来再根据红绿灯时间做一个偏移修正。用数学来描述,预估时间可以表达为:
image.png

其中,$t_i、c_j$分别表示第i个路段、第j个红绿灯的耗时时长。考虑到路段的通行状态每时每刻都在动态变化,利用最新的历史数据(比如,刚刚过去的 5 分钟)来估计路段的实时通行时间,而把历史平均通行时间作为默认值来填充信息缺失的路段。红绿灯耗时时长计算亦然。

优点:计算量小,易于实现
缺点:依赖人工经验,可扩展性差,难以利用多种多样的特征

常规模型

滴滴将 MAPE(mean absolute percentage error)选择为目标函数,对应于 MAPE 的优化问题为:
image.png

为了防止过拟合,还加上了正则项:
image.png

在具体到模型层面,滴滴先后采用了两种业界比较主流的方法:Tree Based model 和 Factorization Machine。

Tree Based model

其中,树模型的最终输出是多棵树的集成结果,可以写成如下形式,其中,T表示树的颗数:
image.png
每一棵树都会根据输入特征进行判断,决定输入数据所属的叶子节点,然后将叶子节点对应的分数作为单棵树的输出:$f_t(x)=w_{t}u(x)$。其中,$w_{t}$代表了第 t 棵树全部叶节点构成的分数向量;$u(x)$是一个映射函数(通过一系列条件判断),决定了$x$应该归属的叶子节点序号。

针对于第t颗树,对应的正则项可以表达为如下形式,其中L为叶子节点的数目,第二项通过 L2 范数来对叶子节点的输出 score 进行控制, $γ$是超参数:
image.png

具体到GBDT模型,最终优化目标形式化表述为:
image.png
由于mape是不可微分函数,虽然目标函数是凸函数,但是目标函数是非平滑的。我们可以使用huber loss近似mape函数,或者,采用次梯度方法(subgradient method)求解该优化问题。

Factorization Machine

FM的具有预测准确性高、特征工程灵活两个优点,广泛应用于推荐系统和在线广告系统领域。FM模型的核心思路是将特征交互的权重矩阵进行分解,表达为向量内积的形式,以此来减少参数数量。二阶 FM 表示为:
image.png

其中d是特征维度,通常在千万级别甚至更高;而参数向量v的维度 m 相对很小,通常在几十的量级便能达到较好的预测精度。

如果对FM增加正则项,可以形式化表示为如下形式,其中$||V||_F$表示 V 向量构成的矩阵的 Frobenius 范数:
image.png
这个问题可以通过梯度方法进行求解。此外,还尝试了online learning:使用自适应次梯度方法(AdaGrad)更新V,使用FTRL更新w。

Wide-Deep-Recurrent Learning

常规模型的缺陷:大部分回归模型的输入向量必须是固定长度的,而一段行程对应的路段(以下称为 link)数变动范围很大,因此在实际使用时,舍去了 link 级的特征,取而代之使用整体统计值。这样,就丢失了细节方面的刻画。

新方案的核心思路是 global model + recurrent model。针对global model,滴滴使用wide-deep模型替换掉了之前的树模型、FM模型;recurrent model 则专注于对 link 序列等局部细节的学习。

recurrent model

WD模型我们按下不表,重点说下recurrent model部分。Recurrent model 的选择则比较丰富,不仅仅限于 RNN(包括变种 GRU、LSTM、SRU 等),还可以是一维卷积 CNN,或者是纯粹的 Attention model。以最流行的 LSTM 为例,它通过引入 additive memory 和 gate 来缓解简单 RNN 的梯度消失问题:
image.png
image.png

LSTM的内部结构如下所示:
image.png

WDR结构

image.png

在WDR模型中,Wide 和 Deep 模块对行程的整体信息进行建模,而 Recurrent 模块对行程的轨迹进行细致的建模,可以捕捉到每条 link、每个路口的信息。在最终汇总时:

Wide 模块通过仿射变换把二阶交叉变换结果变到合适维度(256维); Deep 模块首先将离散特征embed到20维,之后和连续特征做concat,经过三层全连接,直接把顶层 hidden state 作为输出(256维); Recurrent 模块将 LSTM 的最后一个 hidden state 作为输出(256维)。

三个模块的输出向量被拼接起来,进入最终的 Regressor 进行预测,得到 ETA 值。全部参数都基于 MAPE loss 做梯度下降来训练。由于整个模型由三部分构成,难以找到一个合适的全局learning rate,论文中采用了Adam优化模型,learning rate设置为0.001。其他超参初始化参考论文: Adam: A Method for Stochastic Optimization

特征

在特征层面,可以看到,这一模型总共有三类特征:

Dense feature:行程级别的实数特征,比如起终点球面距离、起终点 GPS 坐标等。 Sparse feature:行程级别的离散特征,比如时间片编号、星期几、天气类型等。 Sequential feature:link 级别的特征,实数特征直接输入模型,而离散特征先做 embedding 再输入模型。注意,这里不再是每个行程一个特征向量,而是行程中每条 link 都有一个特征向量。比如,link 的长度、车道数、功能等级、实时通行速度等。

效果对比

image.png
文章最后对比了几种模型的效果,WDR优化效果明显。特别注意WDR和WD-MLP,会发现使用LSTM对局部特征建模是有不错的正向收益的;另外有意思的一点,WD-MLP整体效果不及FM。(在WD-MLP中使用一个多层感知机替换掉 recurrent模块. The MLP is applied to each link and the output vectors are then averaged through all links along the route. We use the same output size of the recurrent module for this MLP.)