2016-12-24 4 views
-1

auto.arima를 사용하지만 Python으로 사용하고 싶습니다. 어떻게해야합니까?R 예측과 동등한 것 : auto.arima in Python

저는 여러 ARIMA 모델을 실행하여 예측 프로세스를 기본적으로 자동화하는 특정 기능 auto.arima를 요구하고 있습니다. 따라서 그것은 도서관 추천 정말 아니다 - 대신 때문에 (2 년 호전이 없었으며 이전 질문) 기존 statsmodel에 의해 troubleshooted 할 수있는 일이 더 위험 그것 - 나는 참조 https://www.otexts.org/fpp/8/7

질문

요청

이전 질문 R의 auto.arima() 함수는 ARIMA 모형을 얻었다 단위근 검정은 AICC 및 MLE 최소화를 결합 Hyndman 및 Khandakar 알고리즘의 변화를 이용 auto.arima() equivalent for python

에서이를 물었다. 알고리즘은이 단계를 따릅니다. 자동 ARIMA 모델링

The number of differences dd is determined using repeated KPSS tests. 

The values of pp and qq are then chosen by minimizing the AICc after differencing the data dd times. Rather than considering every possible combination of pp and qq, the algorithm uses a stepwise search to traverse the model space. 

(a) The best model (with smallest AICc) is selected from the following four: 

ARIMA(2,d,2), 
ARIMA(0,d,0), 
ARIMA(1,d,0), 
ARIMA(0,d,1). 

If d=0d=0 then the constant cc is included; if d≥1d≥1 then the constant cc is set to zero. This is called the "current model". 

(b) Variations on the current model are considered: 
    vary pp and/or qq from the current model by ±1±1; 
    include/exclude cc from the current model. 

The best model considered so far (either the current model, or one of these variations) becomes the new current model. 

(c) Repeat Step 2(b) until no lower AICc can be found. 

가능한 해결 방법

df=pd.read_csv("http://vincentarelbundock.github.io/Rdatasets/csv/datasets/AirPassengers.csv") 

# Define the p, d and q parameters to take any value between 0 and 2 
p = d = q = range(0, 2) 
print(p) 


import itertools 
import warnings 

# Generate all different combinations of p, q and q triplets 
pdq = list(itertools.product(p, d, q)) 
print(pdq) 

# Generate all different combinations of seasonal p, q and q triplets 
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))] 

print('Examples of parameter combinations for Seasonal ARIMA...') 
print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[1])) 
print('SARIMAX: {} x {}'.format(pdq[1], seasonal_pdq[2])) 
print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[3])) 
print('SARIMAX: {} x {}'.format(pdq[2], seasonal_pdq[4])) 
Examples of parameter combinations for Seasonal ARIMA... 
SARIMAX: (0, 0, 1) x (0, 0, 1, 12) 
SARIMAX: (0, 0, 1) x (0, 1, 0, 12) 
SARIMAX: (0, 1, 0) x (0, 1, 1, 12) 
SARIMAX: (0, 1, 0) x (1, 0, 0, 12) 

y=df 

#warnings.filterwarnings("ignore") # specify to ignore warning messages 

for param in pdq: 
    for param_seasonal in seasonal_pdq: 
     try: 
      mod = sm.tsa.statespace.SARIMAX(y, 
              order=param, 
              seasonal_order=param_seasonal, 
              enforce_stationarity=False, 
              enforce_invertibility=False) 

      results = mod.fit() 

      print('ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic)) 
     except: 
      continue 
ARIMA(0, 0, 0)x(0, 0, 1, 12)12 - AIC:3618.0303991426763 
ARIMA(0, 0, 0)x(0, 1, 1, 12)12 - AIC:2824.7439963684233 
ARIMA(0, 0, 0)x(1, 0, 0, 12)12 - AIC:2942.2733127230185 
ARIMA(0, 0, 0)x(1, 0, 1, 12)12 - AIC:2922.178151133141 
ARIMA(0, 0, 0)x(1, 1, 0, 12)12 - AIC:2767.105066400224 
ARIMA(0, 0, 0)x(1, 1, 1, 12)12 - AIC:2691.233398643673 
ARIMA(0, 0, 1)x(0, 0, 0, 12)12 - AIC:3890.816777796087 
ARIMA(0, 0, 1)x(0, 0, 1, 12)12 - AIC:3541.1171286722 
ARIMA(0, 0, 1)x(0, 1, 0, 12)12 - AIC:3028.8377323188824 
ARIMA(0, 0, 1)x(0, 1, 1, 12)12 - AIC:2746.77973129136 
ARIMA(0, 0, 1)x(1, 0, 0, 12)12 - AIC:3583.523640623017 
ARIMA(0, 0, 1)x(1, 0, 1, 12)12 - AIC:3531.2937768990187 
ARIMA(0, 0, 1)x(1, 1, 0, 12)12 - AIC:2781.198675746594 
ARIMA(0, 0, 1)x(1, 1, 1, 12)12 - AIC:2720.7023088205974 
ARIMA(0, 1, 0)x(0, 0, 1, 12)12 - AIC:3029.089945668332 
ARIMA(0, 1, 0)x(0, 1, 1, 12)12 - AIC:2568.2832251221016 
ARIMA(0, 1, 0)x(1, 0, 0, 12)12 - AIC:2841.315781459511 
ARIMA(0, 1, 0)x(1, 0, 1, 12)12 - AIC:2815.4011044132576 
ARIMA(0, 1, 0)x(1, 1, 0, 12)12 - AIC:2588.533386513587 
ARIMA(0, 1, 0)x(1, 1, 1, 12)12 - AIC:2569.9453272483315 
ARIMA(0, 1, 1)x(0, 0, 0, 12)12 - AIC:3327.5177587522303 
ARIMA(0, 1, 1)x(0, 0, 1, 12)12 - AIC:2984.716706112334 
ARIMA(0, 1, 1)x(0, 1, 0, 12)12 - AIC:2789.128542154043 
ARIMA(0, 1, 1)x(0, 1, 1, 12)12 - AIC:2537.0293659293943 
ARIMA(0, 1, 1)x(1, 0, 0, 12)12 - AIC:2984.4555708516436 
ARIMA(0, 1, 1)x(1, 0, 1, 12)12 - AIC:2939.460958374472 
ARIMA(0, 1, 1)x(1, 1, 0, 12)12 - AIC:2578.7862352774437 
ARIMA(0, 1, 1)x(1, 1, 1, 12)12 - AIC:2537.771484229265 
ARIMA(1, 0, 0)x(0, 0, 0, 12)12 - AIC:3391.5248913820797 
ARIMA(1, 0, 0)x(0, 0, 1, 12)12 - AIC:3038.142074281268 
C:\Users\Dell\Anaconda3\lib\site-packages\statsmodels\base\model.py:496: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals 
    "Check mle_retvals", ConvergenceWarning) 
ARIMA(1, 0, 0)x(0, 1, 0, 12)12 - AIC:2839.809192263449 
ARIMA(1, 0, 0)x(0, 1, 1, 12)12 - AIC:2588.50367175184 
ARIMA(1, 0, 0)x(1, 0, 0, 12)12 - AIC:2993.4630440139595 
ARIMA(1, 0, 0)x(1, 0, 1, 12)12 - AIC:2995.049216326931 
ARIMA(1, 0, 0)x(1, 1, 0, 12)12 - AIC:2588.2463284315304 
ARIMA(1, 0, 0)x(1, 1, 1, 12)12 - AIC:2592.80110502723 
ARIMA(1, 0, 1)x(0, 0, 0, 12)12 - AIC:3352.0350133621478 
ARIMA(1, 0, 1)x(0, 0, 1, 12)12 - AIC:3006.5493366627807 
ARIMA(1, 0, 1)x(0, 1, 0, 12)12 - AIC:2810.6423724894516 
ARIMA(1, 0, 1)x(0, 1, 1, 12)12 - AIC:2559.584031948852 
ARIMA(1, 0, 1)x(1, 0, 0, 12)12 - AIC:2981.2250436794675 
ARIMA(1, 0, 1)x(1, 0, 1, 12)12 - AIC:2959.3142304724834 
ARIMA(1, 0, 1)x(1, 1, 0, 12)12 - AIC:2579.8245645892207 
ARIMA(1, 0, 1)x(1, 1, 1, 12)12 - AIC:2563.13922589258 
ARIMA(1, 1, 0)x(0, 0, 0, 12)12 - AIC:3354.7462930846423 
ARIMA(1, 1, 0)x(0, 0, 1, 12)12 - AIC:3006.702997636003 
ARIMA(1, 1, 0)x(0, 1, 0, 12)12 - AIC:2809.3844175191666 
ARIMA(1, 1, 0)x(0, 1, 1, 12)12 - AIC:2558.484602766447 
ARIMA(1, 1, 0)x(1, 0, 0, 12)12 - AIC:2959.885810636943 
ARIMA(1, 1, 0)x(1, 0, 1, 12)12 - AIC:2960.712709764296 
ARIMA(1, 1, 0)x(1, 1, 0, 12)12 - AIC:2557.945907092698 
ARIMA(1, 1, 0)x(1, 1, 1, 12)12 - AIC:2559.274166458508 
ARIMA(1, 1, 1)x(0, 0, 0, 12)12 - AIC:3326.3285511700374 
ARIMA(1, 1, 1)x(0, 0, 1, 12)12 - AIC:2985.868532151721 
ARIMA(1, 1, 1)x(0, 1, 0, 12)12 - AIC:2790.7677149967103 
ARIMA(1, 1, 1)x(0, 1, 1, 12)12 - AIC:2538.820635541546 
ARIMA(1, 1, 1)x(1, 0, 0, 12)12 - AIC:2963.2789505804294 
ARIMA(1, 1, 1)x(1, 0, 1, 12)12 - AIC:2941.2436984747465 
ARIMA(1, 1, 1)x(1, 1, 0, 12)12 - AIC:2559.8258191422606 
ARIMA(1, 1, 1)x(1, 1, 1, 12)12 - AIC:2539.712354465328 
+2

이 질문은 (a) 지적했듯이 중복이고 (b) 스택 오버플로에서 라이브러리 권장 사항과 같은 리소스를 요청할 수 없기 때문에이 질문은 두 가지 문제가 있습니다. –

+1

여러 ARIMA 모델을 실행하여 예측 프로세스를 기본적으로 자동화하는 특정 기능인 auto.arima를 묻습니다. 따라서 실제로 라이브러리 권장 사항이 아닙니다. 대신 기존 statsmodel로 문제를 해결할 수있는 것 (그리고 이전 질문은 2 년 후에 개선되지 않았습니다)이 위험 할 수 있습니다. - 질문에 답했습니다. –

+1

Ok 귀하의 질문에 다음 –

답변

2

간단한 해결책은 파이썬에서 R 함수를 호출하는 것입니다에 대한 Hyndman-Khandakar 알고리즘. 이를 수행하는 한 가지 방법은 인터페이스 rpy2을 사용하는 것입니다. repo는 here입니다.