专栏名称: 美团技术团队
10000+工程师,如何支撑中国领先的生活服务电子商务平台?数亿消费者、数百万商户、2000多个行业、几千亿交易额背后是哪些技术在支撑?这里是美团、大众点评、美团外卖、美团配送、美团优选等技术团队的对外窗口。
目录
相关文章推荐
java1234  ·  跟阿里P9学 画架构图,永久免费了 ·  3 小时前  
java1234  ·  跟阿里P9学 画架构图,永久免费了 ·  3 小时前  
字节跳动技术团队  ·  豆包大模型升级1.6版,视频模型上新 ·  19 小时前  
高可用架构  ·  4 年融资 1 ... ·  昨天  
字节跳动技术团队  ·  ByteBrain团队SIGMOD25 | ... ·  2 天前  
51好读  ›  专栏  ›  美团技术团队

外卖订单量预测异常报警模型实践

美团技术团队  · 公众号  · 架构  · 2017-04-21 20:14

正文

请到「今天看啥」查看全文



比较常用的方式是对历史数据求平均,然后过滤噪声,可以得到一个平滑的曲线(基线),使用基线数据来预测当前时刻的数据。该方法预测t时刻数据(图中黄色数据)使用到的历史数据如下图所示(图中红色数据):


图3.2 历史数据求平均


基线数据预测器广泛应用在业务大盘监控中,预测效果如图3.3所示。从图中可以看出,基线比较平滑,在低峰期预测效果比较好,但是在外卖的午高峰和晚高峰预测误差比较大。


图3.3 基线数据预测


Holt-Winters预测器


同比环比预测到基线数据预测,使用的相关数据变多,预测的效果也较好。但是基线数据预测器只使用了周期相关的历史数据,没有使用上同周期相邻时刻的历史数据,相邻时刻的历史数据对于当前时刻的预测影响是比较大的。如外卖订单量,某天天气不好,很多用户不愿意出门,那么当天的外卖的订单量就会呈现整体的上涨,这种整体上涨趋势只能从同一周期相邻时刻的历史数据中预测出来。如图3.4所示,预测图中黄色数据,如果使用上图中所有的红色数据,那么预测效果会更好。



图3.4 Holt-Winters预测


本文使用了Holt-Winters来实现这一目标。


Holt-Winters是三次指数滑动平均算法,它将时间序列数据分为三部分:残差数据a(t),趋势性数据b(t),季节性数据s(t)。使用Holt-Winters预测t时刻数据,需要t时刻前包含多个周期的历史数据。相关链接: Exponential smoothing Holt-Winters seasonal method


各部分的迭代计算公式(周期为k):



如图3.5所示,(a)显示了某一段时间内外卖订单的原始提单监控数据(分钟统计量,周期为1天),图(b)显示了其Holt-Winters的分解图(四幅图分别对应原始数据、残差数据分量、趋势数据分量、周期数据分量)。将订单量时间序列分解为残差数据a(t),趋势数据b(t),周期数据s(t)后,就可以使用下面的公式预测未来不同时刻时刻的订单量,其中h表示未来时刻距离当前时刻的跨度。



外卖订单量,是按分钟统计的离散时间序列,所以如果需要预测下一分钟的订单量,令h=1。


(a)



(b)
图3.5 某一段时间的外卖提单数据和Holt-Winters算法分解图


外卖报警模型中的预测器


在外卖订单量异常检测中,使用Holt-Winters预测器实时预测下一分钟订单量,每次需要至少5天以上的订单量数据才能有较好的预测效果,数据量要求比较大。


在实际的异常检测模型中,我们对Holt-Winters预测器进行了简化。预测器的趋势数据表示的是时间序列的总体变化趋势,如果以天为周期看待外卖的订单量时间序列,是没有明显的趋势性的,图3.5(b)的分解图也证明了这一点。因此,我们可以去掉其中的趋势数据部分。


各部分的迭代公式简化为(3-1):



预测值:



h越大,预测值Yhat[t+h] 的误差也就越大。实时的订单流监控,令h=1,每当有新的监控数据时,更新输入序列,然后预测下一分钟数据。



Holt-Winters每一次预测都需要大量的输入数据序列。从上面模型的简化公式可以看出,对残差数据a(t)的预测是对序列(a(t-m),a(t-m+1),...a(t-2),a(t-1))的一次指数滑动平均,对周期数据s(t)的预测是对序列(s(t-mk) ,s(t-(m-1)k),...s(t-k))的一次滑动平均,大量的输入数据是用于周期数据s(t)的计算。


a(t)和s(t)是互相关联的迭代计算过程,如果从周期性角度看公式(3-1),可以发现:计算当前周期内的a(t)时,使用的是上一周期计算出来的s(t-k),当前周期计算出的s(t)是用于下一周期a(t+k)的计算。为了将算法应用到线上的实时预测,我们可以将Holt-Winters算法拆分为两个独立的计算过程:

  1. 定时任务计算序列的周期数s(t)。







请到「今天看啥」查看全文