计算一车多单的情况下,无车订单的数量

105 阅读4分钟

背景

在正常的派单系统中,一辆车只能派送给一个乘客,最终要么司机接单成功、要么乘客取消订单。

现在随着像高德、腾讯、百度、美团等聚合打车平台的崛起,与滴滴已经形成了抗衡的局面,聚合平台已成为乘客打车的一个重要流量入口。聚合平台前面把控了乘客需求的入口,后面联合众多不同的运力供应商,才能够形成与滴滴一较高下的局面。

作为聚合平台的运力提供商,需要给聚合平台用户的打车需求,派送可匹配的车辆。由于聚合平台集结了多家运力供应商,用户的打车需求下发到各个不同的运力供应商,最终聚合平台会基于自身的策略,从多家运力供应商派送的车辆中,选择合适的运力。这样就会导致某家运力提供商派送的车辆,由于没有竞争过其它运力供应商,最终派送的运力无法接到订单。

基于这样的背景下,作为运力提供商,就要计算好车辆派送给聚合平台后,平台给单的概率,如果给单的概率太低,就可以把一辆车同时派给多个用户需求。但是,又要考虑好一辆车派送给多个用户需求后,一旦多个需求都给单进行接起时,由于一辆车只能服务一个需求,最终导致多的需求被取消,从而引起聚合平台对运力供应商的罚款。在综合考虑聚合平台的给单和罚款的约束下,就决定了一辆车派送多单时,在什么样的情况下,对运力提供商来说效率最高。

问题

基于以上背景,就牵引出来了一个基本问题。一辆车派送给多个订单后,在每个订单给单率不同的情况下,如何计算无车订单的数量,这样运力供应商才能控制好罚款的风险。

示例如下:

聚合平台: 用户A下单了需求A1, 用户B下单了需求B1,用户D下单了需求D1
运力供应商: 针对A1B1都派送了车辆C1
聚合平台给单率: A1-C1的给单率0.3B1-C1的给单率 0.4, D1-C1的给单率 0.5

无车订单的数量,存在如下两种:
1. C12个订单给单则有1个订单无车。无车订单存在3种情况,C1A1B1、不给D1,,C1A1D1、不给B1C1D1B1、不给A1,计算方式: 0.3 * 0.4 * 0.5 * 1 + 0.3 * 0.5 * 0.6 * 1 + 0.4 * 0.5 * 0.7 * 1 = 0.29
2. C13个订单给单则有2个订单无车。 无车订单数,计算方式: 0.3 * 0.4 * 0.5 * 2 = 0.12
最终计算无车订单数: 0.29 + 0.12 = 0.41

理论推导

示例可以通过穷举演算,计算得到最终结果。如果数据量一大,穷举的方式就过于复杂,如何通过理论的推导得到最终的计算公式,让所有这类问题,都能够迎刃而解。

理解问题

首先,我们需要明确几个关键信息:

  1. 订单的接单情况:每个订单 ii i_i 以概率 xix_i 被接单,以概率 1 -  xix_i不被接单。各个订单的接单与否是相互独立的。
  2. 取消规则:如果接单的总数 SS(即成功接单的订单数量)大于 1,那么保留 1 个订单,其余的 S1 S - 1个订单被取消。因此,被取消的订单数为 max(S1,0)max(S−1,0)
  3. 期望值:我们需要计算 E[max(S1,0)]E[max(S - 1, 0)],即被取消订单数的期望。

定义随机变量

设 SS 为成功接单的订单总数。SS 可以表示为:

i=1nXi\sum_{i = 1}^{n}{X_i}

其中,XiX_i 是伯努利随机变量,表示第 ii个订单是否被接单:

Xi={1,(概率xi)0,(概率1xi)X_i = \begin{cases} 1,\quad (概率x_i)\\ 0, \quad (概率1-x_i) \end{cases}

被取消的订单数

被取消的订单数为:

Y=max(S1,0)={S1,(ifS1)0,(ifS=0)Y = max(S - 1, 0)= \begin{cases} S-1,\quad (if S\geq 1)\\ 0, \quad (if S=0) \end{cases}

因此,期望值为:

E[Y]=E[max(S1,0)]=s=0nmax(s1,0).P(S=s)E[Y] = E[max(S - 1, 0)] = \sum_{s=0}^{n}{max(s-1,0).P(S=s)}

注意到当 s=0s = 0 或 s=1s = 1 时,max(s1,0)=0max(s - 1, 0) = 0,所以:

E[Y]=s=2n(s1).P(S=s)E[Y] = \sum_{s=2}^{n}{(s-1).P(S=s)}

计算 P(S=s)P(S=s)

SS 是 nn 个独立的伯努利试验的和,但每个试验的成功概率不同,因此 SS 服从泊松二项分布(Poisson Binomial Distribution)。计算 P(S=s)P(S=s) 的一般形式比较复杂,但对于小的 nn,可以通过枚举所有可能的 ss 个订单被接的组合来计算。

然而,对于期望的计算,我们可以采用更聪明的方法。

利用线性期望

E[Y]=E[max(S1,0)]=E[S]E[min(S,1)]E[Y] = E[max(S - 1, 0)] = E[S]−E[min(S,1)]

因为:

max(S1,0)=Smin(S,1)max(S−1,0)=S−min(S,1)

所以:

E[Y]=E[S]E[min(S,1)]E[Y]=E[S]−E[min(S,1)]

计算:

  1. E[S]=i=1nxiE[S]=\sum_{i = 1}^{n}{x_i}(因为期望的线性性质)
  2. E[min(S,1)]=P(S1)=1P(S=0)=1i=1n1xiE[min(S,1)]=P(S≥1)=1−P(S=0)=1-\prod_{i=1}^{n}{1-x_i}

这个E[min(S,1)]=P(S1)E[min(S,1)]=P(S≥1) 成立的原因如下:

min(S,1)={0,(ifS=0)1,(ifS1)min(S,1) = \begin{cases} 0,\quad (if S= 0)\\ 1, \quad (if S\geq1) \end{cases}
E[min(S,1)]=0P(S=0)+1P(S1)=P(S1)E[min(S,1)] = 0 * P(S=0) + 1 * P(S≥1) = P(S≥1)

因此:

E[Y]=E[S]E[min(S,1)]=i=1nxi(1i=1n(1xi))=(i=1nxi1)+i=1n(1xi)E[Y]=E[S]−E[min(S,1)]=\sum_{i = 1}^{n}{x_i}-(1-\prod_{i=1}^{n}{(1-x_i)}) =(\sum_{i = 1}^{n}{x_i}-1)+\prod_{i=1}^{n}{(1-x_i)}

解释

  • i=1nxi\sum_{i = 1}^{n}{x_i} : 平均接单总数。
  • 减去 1: 因为最多保留 1 个订单。
  • i=1n(1xi)\prod_{i=1}^{n}{(1-x_i)} :没有订单被接的概率。

验证示例

聚合平台: 用户A下单了需求A1, 用户B下单了需求B1,用户D下单了需求D1
运力供应商: 针对A1B1都派送了车辆C1
聚合平台给单率: A1-C1的给单率0.3B1-C1的给单率 0.4, D1-C1的给单率 0.5

E(无车订单数) = (0.3 + 0.4 + 0.5) - 1 + (1-0.3)*(1-0.4)*(1-0.5) = 0.41

验证结果和穷举方式的结果一致。

结论

接起后无车的订单数,也就是被取消订单数的期望值为:

E[Cancelledorders]=(i=1nxi1)+i=1n(1xi)E[Cancelled orders] = (\sum_{i = 1}^{n}{x_i}-1)+\prod_{i=1}^{n}{(1-x_i)}

或者等价地:

E[Cancelledorders]=s=2n(s1).P(S=s)E[Cancelled orders] = \sum_{s=2}^{n}{(s-1).P(S=s)}

其中SS是成功接单的总数,服从泊松二项分布。