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

pmdarima.auto_arima中start_p与start_q参数设置未生效问题咨询

关于pmdarima auto_arima中start_p/start_q参数未生效的问题

问题场景

使用pmdarima的auto_arima方法寻找ARIMA最优参数时,期望p和q从1开始(而非默认0),最大值设为3,因此设置了start_p=1、start_q=1,但测试结果中仍出现了p=0或q=0的模型,怀疑参数未生效。

复现代码

import pandas as pd
import numpy as np
import pmdarima as pm
from statsmodels.tsa.arima.model import ARIMA

# 生成日期序列
dates = pd.date_range(start='2021-01-31', periods=16, freq='M')
# 生成随机数据
data = np.random.rand(16)
# 创建DataFrame
df = pd.DataFrame(data, index=dates, columns=['Value'])
pm.auto_arima(df['Value'], start_p=1, start_q=1, test='adf', max_p=3, max_q=3,
               seasonal=False, d=1, max_d=3, trace=True, error_action='ignore',
               suppress_warnings=True, stepwise=False)

输出结果

ARIMA(0,1,0)(0,0,0)[0] intercept   : AIC=18.978, Time=0.01 sec
 ARIMA(0,1,1)(0,0,0)[0] intercept   : AIC=inf, Time=0.02 sec
 ARIMA(0,1,2)(0,0,0)[0] intercept   : AIC=inf, Time=0.02 sec
 ARIMA(0,1,3)(0,0,0)[0] intercept   : AIC=inf, Time=0.02 sec
 ARIMA(1,1,0)(0,0,0)[0] intercept   : AIC=17.548, Time=0.01 sec
 ARIMA(1,1,1)(0,0,0)[0] intercept   : AIC=inf, Time=0.02 sec
 ARIMA(1,1,2)(0,0,0)[0] intercept   : AIC=inf, Time=0.03 sec
 ARIMA(1,1,3)(0,0,0)[0] intercept   : AIC=inf, Time=0.04 sec
 ARIMA(2,1,0)(0,0,0)[0] intercept   : AIC=18.669, Time=0.01 sec
 ARIMA(2,1,1)(0,0,0)[0] intercept   : AIC=inf, Time=0.04 sec
 ARIMA(2,1,2)(0,0,0)[0] intercept   : AIC=inf, Time=0.03 sec
 ARIMA(2,1,3)(0,0,0)[0] intercept   : AIC=inf, Time=0.04 sec
 ARIMA(3,1,0)(0,0,0)[0] intercept   : AIC=20.073, Time=0.01 sec
 ARIMA(3,1,1)(0,0,0)[0] intercept   : AIC=inf, Time=0.03 sec
 ARIMA(3,1,2)(0,0,0)[0] intercept   : AIC=inf, Time=0.04 sec

Best model:  ARIMA(1,1,0)(0,0,0)[0] intercept
Total fit time: 0.362 seconds
Out[13]: ARIMA(order=(1, 1, 0), scoring_args={}, suppress_warnings=True)

原因分析

当设置stepwise=False时,auto_arima会启用暴力搜索模式,遍历所有可能的p、q组合。此时start_p和start_q参数会被忽略,搜索范围自动变为从0到max_p/max_q的所有整数,因此会出现p=0或q=0的模型。

解决办法

方法1:使用默认的逐步搜索模式

移除stepwise=False参数(默认就是stepwise=True),此时start_p和start_q参数会生效,搜索会从指定的起始值开始,通过逐步筛选的方式寻找最优模型,不会遍历0值的情况。

修改后的调用代码:

pm.auto_arima(df['Value'], start_p=1, start_q=1, test='adf', max_p=3, max_q=3,
               seasonal=False, d=1, max_d=3, trace=True, error_action='ignore',
               suppress_warnings=True)

方法2:暴力搜索时手动指定参数范围

如果必须使用暴力搜索,可以手动生成所有符合要求的p、q组合(p从1到3,q从1到3),逐个拟合模型并比较AIC值来选出最优模型:

import itertools
from statsmodels.tsa.arima.model import ARIMA

# 指定p和q的范围
p_options = range(1, 4)
q_options = range(1, 4)

best_aic = float('inf')
best_order = None

# 遍历所有组合
for p, q in itertools.product(p_options, q_options):
    try:
        model = ARIMA(df['Value'], order=(p, 1, q))
        result = model.fit()
        # 更新最优模型
        if result.aic < best_aic:
            best_aic = result.aic
            best_order = (p, 1, q)
    except Exception as e:
        continue

print(f"最优模型参数: {best_order}, 对应AIC值: {best_aic:.3f}")

内容的提问来源于stack exchange,提问作者ah bon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:19:59