Python Statsmodel SARIMAX拟合值(';经季节性调整的';)看起来比真实数据早一个周期

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

我在使用Statmodel的SARIMAX函数对我拥有的数据系列进行季节性调整时遇到了一些问题。代码如下,但通常我的过程是在数据上测试各种SARIMA参数,选择AIC最低的参数,运行模型,然后获得拟合值。问题是,对于某些数据集,拟合值(经季节性调整)基本上看起来就像我的原始数据从一个周期向后移动。我有什么明显做错的吗

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是出现的差异数。学到的教训是,当你试图实现一些你不完全理解的东西时,当一些奇怪的事情发生时,不要感到惊讶