主页 模型库 竞赛 学习中心 工具箱 论文库 前沿 建模空间 AI建模
学习中心 探索专题 时间序列 异常检测与变点

本页实验台

  1. 残差法找离群
  2. CUSUM 与控制图
  3. 变点检测
  4. 漏报与误报的平衡
LAB 01

残差法找离群

先拟合再看残差:三倍标准差与稳健版本的差别

残差的标准差 / MAD 估计—
3σ 法抓到几个—
3 MAD 法抓到几个—
误报个数:3σ / 3 MAD—
找离群点的标准流程是三步:先拟合趋势和季节,再看残差,再定一条界。第一步很重要——如果直接对原序列用"三倍标准差",季节高峰会被大量误判成异常。这一页要说的是第三步里的一个陷阱。把离群点的数量拖到 6、幅度拖到 8,然后比较两条界:红虚线(3 倍标准差)会被离群点自己撑开,结果是漏掉一部分本该抓到的点;绿点线(3 倍 MAD)几乎不动,因为中位数绝对偏差对极端值不敏感。读数第一行把两个尺度并排给你:离群点越多越大,标准差涨得越厉害,而 MAD 基本不变。这叫掩蔽效应:异常点把用来判断异常的标准给污染了。这是稳健统计要解决的核心问题之一。实践建议很简单:在做离群检测时,尺度估计一律用 MAD(乘 1.4826 与正态标准差对齐),中心用中位数,而不是用均值和标准差。代价几乎为零,收益是你的检测器不会被它要找的东西骗过去。(同样的道理适用于箱线图、Z 分数、3σ 规则、以及任何"先估尺度再判异常"的方法。)
LAB 02

CUSUM 与控制图

累积和图对小幅持续偏移比控制图敏感得多

当前的偏移—
控制图的检测延迟—
CUSUM 的检测延迟—
慢多少倍—
控制图(3σ 规则)只看每一个点自己够不够极端。对付突然的大跳变它很好用,但对付"从此以后平均值高了一点点"就很吃力——因为每一个点单独看都还在正常范围内。CUSUM 的做法是把偏差累积起来:每一步加上(观测 − 参考值 − 松弛量 k),并且不许变成负数。只要偏移持续存在,这个累积和就会稳定地爬升,迟早越过门限 h。把偏移设成 0.5σ 再看两个读数:控制图平均要 116 步才报警,CUSUM 只要 37 步,快 3.2 倍。偏移 0.3σ 时差距更大(158 对 82),而且控制图有 5/60 的情形干脆一直没报。把偏移拖到 3σ,两者几乎一样快(1.4 对 1.3)。这就是两类方法的分工:大而突然的异常用控制图,小而持续的偏移用 CUSUM(或者 EWMA,思路相同)。两个参数怎么定?经验规则是 k 取你想检测的最小偏移的一半(想抓 1σ 的偏移就取 k=0.5),h 一般取 4 到 5,这大致对应"正常情况下平均几百步才误报一次"。把 h 拖小会更灵敏但误报变多——这个取舍在下一个实验台里会被量化。
LAB 03

变点检测

二分法逐段搜索:均值变了、方差变了、斜率变了各是什么样

找到几个 / 真实几个—
位置对上的有几个—
平均偏了多少步—
找到的位置—
变点检测的标准做法是二分法:先在整段里找一个最能降低总误差的切点,如果降低的幅度超过一个惩罚项,就切一刀,然后对左右两段各自递归。这里用的代价是段内平方和,所以它天生擅长找均值的变化。把"变的是什么"切到"方差"再看。肉眼上那三个变点非常明显——波动幅度一段比一段大——但算法基本找不到,因为均值一直没变,平方和的切分收益很小。这不是算法坏了,是代价函数问的问题不对:要找方差变化就该用对数似然形式的代价,要找斜率变化就该在每段拟合直线。这是变点检测里最重要的一句话:你只能找到你的代价函数在乎的那种变化。再看惩罚项那个滑杆。拖小:会切出一堆假变点(找到的个数远超 3);拖大:真变点也会被漏掉。这个参数在正规做法里由 BIC、MDL 或者交叉验证来定,而不是手调——但无论用哪种准则,本质都是在"多切一刀能降多少误差"和"多一个参数要付多少代价"之间权衡,和模型选择完全是同一件事。(顺带一提:二分法是贪心的,不保证全局最优。要精确解可以用动态规划(PELT 算法),代价是复杂度更高,但在几万个点以内通常都跑得动。)
LAB 04

漏报与误报的平衡

阈值一动,两类错误此消彼长,业务成本决定放哪儿

总代价最低的阈值—
这时抓到了多少异常—
报警里有多少是真的—
误报数 / 正常点总数—
"阈值定在哪儿"从来不是一个统计问题,是一个成本问题。上面那张图是两条此消彼长的曲线:阈值越低,抓到的异常越多(绿线高),误报也越多(红线高);阈值越高,两者一起降。光看这张图无法决定该站在哪儿——必须先回答"误报一次有多贵、漏报一次有多贵"。下面那张总代价曲线就是把这两个数代进去以后的结果,它有一个明确的最低点。把"一次漏报的代价"从 2 拖到 60:最优阈值会明显左移,系统变得宁可多报也不敢漏——这正是医疗筛查、安全监控、设备故障预警的处境。反过来把误报代价拖大:阈值右移,系统变得谨慎,这是垃圾邮件过滤、风控拦截的处境(错杀一个正常用户的代价很高)。还有一个常被忽略的因素:异常的稀有程度。把"异常发生比例"拖到 2‰ 再看"报警里有多少是真的"。即使检测器本身很不错,这个精确率也可能低得吓人——因为正常点实在太多了,哪怕 1% 的误报率,绝对数量也远超真实异常。这就是基础率谬误在异常检测里的样子:在极不平衡的问题上,"准确率 99%"这句话几乎不含任何信息,必须看精确率、召回率,以及最终的成本。

这一页想说的

两类问题,两类工具:离群点看单点是否极端,变点看结构是否断裂。三条可以直接用的经验:估尺度一律用 MAD 与中位数,否则异常点会把标准撑开;小而持续的偏移用 CUSUM,大而突然的跳变用控制图;变点检测只能找到代价函数在乎的那种变化。最后一条最重要:阈值由成本决定,而在极不平衡的问题上要看精确率,不是准确率。

接着看

← 返回模块 ← 返回探索专题