共享两轮车供需算法浅谈

桔妹导读:共享两轮车作为短途出行的重要工具,为用户的城市出行提供了极大便捷。由于用户的骑行会使得车辆在城市中的分布产生差异,所以为了更好地服务、满足用户的短途出行需求,需要一线运维同学对车辆进行调度,从而适应城市的供需状态变化。本篇文章将针对两轮车供需策略中的一个问题进行展开和探讨。

1. 

前言

在短途出⾏场景中,共享两轮⻋是⼀种“所⻅即所得”的出⾏⽅式,⼀个地点是否有⻋,对于⽤户的使⽤体验和⽤户的需求满⾜来说尤其重要,但是我们并不能“饱和式”的进⾏⻋辆投放, 那么如何将可被调拨的有限⻋辆资源在时空内重新进⾏分配,从⽽带来更多的⻋辆价值,满⾜⽤户的短途出⾏需求是我们需要亟待解决的重要问题,本⽂将针对两轮⻋供需策略中点位上的⻋辆调度量预估问题进⾏展开和探讨。

2. 

基础时序建模

在对城市点位上车辆的骑入、骑出及其需求缺口数进行预测时,最基本的想法是借助用户、车辆、路网、天气、时间、行为序列等平台上所有相关可知的数据特征,来进行特征工程的构建,进而在点位上对未来车辆的流转情况进行预测,从而得到该点位未来的需求缺口、骑入、骑出(不同时间颗粒度下的目标,由业务目标决定),那么根据目标的预测情况,我们就知道用户的骑入是否能够满足骑出的需求,如果车辆的自运转无法满足当前时间段的需求,那么需要线上生成“工单”进行指引调度车辆(最终调度不以单一此目标决定,下文同此)。

大家常用的方式有很多(具体的原理就不展开讨论了),如等线性模型、等树模型、Facebook的各种各样的变体//...等等,其实基础的时序建模算法在解决业务问题上的作用还是非常巨大的,一方面在业务问题初期能够相对比较快速地验证业务问题解决方案上的一些想法,同时对于处于“竞争态”的两轮车业务场景来说,目标的变化&城市的差异性在提出不同的诉求时,这种基础的时序建模方式更容易进行快速地迭代,支撑业务问题的加速解决,从而完成阶段性的目标,取得业务收益,同时也能为未来更加精细化的建模方式提供更多的“避坑指南”。

3. 

多任务学习建模

上述的时间序列建模中,我们对多个目标进行分拆建模,这样更灵活高效,但是只专注于单个模型可能会忽略一些相关任务中可能提升目标任务的潜在信息造成一定的偏差,同时骑入、骑出、及其需求缺口数等目标之间也存在前后&相关关系,多任务学习也能提升模型的泛化性与表现,至于多任务学习的优缺点这里就不再赘述了。

在两轮车的出行场景中,城市点位上的用户需求的表达主要由两个基本模块组成,即用户的骑入和用户的骑出,当用户的骑入大于用户的骑出时,点位的车辆可能存在“闲置”,反之,则存在需求缺口,潜在的用户需求并没有得到满足,只有准确的预估车辆的流转情况,才能发挥车辆的最大价值,满足用户的需求。

供需预测在多目标预测时,我们可以采用结构等,上面依次是大家常见的,但是大家具体需要采用什么样的结构还是要看当前的业务场景需要、业务目标以及最终的业务效果,我们下面介绍的是结构的应用demo:

  • 场景适用:骑入,骑出、缺口这几个具有较强的相关性,且的量纲相近;

  • 提升泛化:通过学习不同任务的联系和差异,降低了单个模型过拟合的风险;

  • 快速迭代:共享的层,维护模型时会方便很多,模型构造并不复杂,支持业务快速迭代。

‍‍‍‍‍‍‍

在两轮车的供需预测中,点位上的车辆骑入、骑出和需求缺口数的相关性非常强,车辆的骑出和需求缺口受到车辆骑入的影响,我们将模型中各个指标的关系定义为:,多任务学习的网络结构可以替换为任意的算法模型,可以多方借鉴从而吸收其他学习算法的优势能力,进一步提升效果。

4. 

图卷积网络的探索

在上面的介绍里,我们在两轮车出行网络(点和边组成)中提取复杂拓扑结构的空间性信息显然是不够的,同时两轮车的出行场景显然也不具备规则的空间结构,属于Non Euclidean data,难以选取固定的卷积核来适应整个骑行网络的不规则性,如邻居节点数量的不确定和节点顺序的不确定。下面我们主要通过图卷积神经网络来提取拓扑图的空间特征,获取车辆在空间中的信息,本文此次将主要基于频域(谱域)的图卷积神经网络(GCN)来展开介绍其原理和应用。

卷积的理解

在理解图卷积网络前,我们先来大概了解下什么叫做卷积,定义:【在泛函分析中,卷积是通过两个函数生成第三个函数的一种数学算子,表征函数f 与经过翻转和平移的g 的重叠部分的累积。如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是滑动平均的推广】。那么,我们用相对通俗且不绕弯的话术来总结一下,所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加(在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和)。

将其归纳为以下几个步骤,我们用以下几个图来相对形象的表示这个过程(依次为:反转==>>平移==>>滑动求和):

拉普拉斯矩阵

接下来介绍另一个重要的概念,就是拉普拉斯矩阵,它主要应用在图论中,作为一个图的矩阵表示,对于图矩阵的定义为,其中 是矩阵, 是顶点的度矩阵, 是图的邻接矩阵,有了它,我们能够通过矩阵来表征一个两轮车的出行网络,如果有兴趣的话建议大家可以从散度==>>拉普拉斯算子==>>图函数的梯度==>>拉普拉斯矩阵这个顺序去了解一下,会更好的理解矩阵的含义,以下是常见的三种常见的矩阵:

容易推导的是,拉普拉斯矩阵有如下性质:

  • 拉普拉斯矩阵是半正定的,对任意向量, 满足:

  • 对称矩阵的特征向量相互正交,即所有特征向量构成的矩阵为正交矩阵;

  • 对应的n个实数特征值都大于等于0,即,且最小的特征值为0。

由以上性质可知,拉普拉斯矩阵一定能进行特征值分解(谱分解),我们可以这样理解:拉普拉斯矩阵就是图上的拉普拉斯算子,也可以描述为离散的拉普拉斯算子:

卷积&傅⽴叶变换的联系

上面的内容我们讲了卷积,那这个所谓的卷积后面会用到哪里,本节先搁置一下,而是理解一个变换—傅立叶变换,以及它和卷积的联系,连续域的傅立叶变换定义为:设函数周期为, 当趋近于时, 即为非周期函数时:

即函数与基函数的积分,接下来的卷积公式上面我已经介绍了:

将其代入傅立叶变换,那么易得它的傅里叶变化为:

综上,我们发现可以通过傅立叶变换将卷积变为乘积,因此根据上述的推导,我们会得到两条非常有用的结论,下面的公式推导会用到这个结论:

拉普拉斯矩阵&傅立叶变换的联系

从拓扑结构的图( ) ==>> 拉普拉斯矩阵 ==>> 谱图( ),拉普拉斯矩阵更像是一座“桥梁”,我们使用傅立叶变换将图从从域到域进行变换时,需要用到矩阵的特征值和特征向量,类比关系如下:

想要将傅立叶变换推广到图上,其实就是将连续域基函数,推广到图上离散傅立叶变换的基函数,也就是将拉普拉斯矩阵的特征向量构成了傅立叶变换的基,简单的来说,在图上做傅立叶变换就是将图上的映射到正交空间中,表示成了拉普拉斯矩阵特征向量的线性组合(特征向量且相互正交,即其特征向量可作为基)。

图的傅立叶变换&卷积

上面讲到了图傅立叶变换将输入图的投影到了正交空间,相当于把图上定义的任意特征向量,表示成了拉普拉斯矩阵特征向量的线性组合,我们将其用矩阵表示为:

其中为特征向量的矩阵,上的N维向量,可以表示某个停车点的特征向量,为卷积核,那么在图上的卷积就可以写为:

其实到这里基本上的原理推导已经结束了,下面的任务就是优化卷积核,也可以说是在优化改进,经过多项式近似==>>Chebyshev多项式==>>GCN逐层传播公式:

其中,是隐藏层,为每层网络的参数矩阵,简单总结下流程,我们将骑行网络中节点的特征向量利用傅里叶正变换从空间域变换到了频谱域,在频谱域上和卷积核进行卷积操作,再将变换后的节点通过傅里叶逆变换回到空间域,参与后续的预测任务。

图神经网络的应用

两轮车骑行网络的图的表示主要分为两部分,如下:

  • 点(停车点/网格)的特征向量的输入:特征矩阵 ,N 是图数据中的节点个数,d 表示每个节点的输入的特征个数;

  • 网络结构的矩阵表征输入:图的邻接矩阵 A,维度大小为 N * N构建邻接矩阵方式有很多种(具体需要看业务目标),例如:

    • 停车点/网格之间的骑行记录:权重可以是彼此的骑行记录;

    • 停车点/网格之间的骑行时长:权重可以是彼此的骑行时长;

    • 停车点/网格之间的导航距离:权重可以是停车点/网格之间距离的倒数;

以下是一个基础的demo片段,主要是为了能够快速理 GCN 使用的基础构成,其中可以提前计算好

    def call(self, layer_input):
        layer_input_f, DAD = layer_input
        output = tf.matmul(tf.matmul(DAD, layer_input_f), self.weight)
        if self.use_bias:
            output += self.bias
        act = self.activation(output)
        return act

GCN我们可以认为是一个工具,在了解其原理后我们可以做很多的尝试,不管是改造还是做Embediing,嵌入多任务学习框架,还是融入其他方案中使用都是可以的,例如融入时间序列中(T-GCN: A Temporal Graph ConvolutionalNetwork for Traffic Prediction)

综上,GCN能够提取复杂拓扑结构的空间性信息,同时其权值共享、参数共享,具有局部性,因为每次聚合的只是一阶邻居,而且随着卷积层的增加,从远处邻居的信息也能传递过来(不是层数越多越好,因为两轮车是短途出行场景,对于附近停车点的信息显然更为关注,当然也可以采取一些残差连接),当然GCN也存在许多需要改进解决的问题,例如:无法直接处理有向图,但是节点连接经过处理后也是可以表示有向图,其实我认为最关键的是对于同阶的邻域上分配给不同的邻居的权重是完全相同的,归其原因其实就是共享参数带来的,所以也有人在研究不共享参数形式的GCN网络,目前使用比较广泛的图神经网络还有GAT、GraphSAGE等。

5

总结

本文对两轮车出行场景的供需算法方向之一(骑入、骑出、及其需求缺口数预测)的使用方法进行了简要的介绍,其实在算法工作中并不是算法模型越复杂越好,而是要适应当前的业务场景、业务阶段以及最终的业务效果,毕竟算法是为了更好的解决问题,欢迎大家随时跟我们互动交流,一起探讨各种各样的解决方案,更好地用技术驱动业务的发展。

团队内推

滴滴数据平台与应用部(DT),致力于打造准确、稳定、高效、易用的数据中台体系,从而赋能业务发展。我们不仅拥有稳定优质的大数据算力,完善的数据产品矩阵和业界领先的算法策略。也同时深入业务,为业务的快速发展提供准确、敏捷的数据服务支撑。除了提供数据资产、数据产品、数据应用相结合的体系化解决方案之外,我们也勇往直前,持续探索数据智能应用场景!欢迎大家加入我们,一起创造数据价值! 

团队正在热招高级/资深数据研发工程师岗位。欢迎有兴趣的小伙伴加入,可以投递简历至[email protected],请将邮件主题命名为 姓名-投递岗位-投递团队。 

扫一扫了解更多

本文作者

延伸阅读

内容编辑 | Teeo

联系我们 | [email protected]


猜你喜欢

转载自blog.csdn.net/DiDi_Tech/article/details/117575949