系列简介
这是我们一系列原创技术贴,从易到难,每天学习一点。所有内容均为疾控数据分析、科研论文相关,或者说很多和现在的热门监测预警相关,所以我们这个系列就叫“监测预警基础”。
今天是第50节,最近这算是我们一个小专题吧,大概11讲,我们细化,短篇化,彻底把ARIMA模型搞懂。
今天是学透ARIMA专题第11讲的内容,终于结束了,这一篇做一些总结。
从基础原理到实操建模,从季节性模型到协变量扩展,从模型诊断到预警落地,前面 10 篇我们把 ARIMA 从入门到疾控落地的全流程彻底讲透了。
不少同行跟着代码一步步跑通了自己单位的手足口、流感预测模型,也在后台留言问了很多实操里的踩坑问题:为什么模型拟合很好预测却不准?为什么加了协变量效果反而变差?预警线用多久需要更新?
这最后一篇收官篇,我们就把整个系列收束落地,做三件事:
第一,一张表总结全系列模型选型,对照场景直接用;
第二,梳理疾控建模新手最容易踩的 8 个高频坑,提前避坑少走弯路;
第三,给出疾控场景的进阶学习路线,明确后续提升方向。
很多人学完所有模型反而会纠结 “到底该用哪个”,这里我们直接整理成疾控场景选型对照表,对应需求直接选即可:
绝大多数疾控常规监测、预测、预警场景,SARIMA 模型就完全够用。它也是国内传染病预测类论文、监测方案里最常用的时间序列模型,吃透它完全能覆盖日常工作和职称论文的核心需求,不用为了 “高级” 强行堆复杂模型。
以下都是疾控同行实操里最常踩的坑,每一个都直接影响模型结果的可靠性,建议建模前对照排查。
坑 1:数据不做校验,时间顺序与周期错配比如周次排序错误、跨年 53 周未处理、周度数据frequency错设为 12,数据导入后直接建模。产生的后果就是季节性规律完全错位,模型输出的结果没有任何参考价值。需要我们第一,建模第一步先画时序图,肉眼核对趋势、周期是否符合疾病流行规律,和业务认知对齐;第二,周度数据统一剔除每年第 53 周数据,保证所有年份都是标准 52 周,周期长度固定。
坑 2:数据泄露,全量建模后再拆分测试集比如用全部数据定阶、拟合模型,再拆分训练集和测试集算误差。产生的后果就是测试集误差虚低,看起来模型效果很好,实际外推预测完全不准,属于典型的 “自欺欺人”。
需要我们严格遵循「先拆分,后建模」的黄金原则,所有定阶、拟合、调参步骤只使用训练集数据,测试集全程不碰,只用来做最终的效果验证。
坑 3:过度差分,追求 “绝对平稳”比如为了通过 ADF 检验,做 2 阶、3 阶差分,信奉 “差分越多越平稳”。结果导致过度差分会抹掉序列里的有效流行信息,反而让模型拟合和预测效果大幅下降。需要我们差分遵循「宁少勿多」原则,疾控场景的传染病数据,普通差分d和季节差分D基本都不超过 1,优先用 1 阶差分,绝不用 2 阶以上。
坑 4:跳过残差检验,拟合完就直接用比如我们跑出模型参数就直接做预测,完全跳过残差白噪声检验。结果模型可能根本没提取干净序列的有效规律,预测结果不可靠,相当于 “黑箱瞎猜”。这就需要我们必须做残差白噪声检验,这是模型合格的最低门槛,Ljung-Box 检验 P 值 > 0.05 是必过标准;通不过就回去调整模型阶数,不要硬用。
坑 5:只看训练集拟合,不看测试集外推效果比如我们经常看到历史数据拟合得严丝合缝,就觉得是好模型。结果模型严重过拟合,历史拟合越完美,未来预测越离谱,完全没法落地。这就需要我们做测试集的外推,外推误差才是评价模型好坏的核心指标,优先看测试集的 MAPE、RMSE;训练集拟合再好,测试集误差大也不能用。
坑 6:预测期太长,指望 ARIMA 预测半年一年比如直接预测 52 周、半年甚至一年的病例数,用来做全年发病预判,结果置信区间越来越宽,甚至出现负数下限,预测结果完全没有参考价值。我们使用的时候,ARIMA/SARIMA 本质是短期预测模型,周度数据推荐预测 1-4 周,最多不超过 8 周;月度数据推荐 1-3 个月,预测越久误差越大。
坑 7:协变量滥用,为了加而加比如随便找一堆变量全塞进模型,不管有没有流行病学依据,也不管有没有对应的未来数据。结果变量之间出现多重共线性,模型系数失真、稳定性变差,预测效果反而不如纯 SARIMA。我们使用这个模型的时候,协变量优先选有明确业务逻辑的 2-3 个核心变量,不是越多越好;统计不显著、不符合业务认知的变量及时剔除;做预测必须有对应预测期的协变量数据,否则不要用 ARIMAX 做预测。
坑 8:预警阈值一次建模用到底比如用前 3 年数据建一次模型,预警阈值一用就是一整年。这导致的后果就是流行强度、病毒毒株、防控环境变化后,阈值完全错位,要么频繁误报,要么漏报异常升高。
这就需要我们采用滚动建模机制,每新增 1-4 周真实数据,就把新数据加入训练集,重新拟合模型、更新预警阈值,保证阈值永远适配最新的流行规律。
把 SARIMA 用熟、用透,已经能覆盖 80% 的日常工作需求。如果想进一步提升、做更深入的研究,可以沿着这个路线进阶:
当然,可以跟着我们一步一步慢慢学
第一阶:夯实单变量时间序列基础
熟练掌握 SARIMA 模型的全流程操作,能独立完成数据清洗、建模、诊断、预警、汇报全流程,能处理 80% 的常规传染病预测预警需求。这是疾控工作者的核心基本功,也是后续进阶的基础。
第二阶:掌握滚动预测与多模型对比
学会用循环代码实现滚动建模,模拟真实监测的逐周预测,更贴近实际工作场景;对比指数平滑模型、Prophet 等其他时间序列方法,针对不同疾病选最优模型,而不是只用 ARIMA。
学习分布滞后非线性模型(DLNM),专门研究气温、湿度等因素对发病的滞后效应、非线性影响,是传染病环境因素研究的标配方法,非常适合写论文;
拓展到空间时间序列,结合分县区的发病数据做空间预警、区域风险研判,适合市级、省级疾控的区域监测场景。
如果追求更高的预测精度,可以尝试混合模型:用 ARIMA 提取序列的线性规律,再用 XGBoost、LSTM 等机器学习模型拟合非线性残差,两者结合进一步提升预测效果,适合重点传染病的精准预警、科研课题研究。
1. 从简单模型开始,不要盲目追求复杂
很多人刚入门就想上机器学习、复杂混合模型,但实际疾控工作里,稳定、可解释、易复现才是第一位的。SARIMA 方法成熟、结果好解释、汇报和写方案都容易被认可,先把基础模型用熟、用透,再考虑进阶。
2. 业务逻辑永远优先于统计结果
时间序列只是工具,所有模型结果都必须符合传染病流行规律。如果模型算出 “气温越高手足口发病越少” 这种明显违背业务认知的结论,哪怕统计上显著也不能用,先回头查数据、查模型设定,不要迷信统计结果。
3. 先跑通,再优化
不要一开始就追求完美模型。先跟着流程跑通一个完整的「建模 - 验证 - 预警」闭环,再逐步调整参数、补充协变量、优化阈值。动手实操永远比只看理论学得快,跑通第一个模型,你就已经超过了 90% 只停留在 “看教程” 的人。
到这里,「这一次一定学透 ARIMA」全系列 11 篇就全部更新完成了。整个系列我们始终围绕疾控的真实工作场景,没有堆砌复杂的数学公式,只讲能用、好用、能落地的方法,目标就是让每一位疾控同行都能跟着教程,跑通自己的第一个时间序列模型,把方法真正用到日常监测、分析和预警工作里。
如果还有具体的建模、代码问题,或者想了解其他疾控统计方法,都可以留言交流。希望这一系列内容,能帮你做出更严谨、更有价值的疾控分析结果。
编辑:普通疾控人 | 审核:诗酒趁年华
文章来源 | 原创
说明 | 转载只为分享,如有侵权联系删除
©版权声明 | 部分信息和图片来自公开网络
转载请注明
再次转载请注明出处
科普健康 | 宣传疾控
本号为多位疾控机构从业者运营
重点关注国内外健康事件
致力于疾控科普
在做好科普服务大众的同时
做好疾控机构的宣传
让更多的人了解疾控,拥抱健康
欢迎加「小编」微信(cdcjkr126com)
本文具体说明
本文为原创内容,文章为个人理解所学,不涉及疫情信息及内部保密数据,发表的目的为自我总结及给有需求的人士学习使用。如有不妥之处,欢迎联系小编修改、删除。
更多精彩视频,尽在“CDC疾控人”视频号
热门跟贴