时间序列预测那不合常理的难度
文章摘要
作者从「为什么复杂模型经常打不过最朴素的基线」这个反复出现的现象出发,系统地论证了时间序列预测在本质上比常规机器学习更难。任务形式看似简单——用历史观测估计未来值 ŷ(t+h) = f(y₁:t),但作者认为其困难有四层结构性来源。
第一是数据不满足独立同分布(non-IID)。常规机器学习从彼此独立的样本中学习,而一段时间序列只是某个数据生成「过程」的单一实现(single realization / trajectory)。数据服从整个序列上的联合概率分布,条件依赖关系才是关键,经典机器学习的假设从根上就失效了。
第二是信噪比过低。大语言模型之所以成功,是因为语言本身有极高的语义含量;而实值序列的语义信息稀疏得多,仅从历史值 f(yₜ | y<t) 能榨出的预测能力有限。
第三是有效样本量严重不足。尽管时序数据在数量上很充裕,但高自相关性削弱了样本的独立性——T 个时间戳绝不等于 T 个独立数据点。真正的有效样本量应该按「有意义的周期数」计算:预测经济衰退时,有效样本是历史上衰退的次数,而不是月度观测的条数。作者用 m4-hourly 数据集做对比:它之所以好学,是因为由成千上万条短序列组成,集合起来覆盖了完整的日周期。
第四是分布偏移必然发生。预测本质上是在训练数据支撑集之外做外推。常规机器学习中测试点「可能」落在分布外,而在预测任务中它「总是」在分布外。外汇和比特币这类事件驱动的序列尤其明显。
那么什么条件下时间序列才是可学的?作者给出三个统计性质:平稳性(联合分布在时间平移下不变,这才使跨时间的泛化成为可能)、遍历性(时间平均收敛到集合平均,这才使从单条轨迹推断整个过程成为可能)、以及足够的自相关结构。她特别指出一个反例:白噪声既平稳又遍历,但自相关为零,因此尽管统计性质完全已知,它仍然不可预测。
按对滞后项的利用方式,作者把模型排成一个谱系:Naive / Seasonal-Naive 只用单个滞后项;AR(p) / ARIMA 用前 p 个滞后项的线性加权;DLinear / NLinear 学习整个回看窗口上的权重;神经网络与基础模型做滞后项的非线性组合加预训练映射。跨多个数据集的实测结论是:在强季节性数据(如 m4-hourly)上,统计基线和零样本基础模型双双表现优异;而在事件驱动的序列上,再复杂的模型「也没比朴素预测器好多少」。换句话说,强季节性使学习成为可能,而结构复杂本身并不保证性能。
作者还给了三种衡量「可预测性」的实用方法:与朴素基线对比、用谱密度分析看频率成分是否集中、以及对差分后的残差做 Ljung-Box 检验。最终结论是:既然瓶颈在此,「往上堆更复杂的非线性模型不是提升的来源」。真正的出路是找到能捕捉现实世界因果驱动因素的外生(exogenous)特征——因为许多序列本就是事件驱动的,那些冲击和漂移是可以被度量、被纳入建模的。
HN 评论精华
-
klodolph:注意到文中很多例子是金融市场,而市场之所以难预测有其内在逻辑——任何能成功预测市场的人都会去这么做、赚到钱,从而改变市场,让自己的预测优势消失。如果你预测的是服务器磁盘占用之类的东西,时间序列预测会容易得多。
-
jldugger 补充了一个很生动的反例:市场确实更「对抗性」,但服务器指标同样深受分布偏移之苦。他们的 SRE 团队上个月因为世界杯导致的流量下降被叫醒了好几次——比赛没有季节性规律、开赛前一小时查询流量上升、比赛期间用量下跌(跌多少还取决于时段和谁在踢)。「于是你预测工具的准确率现在取决于能否正确预测世界杯什么时候开赛,以及谁会赢。」他说这只是最近一例,其他还涉及极端天气、全国性综艺节目、地震,以及各家过圣诞的时间。kjellsbells 接着聊到英国电网运营商历来要为大型足球比赛结束时的用电激增做规划,IneffablePigeon 补充说他们过去连《东伦敦人》这类热门肥皂剧的结束时间都要算进去,如今随着直播电视式微和可再生能源崛起,预测重心已转向天气预报。
-
gregw2:在「磁盘用量」和「金融市场」这两个难度与价值的极端之间,还有一类反复出现的序列——「公司销售额」「产品需求」——它们既不「容易」,也没到「预测股市那么难」的程度。他另外提到,有些意外的是一位时间序列建模的老手竟然没提贝叶斯建模和集成模型。
-
crystal_revenge(本帖最受认可的解释之一):他教时间序列预测时总会指出,最大的挑战之一是预测时刻你手上总有超出训练时观测范围的取值(具体说就是 t 本身的值)。在其他机器学习和统计建模任务中并非如此——你可以在所有会见到的 token 上训练、所有会见到的像素值上训练,回归分析也能覆盖每个类别取值和连续取值的范围。但预测任务里你永远在预测训练范围之外的值。类比:如果你想用温度建模水的密度,但训练数据只有 0-100°C,然后拿去预测地球上所有温度会怎样。「不知为何,一旦变量是时间,我们就以为它豁免于『不能在训练范围外预测』这条显而易见的限制。」他还把整件事重新表述为「预测训练范围外的数值通常效果不好」,并补充说「预测」在填补过去空白(插值)时反而顺利得多。
-
chas 引入了混沌理论的工具:李雅普诺夫指数(Lyapunov exponent)和相应的李雅普诺夫时间,它们刻画了你能指望预测一个动力系统多远的未来。这正是为什么 3 天天气预报很准、10 天还不错、而两个月后的预报只剩该地区该时段的气候平均趋势。有些化学系统的李雅普诺夫时间短到只能预测几秒或几分钟,而某些天文系统虽然非线性且混沌,李雅普诺夫时间却长到能对数百万年做合理预测。他不知道金融市场的李雅普诺夫时间是多少,但既然数学功底深厚的专业分析师也频频大幅出错,他推测市场的李雅普诺夫时间很短,对预测质量构成了相当硬的上限。
-
vjk800(在金融业近十年):一批又一批数学 / CS 背景的人进入金融,一次又一次惊讶地发现金融时间序列其实无法预测。「随便扔个神经网络进去就搞定了」这种傲慢现在只让他觉得好笑。如果预测明天股价是容易的、甚至只要付出努力就可能的,那么做到的人会迅速成为亿万富翁乃至万亿富翁;而如果他能持续做到,最终会持有足够多的股票以致自己的行为影响价格,他发现的规律也就随之消失。金融市场不是那种无论谁观察都保持不变的自然现象,其动态会随全人类的集体行动持续变化。他举例:美国袭击伊朗时油价大幅变动,如果你要预测油价,你的模型就得能预测特朗普下令袭击伊朗——「你的模型里包含美国总统心智的完整模拟吗?(以及任何其他能影响世界事件的人?)如果没有,你的时间序列预测不会太好。」
-
thomasikzelf 分享了一段很有价值的实测经验:他做能源价格预测,神经网络仅凭历史数据就学会了早晚模式,效果很好。然后他试着加入风电、光伏等更多外部信息——这些因素对能源价格明显很重要,但没有一个带来任何改善。看起来市场已经把所有因素都消化进价格里了(本该如此)。他的结论是:市场数据的历史值往往就足以做出合理预测,只有别人没有(或没用过)的外部数据才能让你的预测优于市场。「做出与市场同等精度的预测:容易。做出比市场更精确的预测:极难。」
-
mjburgess 提了一个哲学层面的纠正:概率分布并不「生成」数据,它们是我们事后对生成过程之不确定性的描述,所以「是什么概率分布生成了这些数据」这个问题本身没有答案。而这种答案的缺席正是此类推断困难的核心——大多数情况下,根本不存在一个稳定的底层实在在「分发」什么东西。
-
smokel:文章几乎只谈点预测(point forecasting),但还有很多别的东西值得预测。比如预测某段限速 70mph 路段的平均车速,预测它是 69.8 还是 70.3 意义不大;真正相关的是预测车速何时会跌破拥堵阈值——但由于交通固有的混沌行为,那个确切时刻可能根本无法预测,于是对从业者更有用的是预测拥堵发生的概率。t0mpr1c3 接着说金融里同理,波动率之所以受关注是因为它关系到风险定价,资产类别间的相关性亦然;有趣的是市场波动往往伴随资产价格相关性上升(即安娜·卡列尼娜原则)——「当你最需要一个分散化的投资组合时,分散化恰恰最难实现。」
-
dcl:他得反复向管理层、高管和利益相关方解释这件事——机器学习模型在规则和动态不随时间变化的系统上表现极佳,而在很多你想要预测的领域里,一切都在变:法律、政策、监管、客户偏好、竞争对手行为。
-
giyanani 分享了正在实践文章结论的案例:他的工作是基于客户指标做故障检测,正在给时序数据打上国家、客户类型等公共特征标签,想法是通过类图搜索来找到外生变量,同时识别出那些「数据生成过程」相似、只是不同「实现」的序列。他们并不需要很好的预测,只要能快速检测大幅偏离。mr_toad 提醒他警惕安娜·卡列尼娜原则:表现正常的数据可能用同一组公共特征就能解释,但异常往往各有各的独特之处。
-
c7b:一大堆数学最后归结为「预测未来很难」——尤其当未来是社会建构出来的,这一点在文中略有失焦,预测行星运动比预测比特币容易得多。joe_the_user 为文章辩护:数学在这类情境中的目标恰恰是给「预测未来很难」这样的直觉印象提供解释,就像 NP 完全性为某些计算问题「难」给出了(非常局部的)解释,所以那套理论并不等于「说编程很难」。不过他也承认这篇文章的解释力还不够强。
-
ForceBru 提了个很实用的反向问题:有没有已知容易预测的真实世界时间序列,可以拿来当「当你的序列确实可预测、且模型确实做到了时,预测长什么样」的示例?