网站制作目的建设购物网站的条件
web/
2025/10/4 7:21:11/
文章来源:
网站制作目的,建设购物网站的条件,青岛信息网官网,电子商务网站建设与维护展望外卖业务的快速发展对系统稳定性提出了更高的要求#xff0c;每一次订单量大盘的异常波动#xff0c;都需要做出及时的应对#xff0c;以保证系统的整体稳定性。如何做出较为准确的波动预警#xff0c;显得尤为重要。 从时间上看#xff0c;外卖订单量时间序列有两个明显的… 外卖业务的快速发展对系统稳定性提出了更高的要求每一次订单量大盘的异常波动都需要做出及时的应对以保证系统的整体稳定性。如何做出较为准确的波动预警显得尤为重要。 从时间上看外卖订单量时间序列有两个明显的特征如下图所示 * 周期性。每天订单量的变化趋势都大致相同午高峰和晚高峰订单量集中。 * 实时性。当天的订单量可能会受天气等因素影响呈现整体的上涨或下降。 订单量波动预警初期外卖订单中心使用的是当前时刻和前一时刻订单量比较超过一定阈值就报警的方式误报率和漏报率都比较大。后期将业务数据上传到美团点评的服务治理平台使用该平台下的基线报警模型进行监控报警。基线数据模型考虑到了订单量时间序列的周期性特征但是忽略了实时性特征在实际使用中误报率依然很高大量的误报漏报导致RD对于报警已经麻木出现问题时不能及时响应因此急需一种新的异常检测模型提高报警的准确率。 图1.1 外卖订单大盘趋势图 异常意为“异于正常”。异常检测就是从一组数据中寻找那些和期望数据不同的数据。监控数据都是和时间相关的每一个监控指标只有和时间组合一起才有其具体的含义。按照时间顺序将监控指标组成一个序列我们就得到了监控指标的时间序列。 基于预测的异常检测模型如下图所示*xt*是真实数据通过预测器得到预测数据然后*xt*和*pt*分别作为比较器的输入最终得到输出*yt*。*yt*是一个二元值可以用11表示输入数据正常-1-1表示输入数据异常表示。 图2.1 异常检测模型 异常检测主要有两种策略 - 异常驱动的异常检测敏感性宁愿误报也不能错过任何一个异常这适用于非常重要的检测。简单概括就是“宁可错杀一千不能放过一个”。 - 预算驱动的异常检测准确性这种策略的异常检测从字面理解就是只有定量的一些预算去处理这些报警那么只能当一定是某种问题时才能将报警发送出来。 这两种策略不可兼容的。对于检测模型的改善可以从两个方面入手一是预测器的优化二是比较器的优化。我们从这两个方面描述模型的改善。 预测器就是用一批历史数据预测当前的数据。使用的历史数据集大小以及使用的预测算法都会影响最终的预测效果。 外卖订单量具有明显的周期性同时相邻时刻的订单量数据也有很强的相关性我们的目标就是使用上面说的相关数据预测出当前的订单量。下面我们分析几种常用的预测器实现。 3.1 同比环比预测器 同比环比是比较常用的异常检测方式它是将当前时刻数据和前一时刻数据环比或者前一天同一时刻数据同比比较超过一定阈值即认为该点异常。如果用图2.1模型来表示那么预测器就可以表示为用当前时刻前一时刻或者前一天同一时刻数据作为当前时刻的预测数据。 如果将不同日期、时刻的监控数据以矩阵方式存储每一行表示一天内不同时刻的监控数据每一列表示同一时刻不同日期的监控数据那么存储矩阵如下图所示 图3.1 同比环比 假如需要预测图中黄色数据那么环比使用图中的蓝色数据作为预测黄点的源数据同比使用图中红色数据作为预测黄点的源数据。 3.2 基线预测器 同比环比使用历史上的单点数据来预测当前数据误差比较大。*t*时刻的监控数据与 t-1,t-2,…时刻的监控数据存在相关性。同时与t-k,t-2k,…时刻的数据也存在相关性*k*为周期如果能利用上这些相关数据对*t*时刻进行预测预测结果的误差将会更小。 比较常用的方式是对历史数据求平均然后过滤噪声可以得到一个平滑的曲线基线使用基线数据来预测当前时刻的数据。该方法预测*t*时刻数据图中黄色数据使用到的历史数据如下图所示图中红色数据 图3.2 历史数据求平均 基线数据预测器广泛应用在业务大盘监控中预测效果如图3.3所示。从图中可以看出基线比较平滑在低峰期预测效果比较好但是在外卖的午高峰和晚高峰预测误差比较大。 图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*表示未来时刻距离当前时刻的跨度。 外卖订单量是按分钟统计的离散时间序列所以如果需要预测下一分钟的订单量令h1。 (a) (b) 图3.5 某一段时间的外卖提单数据和Holt-Winters算法分解图 3.4 外卖报警模型中的预测器 在外卖订单量异常检测中使用Holt-Winters预测器实时预测下一分钟订单量每次需要至少5天以上的订单量数据才能有较好的预测效果数据量要求比较大。 在实际的异常检测模型中我们对Holt-Winters预测器进行了简化。预测器的趋势数据表示的是时间序列的总体变化趋势如果以天为周期看待外卖的订单量时间序列是没有明显的趋势性的图3.5(b)的分解图也证明了这一点。因此我们可以去掉其中的趋势数据部分。 各部分的迭代公式简化为(3-1) 预测值 *h*越大预测值Yhat[th] 的误差也就越大。实时的订单流监控令h1每当有新的监控数据时更新输入序列然后预测下一分钟数据。 Holt-Winters每一次预测都需要大量的输入数据序列。从上面模型的简化公式可以看出对残差数据a(t)的预测是对序列(a(t-m),a(t-m1),…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(tk)的计算。为了将算法应用到线上的实时预测我们可以将Holt-Winters算法拆分为两个独立的计算过程 1. 定时任务计算序列的周期数s(t)。 2. 对残差序列做实时预测。 下面就分别从这两个步骤介绍外卖报警模型中的预测器实现。 3.4.1 计算序列的周期性数据 时间序列的周期性数据不需要实时计算按周期性更新即可如外卖订单大盘监控s(t)只需要每天更新一次即可。对于s(t)的计算可以有多种方法可以使用上面提到的Holt-Winters按公式(3-1)计算出时间序列的周期性数据如图3.5b所示或直接使用前一天的监控数据作为当天的周期数据这两种方式都需要对输入序列进行预处理保证算法的输入序列不含有异常数据。也可以用上面3.2节提到的将历史数据做平均求出基线作为序列的周期性数据。 目前外卖订单中心报警模型采用的是Holt-Winters计算周期数据的方式。在将该模型推广到外卖其他业务线监控时使用了计算基线数据作为周期数据的方式这里简单对比一下两种方式的优劣。 1. 使用Holt-Winters算法计算周期数据 优点如果序列中含有周期性的陡增陡降点Holt-Winters计算出的周期数据中会保留这些陡增陡降趋势因此可以准确的预测出这些趋势不会产生误报。比如外卖订单的提单数据在每天的某个时刻都有一个定期陡降使用该方式可以正确的预测出下降的趋势。如图3.6所示蓝色线是真实数据棕色线是预测数据在该时刻棕色线准确的预测出了下降点。缺点需要对输入数据进行预处理去除异常数据。如果输入序列中含有异常数据使用Holt-Winters时可能会把这些异常数据计算到周期数据中影响下一周期的预测从而产生误报Holt-Winters理论上也只是滑动平均的过程因此如果输入数据中含有比较大的异常数据时存在这种可能性实际应用中订单的报警模型也出现过这种误报。 图3.6 Holt-Winters周期数据预测 2. 历史数据平均求基线 优点计算出的周期数据比较平滑不需要对输入序列进行预处理计算过程中可以自动屏蔽掉异常数据的影响计算过程简单如图3.3所示的基线数据。缺点周期数据比较平滑不会出现陡增陡降点因此对于周期性出现的陡增陡降不能很好的预测出现误报。比如外卖活动的大盘如图3.7所示红线是真实数据黑线是预测数据提前下单优惠在每天某个时刻会出现周期性陡降使用该方式会出现误报。 图3.7 基线周期数据预测 两种求周期数据的方式各有优劣可以根据各自的监控数据特点选择合适的计算方式。如果监控数据中含有大量的周期性的陡增陡降点那么推荐使用方式1可以避免在这些时间点的误报。如果监控数据比较平滑陡增陡降点很少那么推荐方式2计算简单的同时也能避免因输入数据预处理不好而造成的意料之外的误报。 3.4.2 残差数据实时预测 计算出周期数据后下一个目标就是对残差数据的预测。使用下面的公式实际监控数据与周期数据相减得到残差数据对残差数据做一次滑动平均预测出下一刻的残差将该时刻的残差、周期数据相加即可得到该时刻的预测数据。残差序列的长度设为60即可以得到比较准确的预测效果。 对于实时预测使用的是当天的周期数据和前60分钟数据。最终的预测结果如图3.8(a)(b)所示其中蓝色线是真实数据红色线是预测数据。 (a) (b) 图3.8 预测结果曲线 预测器预测出当前时刻订单量的预测值后还需要与真实值比较来判断当前时刻订单量是否异常。一般的比较器都是通过阈值法比如实际值超过预测值的一定比例就认为该点出现异常进行报警。这种方式错误率比较大。在订单模型的报警检测中没有使用这种方式而是使用了两个串联的Filter如图4.1所示只有当两个Fliter都认为该点异常时才进行报警下面简单介绍一下两个Filter的实现。 图4.1 比较器模型 离散度Filter根据预测误差曲线离散程度过滤出可能的异常点。一个序列的方差表示该序列离散的程度方差越大表明该序列波动越大。如果一个预测误差序列方差比较大那么我们认为预测误差的报警阈值相对大一些才比较合理。离散度Filter利用了这一特性取连续15分钟的预测误差序列分为首尾两个序列e1,e2如果两个序列的均值差大于e1序列方差的某个倍数我们就认为该点可能是异常点。阈值Filter根据误差绝对值是否超过某个阈值过滤出可能的异常点。利用离散度Filter进行过滤时报警阈值随着误差序列波动程度变大而变大但是在输入数据比较小时误差序列方差比较小报警阈值也很小容易出现误报。所以设计了根据误差绝对值进行过滤的阈值Filter。阈值Filter设计了一个分段阈值函数yf(x)对于实际值*x*和预测值*p*只有当|x-p|f(x)时报警。实际使用中可以寻找一个对数函数替换分段阈值函数更易于参数调优。 图4.2 分段阈值Filter 最终的外卖订单异常报警模型结构图如图5.1所示每天会有定时Job从ETL中统计出最近10天的历史订单量经过预处理模块去除异常数据经过周期数据计算模块得到周期性数据。对当前时刻预测时取60分钟的真实数据和周期性数据经过实时预测模块预测出当前订单量。将连续15分钟的预测值和真实值通过比较器判断当前时刻是否异常。 图5.1 报警模型结构图 新的报警模型上线后外卖订单量的异常检测的漏报率和误报率都有显著的提升上线半年以来对于每一次的异常都能准确的检测出来漏报率近乎为0。误报率在通常情况下限制在了每周0~3次误报。 报警模型目前应用在外卖订单量的异常检测中同时推广到了外卖业务的其他各种大盘监控中取得了不错的效果。在报警模型上线后我们发现并解决了一些系统隐患点如 - 点评侧外卖提单量在每天定时有一个下降尖刺经过排查是因为客户端冷启动短时间内大量的请求导致SLB性能达到瓶颈从而导致接口成功率下降。 - 点评侧外卖订单取消量经常会有尖刺经过排查发现是由于在支付时需要进行跨机房的账号转换专线网络抖动时造成接口超时。 - 外卖订单量在每天某些时刻都有陡降趋势经过排查是因为这些点大量商家开始休息导致的。 将机器学习中的预测算法运用到外卖订单的异常检测中极大的提高了异常检测的准确性和敏感性提升了系统稳定运维的效率。该报警模型也有很广泛的应用场景美团点评的各个业务线的监控数据绝大多数都是含有明显周期性的时间序列本文提出的模型都能运用到这些监控数据的异常检测中。 当然模型还有进一步完善的空间如 - 历史数据的预处理优化。在进行周期数据计算时对于输入序列的预处理如果能够排除绝大部分的异常数据那么最终检测的误报率将会进一步的降低。 - 在不会产生持续误报的情况下替换有异常的实时数据。对于当前数据的预测利用的都是前60分钟的真实数据但是这些数据可能本身就存在异常数据那么就存在一种情况当出现异常时真实数据开始下跌预测数据紧接着也会下跌如图3.8b所示。这种情况有时候可能满足需求比如只在异常开始的时候进行报警异常持续时间内不再报警防止报警太多造成的信息轰炸有时候可能不满足需求比如要求预测数据不跟随异常变化而变化这种情况可以应用在故障期间的损失统计中。如果需要预测值不随异常变化而变化一种可能的方法是当检测到当前数据是异常数据时将预测数据替换当前的真实数据作为下一时刻预测器的输入这样可以防止异常数据对于下一时刻预测值的影响。 东杰2015年校招进入美团点评目前负责外卖订单活动中心的支付系统以及订单活动SRE相关工作是订单活动中心对外需求主要接口人之一。 最后来个硬广告美团外卖订单活动中心长期招聘Java高级开发工程师有兴趣同学可以发送简历到heshi#meituan.com。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86661.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!