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

Python新手求教:如何将ARIMA模型测试结果存入DataFrame

解决ARIMA结果存入DataFrame的问题

嘿,我完全懂你作为Python新手的困惑!把循环里跑出来的SARIMAX模型结果整理成规整的DataFrame确实需要点小技巧,我来一步步带你实现~

核心思路

我们先创建一个空列表,每次循环拟合完模型后,把需要的参数、指标(比如AIC)打包成字典存入列表,等所有循环跑完,再把整个列表转换成DataFrame就行啦。

完整代码实现

下面是整合你原有代码后的完整版本,我加了详细的注释:

import pandas as pd
import statsmodels.api as sm

# 先确认你已经定义了参数组合(这里给个示例,你替换成自己的pdq和seasonal_pdq就行)
pdq = [(0,1,0), (0,1,1), (1,1,0), (1,1,1)]
seasonal_pdq = [(0,1,0,12), (0,1,1,12), (1,1,0,12)]

# 初始化空列表,用来存储每一组模型的结果
model_results = []

for param in pdq:
    for param_seasonal in seasonal_pdq:
        try:
            # 拟合SARIMAX模型(和你原来的代码一致)
            mod = sm.tsa.statespace.SARIMAX(
                df_month.Weighted_Price_box,
                order=param,
                seasonal_order=param_seasonal,
                enforce_stationarity=False,
                enforce_invertibility=False
            )
            results = mod.fit()
            
            # 把当前模型的关键信息存入字典
            model_info = {
                'ARIMA阶数': param,
                '季节性阶数': param_seasonal,
                'AIC值': round(results.aic, 2),
                'BIC值': round(results.bic, 2),  # 可选,如果你需要BIC指标的话
                'HQIC值': round(results.hqic, 2)  # 可选,另一种模型选择指标
            }
            
            # 将字典加入列表
            model_results.append(model_info)
            
            # 保留你原来的打印语句,方便实时查看进度
            print(f'ARIMA{param}x{param_seasonal}12 - AIC:{results.aic:.2f}')
            
        except Exception as e:
            # 捕捉拟合失败的情况,避免循环中断
            print(f'参数组合 {param}x{param_seasonal} 拟合出错: {str(e)}')
            continue

# 把列表转换成DataFrame
results_df = pd.DataFrame(model_results)

# 实用小技巧:按AIC值从小到大排序,快速找到最优模型
results_df = results_df.sort_values(by='AIC值', ascending=True).reset_index(drop=True)

# 查看最终整理好的结果
print("整理后的模型结果:")
print(results_df.head())

关键细节说明

  • 用字典存储单组结果:字典的键会自动成为DataFrame的列名,这样结构更清晰,后续也方便筛选。
  • 异常处理:加try-except是为了避免某些参数组合拟合失败时,整个循环直接中断,保证所有有效参数都能跑完。
  • 排序优化:按AIC从小到大排序后,最上面的就是拟合效果相对最优的模型(AIC越小,模型拟合优度越高)。

扩展玩法(可选)

如果需要存储更多模型细节,比如拟合的系数、残差统计量,可以在model_info字典里加这些内容:

model_info = {
    # 原有字段...
    '拟合系数': results.params.to_dict(),  # 把系数转成字典存入
    '残差均值': round(results.resid.mean(), 4),
    '残差标准差': round(results.resid.std(), 4)
}

这样你就能在DataFrame里看到更全面的模型信息啦!

内容的提问来源于stack exchange,提问作者Garbar Oleksandr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:58:16