ARIMA.fit()报错TypeError:意外的关键字参数'trend'问题求助
ARIMA.fit() 报TypeError:意外关键字参数'trend'的原因与解决办法
问题场景
运行Python代码时触发TypeError,提示ARIMA.fit()收到意外的关键字参数'trend',但参考视频中相同代码可正常运行。
完整代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings("ignore") file_path = '/Users/doyeongpark/Downloads/BTCprice.csv' bitcoin_df = pd.read_csv(file_path, names = ['day', 'price']) bitcoin_df.tail() bitcoin_df['day'] = pd.to_datetime(bitcoin_df['day']) bitcoin_df.index = bitcoin_df['day'] bitcoin_df.set_index('day', inplace=True) bitcoin_df.head() bitcoin_df.describe() from statsmodels.tsa.arima.model import ARIMA import statsmodels.api as sm model = ARIMA(bitcoin_df.price.values, order=(2,1,2)) model_fit = model.fit(trend = 'c',full_output = True, disp = True) print(model_fit.summary())
错误信息
TypeError: ARIMA.fit() got an unexpected keyword argument 'trend'
原因分析
- statsmodels版本差异:旧版ARIMA(导入路径为
statsmodels.tsa.arima_model.ARIMA)的fit()方法支持trend、full_output、disp等参数;但在statsmodels新版本中,ARIMA类被重构并移至statsmodels.tsa.arima.model.ARIMA,trend参数被调整到模型初始化阶段传入,fit()方法不再接收该参数,同时full_output、disp也被移除或替换(disp被verbose替代)。视频中使用的是旧版接口,而当前使用的是新版接口,导致参数不兼容。
解决办法
方案1:适配新版statsmodels接口(推荐)
将trend参数移至ARIMA模型初始化时传入,同时替换过时参数:
from statsmodels.tsa.arima.model import ARIMA # 初始化模型时传入trend参数 model = ARIMA(bitcoin_df.price.values, order=(2,1,2), trend='c') # 使用新版支持的verbose参数替代disp model_fit = model.fit(verbose=True) print(model_fit.summary())
方案2:回退到旧版ARIMA接口
如果需要和视频代码完全一致,可以导入旧版ARIMA类(注意:旧版已被标记为弃用,未来版本可能被移除):
# 导入旧版ARIMA from statsmodels.tsa.arima_model import ARIMA model = ARIMA(bitcoin_df.price.values, order=(2,1,2)) model_fit = model.fit(trend='c', full_output=True, disp=True) print(model_fit.summary())
内容的提问来源于stack exchange,提问作者Eno Park
相关产品推荐
相关产品推荐

