You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Auto ARIMA处理多时间序列遇ValueError,求解决及批量建模方案

时间序列Auto ARIMA报错与多序列建模问题

问题背景

我有一个109行96列的时间序列DataFrame,尝试循环每列运行Auto ARIMA获取模型参数时,出现如下报错:

ValueError: Encountered exception in stationarity test ('adf'). This can occur in seasonal settings when a large enough m coupled with a large enough D difference the training array into too few samples for OLS (input contains 109 samples). Try fitting on a larger training size (raised from LinAlgError: Singular matrix)

使用的代码如下:

series = df_main_scaled.columns    
for col in series:
    print("Auto Arima for : ",{col})
    model = pm.auto_arima(df[col], start_p=1, start_q=1,
                        test='adf',
                        max_p=4, max_q=4,
                        m=1,             
                        d=None,          
                        trace=True,
                        error_action='ignore',  
                        suppress_warnings=True, 
                        stepwise=True)
    print(model.aic())
    model.summary()

疑问:

  1. 改为基于序列而非DataFrame建模是否可行?
  2. 若可行,如何基于全部数据而非逐列建模?

问题解答

1. 基于序列而非DataFrame建模的可行性

完全可行。pm.auto_arima(pmdarima库的方法)本身就是为单变量时间序列设计的,你之前的循环逐列操作,本质就是把DataFrame的每一列当作独立序列来建模,两者逻辑一致,不存在技术障碍。

2. 基于全部数据而非逐列建模的实现

这里的“基于全部数据”指多变量时间序列建模,但pm.auto_arima仅支持单变量ARIMA模型。如果要同时利用所有列的信息建模,有两种可行思路:

思路一:单变量模型结合外部协变量

如果有明确的目标列,其他列作为辅助输入(外部协变量),可以通过pm.auto_arima的exogenous参数传入其余列数据,示例代码:

# 假设第1列是目标变量,剩余列为协变量
target_series = df_main_scaled.iloc[:, 0]
exogenous_vars = df_main_scaled.iloc[:, 1:]

model = pm.auto_arima(target_series, exogenous=exogenous_vars,
                      start_p=1, start_q=1,
                      test='adf',
                      max_p=4, max_q=4,
                      m=1,             
                      d=None,          
                      trace=True,
                      error_action='ignore',  
                      suppress_warnings=True, 
                      stepwise=True)

这种方式以单变量预测为核心,其他变量作为补充信息,适合有明确预测目标的场景。

思路二:使用多变量时间序列模型

如果需要同时分析所有变量的相互滞后关系,可以用VAR(向量自回归)模型,示例代码(基于statsmodels库):

import statsmodels.api as sm
from statsmodels.tsa.vector_ar.var_model import VAR

# VAR模型要求数据平稳,可先做ADF检验或差分处理
model = VAR(df_main_scaled)
# 自动选择最优滞后阶数
lag_order = model.select_order(maxlags=4)
print(lag_order.summary())
# 拟合模型
var_model = model.fit(lag_order.selected_orders['aic'])
# 查看模型结果
print(var_model.summary())

VAR模型会同时建模所有变量的滞后关联,适合无单一目标、需要分析变量间相互影响的场景。


原报错的额外解决建议

原报错是因为ADF检验时,自动差分后的样本量过少导致OLS矩阵奇异,可尝试:

  • 手动指定d值(如d=0或d=1),跳过自动ADF检验,避免过度差分;
  • 减小max_p/max_q的取值,降低模型复杂度,减少计算所需样本量;
  • 若业务允许,补充更多时间序列样本数据。

内容的提问来源于stack exchange,提问作者A Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:31:06