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
相关产品推荐
相关产品推荐

