本节摘要:ARIMA 对缺口、尖点和尺度很敏感。动手时先把日历对齐,再用可复核的规则填缺失、标记异常、决定要不要对数或方差稳定化。预处理不是把图「洗好看」,而是避免单位根检验和 ACF 被单点劫持。
阅读完本节,你应当能够:
一阶差分是 y_t 减 y_{t-1}。若某一天把 50 误录成 500,差分会在该点前后各砸出一个巨大正负脉冲。ACF 会在滞后 1 附近出现古怪的负相关,PACF 也会被拉出假截尾。单位根检验对这种脉冲同样过敏:ADF 可能因为「变化太大」而误判。所以预处理必须发生在定 d 之前,不是拟合报错了再回头删点。
先对齐时间索引。仓库「周日不发货」在业务表里往往直接没有行。若你把周五和周一粘成相邻观测,模型会以为周末的跳变是普通一步,季节 m=7 也会错位。正确做法是生成完整日历,空位标成缺失,再决定怎么填。潮位站停电两小时同理:那两小时仍在轴上。
示意:日发货量(件)中间缺一天,夹着一个尖点:
日序 1 2 3 4 5 6 7 件数 40 42 -- 45 120 48 47
第 3 天缺失,第 5 天 120 相对邻居离谱。不要同时「线性插值填 3」和「把 120 当真实旺季」而不写理由。每一处都要能向值班员复述。
| 缺口形态 | 可考虑的做法 | 不要做的事 |
|---|---|---|
| 单点缺失、两侧正常 | 两侧平均或上期结转 | 用整个序列均值填,会压扁局部波动 |
| 固定星期缺失 | 用去年同星期或上周同星期 | 用工作日均值填周末,季节被抹掉 |
| 连续多日缺失 | 标成一段缺口,考虑分段建模 | 一条直线连过去,假造成平稳 |
| 缺口正好在结构折附近 | 宁可缩短样本 | 用折前数据填折后 |
季节性数据用「季节邻点」通常比简单线性插值更不伤结构:月度序列缺某年 3 月,优先看去年 3 月和相邻 2 月、4 月,而不是只看 2 月和 4 月连线——连线会把年季节削掉一截。
填补会让你低估真实不确定性。后面的预测区间默认「这些点是观测」。实务上至少在笔记里写:哪些点是填的。若缺口超过一小段比例,我更倾向分段,或改用能原生处理不规则间隔的方法,而不是把 ARIMA 建立在一排假点上。
💡 关键直觉:填缺失是在编造观测。编得越光滑,ACF 越「好看」,模型越自信,持出样本越容易打脸。
异常至少分三类,处理不同:
原文强调 ARIMA 对异常值敏感,会显著影响参数和预测。差分让敏感更重:水平异常变成脉冲异常,脉冲异常在 MA 结构里会被「记住」若干步。有人用 3 倍标准差自动砍点,这在有趋势的原始序列上几乎必砍错——趋势本身就会让尾部看起来远。应在平稳化之后或在去掉季节之后再谈「几倍标准差」,并且砍点要留日志。
变换方面,常见的是对数:当波动随水平变宽(发货量越大、日波动越大),对数把乘法误差近似成加法,差分后更接近齐方差。对数要求正值;含零的件数要先说明零是「真的没货」还是「没记录」。Box-Cox 一族把对数当特例,但自动搜 λ 可能让模型失去「对数就是弹性」这种可讲解性。我在要对业务讲清楚时,优先明确的对数或平方根,而不是每次换 λ。
概念检查可以用差分前后的示意计算,不必上完整程序:
y = [40, 42, 41, 45, 120, 48, 47] # 一阶差分:2, -1, 4, 75, -72, -1 # 第 5 个点把差分序列炸出 +75 与 -72,ACF 必歪
把 120 改成更合理的 46 后再差分:2, -1, 4, 1, 2, -1,单位根检验和 ACF 才在讨论「惯性」而不是「错字」。
⚠️ 常见坑:先对含尖点的序列取对数再差分,尖点仍在,只是被压了尺度;检验看起来「温和了」,结构问题还在。变换不能替代对异常的定性。
和业务对齐时,预处理规则应写成短清单,而不是藏在默认参数里。例如:「单点缺失用两侧平均;连续缺失超过 3 天则该段不参与定阶;法定假日做成干预,不删除。」这样第 2 章诊断失败时,你知道该回哪一条规则,而不是重开一轮盲目搜阶。
源材料把缺失处理分成删除和插补。删除在横截面里常见,时间序列上通常不可取:会破坏等间隔,让滞后 1 变成「跳过缺口的那两天」。只在缺口位于样本最末端、且你决定缩短持出段时,删除才不那么伤。插补里,前向填充(用上一个观测顶上)适合变化慢的电表读数,但会制造台阶,差分后出现一串零再加一个脉冲。后向填充要用到未来值,训练段里用它等于轻微泄漏,我更少用。线性插值假设缺口两端之间是直线,短缺口可以,跨越季节高峰的长缺口会削掉鼓包。样条更光滑,也更容易编造假振荡。用初步 AR 模型填缺口,理论上吃进了相关,实际上把模型用了两次,诊断会过于乐观。
我的默认清单更短:单点用两侧平均或前向填充并记账;连续超过三天标成段、考虑分段;季节性缺口优先用上个周期同位置。均值或中位数填整段,在有趋势的序列上会造出一块平台,单位根检验必歪,基本不用。
异常值的识别不要只靠「三倍标准差」。有趋势时尾部本来就远;应在去趋势或差分后再看,或用稳健中位数绝对偏差。识别之后仍要定性:错字改正、促销做成干预、不明尖点做带与不带的对照检验。干预变量是某天取 1 的外生项,让 ARIMA 解释其余日子,比把尖点改成邻居平均值更可复核——值班员能指出「那一天是台风」。
变换除了对数,还有平方根、立方根,以及把对数当特例的 Box-Cox。自动搜 λ 能让似然更好,但你要对业务说「λ=0.37 的弹性」会很痛苦。件数含零时,对数前加一个很小的偏移会改变小值日的权重,必须写进规则。变换之后,预测必须还原到原单位再算 MAE;在 λ 尺度上比较模型,业务听不懂,你自己也容易选错。
示意 40,42,缺,45,120,48,47。先对齐日历,确认缺的是一天而不是「少一个样本」。第 5 点 120 先定性:错字、促销还是不明。不要同时线性插值缺口并把 120 当真实旺季。差分后若出现 +75 与 -72,检验已经被劫持,任何 ADF 结论都先作废。
制造台阶,差分后一串零加一个脉冲,ACF 滞后 1 会怪。变化慢的电表可以慎用并记账;有季节鼓包时优先季节邻点。
不能。对数只压尺度,尖点还在,检验看起来温和,结构问题仍在。先定性异常,再谈变换。
示意序列中间缺一天、夹一个 120。值班员说那天像录入多写了一个零。你的规则应写成:单点缺失用两侧平均并记账;连续三天以上分段;法定假日做成干预而不是删除;疑似错字核对单据后改正,改正前后各做一次 ADF,若结论被单点翻转,相信改正后的。不要用全样本均值填缺口,那会在趋势序列上造平台。不要在含 120 的序列上取对数假装问题变温和。变换若采用对数,必须声明件数是否含零;含零则说明零是没货还是没记录,不能偷偷加一个偏移却不写进规则。预测误差一律在还原后的件数上算。把这份清单交给下一班,诊断失败时才知道回预处理而不是整条流水线重搜阶。样条插值跨越季节高峰时会削鼓包,短缺口可用线性,长缺口宁可分段。
口令:预处理在定 d 之前,每条规则能向值班员复述。删除缺口会破坏等间隔,只在末端缩短样本时才考虑。前向填充制造台阶,差分后零脉冲;后向填充有泄漏;均值填趋势序列会造平台。连续缺口超三天分段。异常分错字、可解释冲击、不明三类,三倍标准差在原始趋势上必误伤,应在平稳层或用稳健离散度。对数服务扇子张开的异方差,零值要声明,Box-Cox 的 λ 自动搜会失去可讲解性。对照计算:含 120 的差分出现 +75 与 -72,改正后再差分才是惯性。填补点必须记账,否则预测区间把假点当观测,低估不确定度。
原文把缺失处理分成删除与插补,并明确时间序列上删除会破坏等间隔与滞后结构,除非缺口极少且在末端。插补列出前向填充、后向填充、固定值、线性插值、样条、移动平均插补、基于模型的插补。前向填充适用于变化缓慢,但引入台阶;固定值在有趋势或季节时会扭曲分布;基于模型的插补能吃进依赖,却把模型用了两次,后面诊断会过于乐观。异常值会显著影响参数与预测,差分后水平异常变成脉冲异常。数据转换的目标包括稳定方差与接近正态,对数与 Box-Cox 是常见选项,但变换后必须还原再评价。把原文清单收成「默认短清单加记账」,避免把每一种插值都试一遍却不记录哪些点是假的。传感器故障与记录错误是缺口的常见来源,不是「少了一个样本」这么简单。
下一节进入本章的技术核心:用图和 ADF/KPSS 决定差分几次,以及如何避免过差分。