Python Statsmodel SARIMAX拟合值(';经季节性调整的';)看起来比真实数据早一个周期
我在使用Statmodel的SARIMAX函数对我拥有的数据系列进行季节性调整时遇到了一些问题。代码如下,但通常我的过程是在数据上测试各种SARIMA参数,选择AIC最低的参数,运行模型,然后获得拟合值。问题是,对于某些数据集,拟合值(经季节性调整)基本上看起来就像我的原始数据从一个周期向后移动。我有什么明显做错的吗Python Statsmodel SARIMAX拟合值(';经季节性调整的';)看起来比真实数据早一个周期,python,statsmodels,arima,Python,Statsmodels,Arima,我在使用Statmodel的SARIMAX函数对我拥有的数据系列进行季节性调整时遇到了一些问题。代码如下,但通常我的过程是在数据上测试各种SARIMA参数,选择AIC最低的参数,运行模型,然后获得拟合值。问题是,对于某些数据集,拟合值(经季节性调整)基本上看起来就像我的原始数据从一个周期向后移动。我有什么明显做错的吗 def seasonal_fit(data_to_fit, column_name): # finding sarima parameters p = d = q
def seasonal_fit(data_to_fit, column_name):
# finding sarima parameters
p = d = q = range(0, 2)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], 12)
for x in list(itertools.product(p, d, q))]
param_dict = []
keys = ['Parameters', 'Seasonal Parameters', 'AIC']
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
mod = sm.tsa.statespace.SARIMAX(data_to_fit, order=param,
seasonal_order=param_seasonal, enforce_stationarity=False, enforce_invertibility=False)
# , enforce_stationarity=False, enforce_invertibility=False)
results = mod.fit()
insert = [param, param_seasonal, results.aic]
param_dict.append(dict(zip(keys, insert)))
except:
continue
param_dict = pd.DataFrame(param_dict)
best_fit = param_dict.loc[param_dict['AIC'].idxmin()]
mod = sm.tsa.statespace.SARIMAX(data_to_fit,
order=(
best_fit['Parameters'][0], best_fit['Parameters'][1], best_fit['Parameters'][2]),
seasonal_order=(best_fit['Seasonal Parameters'][0], best_fit['Seasonal Parameters']
[1], best_fit['Seasonal Parameters'][2], best_fit['Seasonal Parameters'][3]), enforce_stationarity=False, enforce_invertibility=False)
results = mod.fit()
pdb.set_trace()
fitted_values = pd.DataFrame(results.fittedvalues)
如果有人无意中发现了这一点,我自己经过一番搜索后找到了答案。以下是其中一个来源()。基本上——ARIMA本质上是滞后的,它使用先验来预测未来。你必然会看到曲线向右移动x个周期,x是出现的差异数。学到的教训是,当你试图实现一些你不完全理解的东西时,当一些奇怪的事情发生时,不要感到惊讶