一句话回答
异常检测是找出那些和预期规律相差太大、不太可能是正常波动、值得去查的观测值,比如某一天的流量或某一笔交易。
公式: z = (观测值 − 预期值) / 基线标准差
什么是异常检测?
异常检测是找出那些和预期相差太大、不太可能是正常波动的数据点。对网站或产品来说,可能是注册数突然下降、错误数激增,或者某个来源的流量猛涨。
关键词是预期。异常永远是相对某个基线而言的,所以大部分功夫花在选一个好的基线上。
三类异常
| 类型 | 是什么 | 例子 |
|---|---|---|
| 点异常 | 某一个值很极端 | 今天的下单数比正常低 40% |
| 情境异常 | 一般情况下正常,放在这个情境里不正常 | 2,000 访客在周一很正常,在周日就奇怪了 |
| 集体异常 | 每个值看着都正常,连起来不正常 | 转化率连续一周每天掉 2% |
从简单到复杂的方法
- 固定阈值。「每小时错误超过 50 就告警。」简单,但不管周期。
- 百分比变化。「访客比上一周期少 30% 就告警。」简单,量小时噪声大。
- 基线区间。和最近几个同星期几的均值比,允许一个区间(±10%、±30%)。
- 统计方法(z 分数)。算今天离基线有几个标准差。
- 模型。季节分解、预测模型,或孤立森林这类机器学习方法,适合同时盯很多指标。
先从 3 或 4 开始。它们能照顾到每周的周期,有人问「为什么告警」时也好解释。
计算示例
最近四个周一的访客数(示例数字):1,180、1,240、1,210、1,170。
- 基线均值 = 1,200
- 标准差 = 31.6
- 今天(周一)= 1,020
- z = (1,020 − 1,200) / 31.6 = −5.7
离基线超过 3 个标准差,就很不像是噪声,值得查一查。只有四个点时标准差本身也不太稳,再用百分比区间(这里是 −15%)复核一下更稳妥。
告警触发后:排查清单
- 数据完整吗? 采集中断、脚本被拦、批量数据晚到,看起来都和下跌一模一样。
- 是整体都这样,还是某个细分? 按设备、国家、来源、页面拆开看。
- 最近改了什么? 发版、活动、假期、故障。看看日期标注。
- 是真的,但在预料之中? 活动带来的流量高峰就是你想要的异常。
- 记下原因,下一个人就不用再查一遍。
TapCub 里的异常检测
TapCub 的监控可以按小时、天、周、月盯一个内置指标(浏览量、访客、会话、跳出率、平均时长、错误数、错误率)或一个已保存的指标。各条件和上面的方法对应:
| 监控条件 | 对应方法 |
|---|---|
| 固定阈值 | 固定阈值 |
| 同环比 | 和上一周期比的百分比变化 |
| 预测基线 | 近 7 天与同星期几的均值;严格约 ±10%、中等约 ±30%、宽松约 ±50%;需要 14 天历史 |
| 异常检测 | 近 28 天同星期几的均值和波动;置信度 70 到 99;默认需要约 30 天历史 |
| 采集中断 | 多少分钟没有数据,用来发现追踪出了问题 |
「试跑」会算出这条规则在过去 30 天里会触发几次,是调灵敏度最快的办法。默认约 60 分钟内不重复通知。另见监控。
相关阅读
这个解释清楚吗?
我们会根据反馈修改和补充这篇内容。
提交没有成功,请稍后再试。
谢谢你的反馈,我们会据此改进这篇内容。你已经反馈过这篇了,谢谢。
