簡體   English   中英

如何在Python statsmodels ARIMA預測中反轉差異?

[英]How to invert differencing in a Python statsmodels ARIMA forecast?

我正試圖用Python和Statsmodels來圍繞ARIMA預測。 具體而言,為了使ARIMA算法起作用,需要通過差分(或類似方法)使數據靜止。 問題是:在進行剩余預測后,如何在差異化之后反轉差異,以回歸預測,包括趨勢和季節性差異?

(我在這里看到了一個類似的問題但是唉,沒有發布任何答案。)

這是我到目前為止所做的事情(基於掌握Python數據分析的最后一章中的例子,Magnus Vilhelm Persson; Luiz Felipe Martins)。 數據來自DataMarket

%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels import tsa 
from statsmodels.tsa import stattools as stt 
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima_model import ARIMA 

def is_stationary(df, maxlag=15, autolag=None, regression='ct'): 
    """Test if df is stationary using Augmented 
    Dickey Fuller""" 

    adf_test = stt.adfuller(df,maxlag=maxlag, autolag=autolag, regression=regression) 
    adf = adf_test[0]
    cv_5 = adf_test[4]["5%"]

    result = adf < cv_5    
    return result

def d_param(df, max_lag=12):
    d = 0
    for i in range(1, max_lag):
        if is_stationary(df.diff(i).dropna()):
            d = i
            break;
    return d

def ARMA_params(df):
    p, q = tsa.stattools.arma_order_select_ic(df.dropna(),ic='aic').aic_min_order
    return p, q

# read data
carsales = pd.read_csv('data/monthly-car-sales-in-quebec-1960.csv', 
                   parse_dates=['Month'],  
                   index_col='Month',  
                   date_parser=lambda d:pd.datetime.strptime(d, '%Y-%m'))
carsales = carsales.iloc[:,0] 

# get components
carsales_decomp = seasonal_decompose(carsales, freq=12)
residuals = carsales - carsales_decomp.seasonal - carsales_decomp.trend 
residuals = residuals.dropna()

# fit model
d = d_param(carsales, max_lag=12)
p, q = ARMA_params(residuals)
model = ARIMA(residuals, order=(p, d, q)) 
model_fit = model.fit() 

# plot prediction
model_fit.plot_predict(start='1961-12-01', end='1970-01-01', alpha=0.10) 
plt.legend(loc='upper left') 
plt.xlabel('Year') 
plt.ylabel('Sales')
plt.title('Residuals 1960-1970')
print(arimares.aic, arimares.bic)  

由此產生的情節令人滿意,但不包括趨勢,季節性信息。 如何反轉差分以重新獲得趨勢/季節性? 剩余情節

當時間趨勢(或多個)可能是更好的策略時,依賴於差異。 期間33是一個異常值,如果你忽略它,它就會產生后果。

PACF沒有顯示出強烈的季節性成分。 在此輸入圖像描述

3月,4月,5月和6月的季節性AR較弱,相關性較強。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM