文章系列链接
前言
第一篇文章SLS机器学习介绍(01):时序统计建模上周更新完,一下子炸出了很多潜伏的业内高手,忽的发现集团内部各个业务线都针对时序分析存在一定的需求。大家私信问我业务线上的具体方法,在此针对遇到的通用问题予以陈述(权且抛砖引玉,希望各位大牛提供更好的建议和方法):
-
数据的高频抖动如何处理?
- 在业务需求能满足的条件下,进可能的对数据做聚合操作,用窗口策略消除抖动
- 若不能粗粒度的聚合,我一般会选择窗口滤波操作,在针对滤波后的数据进行一次去异常点操作
- 改变检测策略,将问题变成一个回归问题,引入多维度特征,对目标进行预测
-
历史训练数据如何选择?
- 针对自己的时序数据,需要先进行简单的摸底操作,选择合适的模型,是不是有明显的周期?是不是有明显的趋势?
-
这么多方法该如何选择?
- 针对单指标预测的方法,需要采用多种算法模型进行预测,将得到的结果也要集成起来,降低误报操作
- 可以针对历史上的全量报警样本,设计一套报警聚合规则,在一定容忍度的条件下得到较好的结果
摘要
在大型互联网企业中,对海量KPI(关键性能指标)进行监控和异常检测是确保服务质量和可靠性的重要手段。基于互联网的服务型企业(如线上购物、社交网络、搜索引擎等)通过监控各种系统及应用的数以万计的KPI(如CPU利用率、每秒请求量等)来确保服务可靠性。KPI上的异常通常反映了其相关应用上可能出现故障,如服务器故障、网络负载过高、外部攻击等。因而,异常检测技术被广泛用于及时检测异常事件以达到快速止损的目的。
问题背景
大多数异常检测算法(如雅虎的EDAGS,Twitter的BreakoutDetection,FaceBook的prophet)都需要为每条KPI单独建立异常检测模型,在面对海量KPI时,会产生极大的模型选择、参数调优、模型训练及异常标注开销。幸运的是,由于许多KPI之间存在隐含的关联性,它们是较为相似的。如果我们能够找到这些相似的KPI(例如在一个负载均衡的服务器集群中每个服务器上的每秒请求量KPI是相似的),将它们划分为若干聚类簇,则可以在每个聚类簇中应用相同的异常检测模型,从而大大降低各项开销。
序列聚类建模
问题定义
在同一个业务指标的前提下:
- 查找出当前时序序列中有哪些相似的曲线形态?(单条曲线的多形态分解)
- 多条KPI指标曲线有哪些曲线的形态类似?(N条曲线形态聚类)
相似性度量
本文主要从时间对齐的多条时序KPI中进行相似性度量,时间点上的指标的相似性和时序曲线形态的相似性
- 时间点聚类(时间上的相似性)
1.1 闵可夫斯基距离:衡量数值点之间距离的一种常见的方法,假设P=(x1,x2,...,xn)和Q=(y1,y2,...,yn),则具体的公式如下:
当p=1时,表示曼哈顿距离;p=2时,表示欧几里得距离;当p趋近于无穷大时,该距离转换为切比雪夫距离,具体如下式所式:
闵可夫斯基距离比较直观,但是它与数据的分布无关,具有一定的局限性,如果x方向的幅值远远大于y方向的幅值