中盾观察
首页 / 数据方法 / 正文

用气温数据入门预测模型:一次实践记录

栏目:数据方法 | 约1522字 | 2026-09-14

前阵子帮一个做农业的朋友看大棚温度记录,他问我能不能根据过去三年的数据预测下个月的平均气温。我拿到的表很简单,每天一行:日期、最高温、最低温、平均温。一共1096条记录,没有缺失。这个体量不大,正好适合用来讲清楚预测模型到底在做什么。很多人以为预测就是套一个高级算法,其实第一步永远是观察数据本身。我把三年的日平均温画成折线图,横轴是日期,纵轴是温度。肉眼看过去,每年都有一条明显的波峰波谷,大约在7月中旬达到最高,1月上旬落到最低。这就是最基础的走势:周期性。

观察完走势,下一步是拆解。我算了一下,三年日平均温的总均值是16.3摄氏度,标准差7.8。但直接拿均值去预测任何一天都不靠谱——夏天会差十几度。于是我把数据按月份分组,得到12个月的平均值:1月3.1度,4月15.2度,7月28.4度,10月17.6度。这组月均值已经比单一均值好很多。去年7月15日实际平均温是29.1度,用7月均值28.4度去猜,误差只有0.7度。但如果用全年均值16.3度,误差接近13度。这说明预测模型的第一层价值,就是找到合适的参照系。

有了月度参照系,我试着做一个最简单的预测:下个月的平均温等于去年同月平均温。比如要预测今年8月,就拿去年8月的均值来用。回测过去两年,12个月的预测误差在0.4到2.1度之间,平均绝对误差约1.2度。这个结果不算精确,但对于农业决策——比如要不要提前揭膜——已经能提供参考。这里的关键在于,我们用的是真实数据做回测,而不是凭感觉说“差不多”。1.2度的误差意味着,如果实际温度比预测低1.5度,就要警惕倒春寒之类的异常。

上面这个模型叫“季节性朴素预测”,名字听起来唬人,原理一句话:去年同月怎么样,今年同月就怎么样。它不考虑趋势变化,也不考虑随机波动。我试过加一个趋势项——计算每年同月均值的线性变化。结果发现,三年里4月和10月的均值每年上升约0.3度,而7月和1月几乎没变。这个趋势很弱,加进去之后回测误差只从1.2度降到1.1度。对于三年这么短的数据,这点提升不值得增加复杂度。一个实用的经验是:数据量少于五年时,优先用简单模型,把精力花在检查异常值上。

检查异常值的时候,我发现2022年3月有一周的平均温比前后十天低了6度。查了一下,那是一次寒潮。如果直接拿这个月的均值去预测未来,就会把寒潮的影响当成常态。处理办法很简单:把那一周的数据标记出来,预测时用前后两周的插值替代。修正后,3月的均值从9.8度调整到11.2度,更接近常年。这个例子说明,预测模型不是越复杂越好,而是要先保证输入的数据能反映真实走势。一个被寒潮拉低的月均值,会让后续所有预测都偏低。

最后说验证。我把1096条数据按时间顺序分成两部分:前两年用来训练,最后一年用来测试。测试方法是滚动预测——每次用之前所有数据预测下一天,然后加入真实值再预测下一天。最终平均绝对误差是2.3度。这个数字比月度预测的1.2度差,因为日度波动更大。但它的意义不同:月度预测告诉你“下个月大概什么水平”,日度预测告诉你“明天大概什么水平”。两者用途不一样,误差标准也不该一样。如果你只关心趋势,月度模型足够;如果你要控制大棚通风,日度模型才有用。

回头看整个过程,没有用到任何机器学习库,全是加减乘除和分组统计。但每一步都对应预测模型的核心环节:观察数据分布、识别走势、选择基线、回测误差、处理异常。很多人一上来就纠结用LSTM还是ARIMA,却连数据有没有季节性都没画图看过。我的建议是,先拿一张纸,把时间序列画出来,标出最高最低点,算一算月均值。这些手工步骤做完,你对数据的理解会比跑十个模型都深。预测模型入门,难的从来不是算法,而是愿不愿意老老实实看数据。