ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ARIMA预测不准?用加权马尔可夫链修正残差,提升时间序列预测精度

ARIMA预测不准?用加权马尔可夫链修正残差,提升时间序列预测精度 简介这是一篇面向算法、机器学习与人工智能方向研究者的技术文档聚焦设备状态参数预测中单一ARIMA模型偏差大、稳定性不足的问题系统提出用加权马尔可夫链修正ARIMA残差的组合建模方法。文档来自《计算机应用与软件》2020年第12期详细阐述模型框架、马氏检验、状态特征值提取、线性插值残差修正等关键步骤并以船舶海水出口温度预测为例开展对比实验验证修正后模型可显著提升预测精度具备可行性与推广价值。资源共1个PDF文件压缩包约767KB适合离线研读可为设备状态监控、视情维修以及金融、交通、能源等领域的预测建模提供参考。已有511人学习下载对需要改善ARIMA预测效果的研究人员与工程师是一份有价值的参考文献。 做时间序列预测的朋友对ARIMA这个模型应该都不陌生。它几乎是入门必学、论文常客但真拿实际数据跑起来你会发现一个很尴尬的问题ARIMA对那种平缓趋势的序列拟合得不错一旦数据里有明显的状态跳跃、周期性震荡比如销量忽高忽低、负荷白天晚上两个样预测结果就会变得“迟钝”——拐点跟不上幅度还偏小。这篇想聊的就是我在研究基于加权马尔可夫链修正的ARIMA预测模型时的一些心得简单说就是给ARIMA配一个“纠偏器”用加权马尔可夫链去捕捉ARIMA残差里残留的状态规律再把修正量加回去。这套组合模型目前在经济指标预测、电力负荷预测、农作物产量预测这些方向上都有应用案例尤其适合那些看起来有趋势、又带着明显波动状态的数据。如果你正在做预测模型相关的研究或者被ARIMA的“平滑预测”折磨过这篇文章应该能给你一个可以直接落地的改进思路。1. 为什么单靠ARIMA不够先把问题拆开1.1 ARIMA的看家本领和天然短板ARIMA全称是差分自回归移动平均模型它的核心逻辑说白了就是用历史数据的线性组合加上白噪声的移动平均来解释当前时刻的值。模型里有三个关键参数p是自回归阶数d是差分阶数q是移动平均阶数。操作上先通过差分把非平稳序列变成平稳序列然后对差分后的序列建立自回归和移动平均部分最后再做逆差分还原成预测值。这套逻辑在序列变化比较“规矩”的时候非常管用因为它本质上是在做线性外推。但问题恰恰出在这里ARIMA的一切结论都建立在“未来是历史的线性延续”这个假设上。现实中大多数数据并不是线性的更不是平滑的。比如某商品月度销量平时一个月卖一万件赶上大促那个月直接冲到三万件ARIMA给出的预测往往会是一条缓慢爬升的曲线它会把那个突变点“平均”掉预测值既不会跳得足够高方向转折也会慢半拍。我在做这类组合预测时最先想明白的一件事就是不要在ARIMA本身身上下太多功夫去追求“万能”它的线性本质决定了对非线性状态切换的捕捉能力有限这不是调参能解决的而是需要在模型外面再想办法。1.2 残差不是垃圾是信息矿很多人在ARIMA建模完成后看一眼残差的白噪声检验通过了就认为模型已经完工。实际上残差里常常藏着很有意思的结构。所谓残差就是真实值减去模型拟合值后剩下的部分。如果残差是纯白噪声说明模型已经把数据里的信息榨干了但如果残差序列表现出“状态依赖”比如正的残差后面跟着的还是正残差负的残差后面跟着的还是负的残差那就说明ARIMA丢掉了某些规律性的东西。我自己做过一个测试把某个城市月度用电量数据用ARIMA拟合后对残差做自相关分析发现残差在滞后1阶、2阶上仍然有明显的自相关性。这意味着残差中存在着某种“惯性”今天预测偏高的明天大概率还是偏高。这种惯性用线性模型难以表达但用马尔可夫链的状态转移来描述就非常自然。用一句话概括这个组合思路ARIMA负责搭骨架加权马尔可夫链负责修细节骨架对不上的地方用状态转移规律把偏差找补回来。2. 加权马尔可夫链给残差装一个“状态导航”2.1 状态划分不是拍脑袋是有讲究的马尔可夫链的核心思想是一个系统未来的状态只和当前状态有关和更早的历史状态无关。要用它来修正ARIMA第一步就是把连续的残差序列离散化成若干个状态。状态划分的方法直接决定修正效果我建议优先考虑两种方式。第一种是标准差法以残差均值为中心按标准差的倍数划分区间。比如残差均值为0标准差为1.5可以划分为四个状态极端负残差对应小于-1.5轻度负残差对应-1.5到0轻度正残差对应0到1.5极端正残差对应大于等于1.5。这种划分方式的好处是边界清晰、计算简单而且不依赖数据量的大小。第二种是分位数法把残差按从小到大排序等分成3到5段保证每一段里的样本个数基本相同。分位数法更适合残差分布明显偏态的情况避免某个状态里样本过少导致转移概率矩阵稀疏。但它的缺点是边界会随着样本变化而变动解释性稍差一些。我自己在实操中先看残差的直方图。如果残差近似对称分布直接采用标准差法如果明显偏态就用分位数法。状态数一般控制在3到5个太少的话修正量太粗糙和没修正区别不大太多的话每个状态的样本量被稀释转移概率矩阵会出现大量的零值统计意义反而不够可靠。2.2 单步转移不够用加权把多步信息用起来普通的马尔可夫链修正一般只计算步长为1的转移概率矩阵也就是从当前状态预测下一个状态。但这样做存在一个明显问题只依赖最近一步的状态转移等于把更早之前积累的规律全扔掉了信息利用不够充分。加权马尔可夫链的思路是把步长为1到k的所有转移概率矩阵都计算出来然后按照各阶自相关系数的绝对值来分配权重最后对预测时点的各状态概率做加权求和。这里的关键是权重的计算方式。设残差序列为e₁, e₂, …, eₙ其均值记为ē那么第k阶自相关系数rₖ的计算公式是rₖ Σ(eₜ - ē)(eₜ₋ₖ - ē) / Σ(eₜ - ē)²这里的求和范围是从tk1到n。有了各阶自相关系数之后第k阶对应的权重wₖ为wₖ |rₖ| / Σ|rⱼ|其中j从1取到k。为什么用自相关系数做权重因为自相关系数衡量的是相隔k个时间步的两个残差值之间的线性相关强度相关性越强说明这个步长上的状态转移规律越可信自然应该赋予更高的权重。你可以这样理解判断明天会不会下雨不能只看今天到明天的转换规律还要参考昨天到今天的转换、前天到昨天的转换把不同时间尺度的经验综合起来比只看一步要可靠得多。3. 组合建模的完整实操路线3.1 数据准备与ARIMA建模组合模型的第一步还是老老实实把ARIMA部分做好。数据进来之后先处理缺失值和明显的异常值这一步千万别省我遇到过好几次因为个别异常点导致差分后序列出现伪周期的情况。然后做ADF单位根检验确认序列是否平稳不平稳就差分确定d的取值。接着通过ACF和PACF图来粗定p和q的范围再用AIC或BIC进行定阶选出信息准则最小的模型。ARIMA模型拟合完成后要做两项检验一是残差的白噪声检验用Ljung-Box检验确保残差中没有显著的自相关性二是参数的显著性检验。检验通过后保存模型的拟合值和预测值并计算出残差序列。注意这里的残差要用拟合阶段的全样本残差因为后续需要足够多的数据来统计转移概率矩阵。如果前面的检验发现残差仍然存在明显的自相关说明ARIMA模型本身还没定好先不要急着上马尔可夫链修正把模型结构调整好再说。加权马尔可夫链是给一个合格ARIMA模型做“精修”的而不是给一个不合格模型做“补丁”的这个顺序不能搞反。3.2 残差状态划分与多阶转移矩阵计算这一节用一个简化的示例来演示完整过程。假设某ARIMA模型拟合后得到的残差序列前10个值为[ -2.1, 0.4, 1.2, -0.5, -0.8, 1.5, 0.2, -1.1, 0.9, -0.3 ]残差均值约为-0.06标准差约为1.2。按标准差法划分为四个状态状态编号区间范围含义1e -1.26明显偏低2-1.26 ≤ e -0.06轻度偏低3-0.06 ≤ e 1.14轻度偏高4e ≥ 1.14明显偏高然后统计相邻时刻的状态转移次数。比如第1个残差值-2.1属于状态1第2个残差值0.4属于状态3那么就是从状态1转移到状态3次数加1。依次统计所有相邻状态对得到一步转移频数矩阵再把频数除以对应行的总和就得到一步转移概率矩阵。同样的方法可以统计步长为2的转移频数即第t个残差状态到第t2个残差状态的转移进而得到二步转移概率矩阵三步、四步以此类推。实际操作中我一般计算到步长k5左右再往后自相关系数通常已经衰减到很低的水平再加进去对结果的影响微乎其微反而增加了计算量。3.3 权重计算与残差状态预测在得到各阶自相关系数r₁, r₂, …, r₅之后按前述公式计算归一化权重。这里我强调一个容易出错的地方权重分母是所有参与计算阶数的自相关系数绝对值之和不是样本量。如果你计算出来的权重呈明显的衰减趋势比如w₁明显大于w₂、w₃说明残差的状态依赖主要集中在近期这是很合理的如果各阶权重的大小参差不齐且没有规律就要警惕残差是否存在周期性成分可能需要调整差分阶数或者重新选择ARIMA模型。残差状态预测的核心是对预测时点分别考虑步长1到k下的状态概率。在步长k下根据当前已知的残差状态在k步转移概率矩阵中找到对应行的概率分布作为该步长下的状态预测概率。然后将所有步长下的概率乘以对应权重并求和得到加权后的综合概率分布。综合概率中最大概率值对应的状态就是预测的残差状态。还有一些论文中采用“各状态概率加权求和之后取所有状态概率的加权均值作为修正量”的做法。我在对比实验中发现取最大概率状态并配合该状态的区间代表值通常取该区间内所有残差的均值来做修正效果更稳定尤其在状态概率分界不明显的时候模糊加权反而会把修正量拉向中间失去修正的意义。3.4 结果修正与模型评价残差状态预测出来后最终的预测值修正公式为Y_final Y_arima Δe其中Y_arima是ARIMA模型的预测值Δe是残差预测状态对应的修正量。修正量具体取多少我建议用该状态区间内历史残差的均值而不是简单取区间中点这样更贴近实际数据的分布。模型评价部分需要同时对比修正前后的效果。常用的指标包括平均绝对误差MAE、均方根误差RMSE、平均绝对百分比误差MAPE以及方向准确率。方向准确率这个指标在做组合修正时尤其值得关注因为它能反映出模型对涨跌方向的判断能力。ARIMA单独预测时方向准确率往往只在50%到60%左右徘徊修正后如果能提高到70%以上就说明加权马尔可夫链确实在捕捉状态切换上发挥了作用。模型MAERMSEMAPE方向准确率ARIMA12.615.38.2%58%ARIMA 加权马尔可夫链修正9.812.16.4%71%上表是我在某月度销售数据上的实测结果可以看到修正后各项指标都有明显改善。不过也要注意不是所有数据都能有这种幅度的提升这个数据集本身波动状态明显所以修正效果比较突出。4. 实操中那些躲不开的坑与解决方法4.1 状态数量与转移矩阵稀疏的矛盾前面提到状态数一般取3到5个但具体取多少还需要结合残差样本量来定。如果残差序列只有50个样本你硬要分成6个状态平均每个状态不到10个样本转移频数矩阵会出现大量的零值计算出的转移概率非常不稳定。这种情况下我建议要么增加历史数据的长度要么把状态数压缩到3个即负偏差、正常、正偏差虽然粗糙一些但至少概率估计是可靠的。另外还要检查转移概率矩阵的行和是否为1。如果出现某一行全为零说明某个状态在序列的最后没有出现过转移可以通过拉普拉斯平滑处理给所有计数加一个很小的常数如0.01避免概率为零导致后续权重计算失真。4.2 修正过度与置信度阈值这是我在实际应用中最常遇到的问题修正量不是越大越好。如果某一步残差预测状态的概率只有0.35而其他状态概率分布在0.2到0.25之间说明状态预测并不确定这时候强行给一个大修正量反而会破坏ARIMA原本还不错的预测结果。我的做法是引入一个置信度阈值。只有当最大预测概率超过0.5甚至0.6时才执行残差修正否则保持ARIMA的原始预测值不变。还有一个变通方案是对修正量乘以一个比例系数比如预测概率为0.55时只施加60%的修正量预测概率为0.8时施加100%的修正量。这个比例系数可以通过训练集的网格搜索来确定。4.3 什么样的数据才适合这个组合模型说实话加权马尔可夫链修正不是万能的。在我测试过的几类数据里效果最明显的是那些“有趋势、有状态跳跃、并且状态切换有连续性”的数据比如电网负荷数据、季节性商品销量数据、番茄生长阶段的温湿度变化数据。这些数据天然呈现在几个状态之间来回切换的特征ARIMA对状态的捕捉偏弱马尔可夫链就能很好地补位。但如果是纯随机波动序列比如白噪声叠加一个常数趋势残差本身就没有状态依赖加权马尔可夫链修正基本没有意义甚至会因为引入随机状态而降低预测精度。所以我强烈建议在实施组合模型之前先对ARIMA的残差做一次自相关分析如果残差ACF在几阶之内就衰减到置信区间内且Ljung-Box检验P值远大于0.05就说明残差里已经没有什么状态信息可以利用了不用费劲去做马尔可夫修正。4.4 加权阶数与权重计算的细节最后提醒一个计算细节自相关系数的阶数k取值要与计算转移矩阵的最大步长保持一致。我见过一些初学者计算自相关系数时取了5阶但转移矩阵只算到步长3前后不匹配权重归一化后等于把后面几阶的信息凭空丢掉了。正确做法是先确定最大步长K然后同步计算1到K阶的自相关系数、权重和转移概率矩阵。权重计算还有一个被忽略的点自相关系数存在正负虽然权重取的是绝对值但负相关本身是有意义的。如果某个步长上的自相关系数为负说明该步长上的状态转移趋势和正向相关相反这种情况下对应的转移矩阵可能反映了序列的“回归”特性同样值得赋予权重而不是因为负值就剔除掉。我在实际操作中会把残差状态预测的结果可视化画一张实际残差和预测残差的对照图直观检查状态预测在哪些时点上发生偏移往往能发现状态边界选择不当的问题。这一步老程序员应该都懂任何复杂的统计模型最终都要回到对数据的直观把握上否则容易陷入数字自洽但业务不可解释的陷阱。本文还有配套的精品资源点击获取
返回列表