![]()
系列简介
这是我们一系列原创技术贴,从易到难,每天学习一点。所有内容均为疾控数据分析、科研论文相关,或者说很多和现在的热门监测预警相关,所以我们这个系列就叫“监测预警基础”。
今天是第49节,最近这算是我们一个小专题吧,大概11讲,我们细化,短篇化,彻底把ARIMA模型搞懂。
今天是学透ARIMA专题第10讲的内容,学会ARIMA之后怎么落地疾控预警。
上一篇我们讲完了 ARIMAX 带协变量模型,搞定了影响因素量化分析与预测精度优化。不少同行留言说:模型建好了,精度也提了,最终怎么落地到日常的传染病监测预警工作里?
这其实是我们学习 ARIMA 的核心落脚点:不是为了跑模型而跑模型,而是用时间序列方法搭建一套比传统固定阈值更科学的动态预警体系,解决传统百分位数法「高峰季漏报、低谷季误报」的老问题。
这一篇是 ARIMA 系列的落地应用篇,我们继续沿用手足口病周度监测数据,手把手教你用 SARIMA 模型做动态预警,从阈值设置、信号判定到效果评价,完整流程可以直接复用在日常监测工作中。
![]()
目前疾控常规预警最常用的是历史百分位数法:取前 5 年同期病例数的 P95 作为固定预警阈值,超过就触发信号。但这个方法有个最大的问题就是只看同期历史,不考虑近期趋势
也就是说无法捕捉近期发病的连续上升趋势,等超过阈值时,疫情往往已经扩散了一段时间。
而 ARIMA,尤其是 SARIMA 季节性模型做预警,完美解决了这个问题,核心优势是动态阈值:
第一,阈值跟着季节性走:流行高峰季阈值自动升高,低谷季自动降低,符合真实流行规律;
第二,阈值跟着趋势走:纳入近期发病的自相关趋势,能更早识别连续上升的异常信号;
第三,自带统计学概率意义:预警阈值对应明确的置信水平,结果更严谨,符合预警的 “小概率事件” 判定逻辑。
![]()
采用ARIMA 预警的逻辑其实非常简单,完全基于我们之前讲过的预测置信区间:模型预测输出的95% 置信区间上限,就是我们的预警阈值。
从统计学含义来看:
95% 置信区间的定义是在历史流行规律没有发生突变的前提下,有 95% 的概率,真实病例数会落在这个区间范围内。
如果真实病例数低于上限:属于正常季节性波动,无需预警;如果真实病例数超过上限:属于小概率异常事件,提示发病超出了既往正常流行水平,触发预警信号。
对于疾控场景的分级预警扩展来说:
实际工作中可以设置多级预警,匹配不同的响应级别:80% 置信区间上限:关注级(蓝色),提示发病有升高趋势,加强监测;95% 置信区间上限:预警级(黄色),超出正常波动范围,开展风险排查;99% 置信区间上限:暴发级(红色),显著异常升高,启动应急响应。
![]()
我们还是采用之前手足口病的例子
第1步,正常做ARIMA分析
sarima_model步骤 2:生成预测值与预警阈值
warn_99 <- pre_result$upper[,3] # 99%上限:暴发级步骤 3:识别预警信号
对比测试集真实病例数与预警阈值,标记触发预警的周次:
cat("测试集20周内,共触发95%预警", sum(warn_signal), "周\n")步骤 4:预警结果可视化
这是日常监测汇报最常用的图,直观展示真实发病、预测趋势与预警线:
inset = 0.02)最终会出现如下图所示预警图:黄色虚线就是动态预警阈值,随季节性波动自动升降;红色实心点就是真实病例超过阈值,触发预警信号;阴影区域就是不同等级的置信区间,对应分级预警范围。
![]()
![]()
建完预警模型,必须评价效果好不好,核心就是两个指标:灵敏度(不漏报)、特异度(不误报),也是疾控预警效果评价的金标准。
我们先来回顾学习一下四格表,我们先设定 “金标准”(比如用实际暴发事件、或历史 P95 判定的异常周次),和预警结果做交叉对比,分为 4 类:
![]()
灵敏度(Sensitivity)= 真阳性 / (真阳性 + 假阴性),含义是所有真正异常的周次里,模型成功预警的比例,衡量不漏报的能力。对于疾控来说,甲类、烈性传染病,灵敏度越高越好,宁可误报也不能漏报。
特异度(Specificity)= 真阴性 / (真阴性 + 假阳性),含义是所有正常的周次里,模型正确排除的比例,衡量不误报的能力。对于疾控来说,对常规监测的常见病,特异度太低会导致预警信号泛滥,增加基层排查负担。
R代码实现
cat("误报率:", round(false_alarm_rate*100, 1), "%\n")![]()
1. 不要一次建模用到底,必须滚动更新
真实监测工作中,不是用 2022-2025 年的数据建完模型就一直用,而是滚动建模:每新增 1 周的真实数据,就把新数据加入训练集,重新拟合模型、更新下一周的预警阈值。这样阈值永远适配最新的流行规律,预测和预警精度会大幅提升,也是专业监测系统的标准逻辑。
2. 优先适配有强季节性的传染病
SARIMA 动态预警不是万能的,效果最好的是有明确年度流行周期的传染病:首选流感、手足口病、登革热、细菌性痢疾等季节特征明显的疾病;不推荐无规律散发病例、罕见病,这类疾病用控制图法更合适。
3. 预警信号只是提示,必须结合流调核实
统计上的异常不等于真实的暴发。触发预警后,首先要排查非流行因素:比如是不是报告延迟、集中补报导致的虚高;是不是检测量增加、筛查范围扩大导致的病例增多;是不是学校开学、节假日等已知因素带来的常规波动。排除这些因素后,再开展流行病学风险排查,避免无效响应。
4. 可结合协变量升级预警精度
对于气象敏感型传染病(手足口、登革热),可以升级为 SARIMAX 预警模型,加入短期气象预报数据,在异常气温、降雨时段,预警精度会比纯 SARIMA 更高,尤其适合提前 1-4 周的风险预判。
5. 阈值分级管理,匹配应急响应体系
不要只设一条预警线,建议按 80%、95%、99% 设置三级预警,对应不同的响应动作:关注级只做数据复核、趋势跟踪;预警级开展风险研判、重点场所监测;暴发级启动应急响应,完全贴合疾控现有的分级响应机制。
ARIMA 系列不是越复杂的模型越好,而是匹配场景、符合业务逻辑、结果可解释的模型,才是好用的模型。对于绝大多数疾控日常监测、预测、预警需求,SARIMA 模型已经完全够用,也是各类传染病预测论文、监测方案里的标配方法。
希望这一系列内容,能帮你把时间序列方法真正落地到日常工作里,做出更严谨、更实用的监测分析结果。
参考:
《时间序列分析-基于R》. [M] .王燕.中国人民大学出版社出版
传染病预测预警技术及实践案例分析. [M]. 杨鹏, 王小莉. 人民卫生出版社
![]()
![]()
编辑:普通疾控人 | 审核:诗酒趁年华
文章来源 | 原创
说明 | 转载只为分享,如有侵权联系删除
©版权声明 | 部分信息和图片来自公开网络
转载请注明
再次转载请注明出处
![]()
科普健康 | 宣传疾控
本号为多位疾控机构从业者运营
重点关注国内外健康事件
致力于疾控科普
在做好科普服务大众的同时
做好疾控机构的宣传
让更多的人了解疾控,拥抱健康
欢迎加「小编」微信(cdcjkr126com)
本文具体说明
本文为原创内容,文章为个人理解所学,不涉及疫情信息及内部保密数据,发表的目的为自我总结及给有需求的人士学习使用。如有不妥之处,欢迎联系小编修改、删除。
更多精彩视频,尽在“CDC疾控人”视频号
![]()
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.