Python에서 ARIMA 및 SARIMA 모델링에 대한 간략한 소개

시계열 분석은 시장 가치 변화와 같은 미래 이벤트를 예측하는 데 유용한 도구입니다. ARIMA 및 SARIMA는 시계열 분석을위한 훌륭한 도구입니다. '긴'형식의 데이터가 필요합니다. 이것은 각 데이터 포인트가 시간과 연관되는 데이터 포인트의 모음 (바람직하게는 pandas 데이터 프레임)을 의미합니다 (pandas에서는 인덱스를 형성하는 시간이 다른 시리즈 일 것입니다). ARIMA는 자동 회귀 통합 이동 평균을 나타냅니다. SARIMAX는 유사하며 외인성 요인이있는 계절적 자동 회귀 통합 이동 평균을 나타냅니다. 이 블로그 게시물에서는 이러한 기술이 작동하는 방식과 파이썬에서 사용하는 쉬운 방법을 설명합니다. 또한 AIC (Akaike 정보 기준)를 사용하여 모델을 평가하는 방법을 보여줍니다.

먼저 자동 회귀가 무엇을 의미하는지 설명하겠습니다. 자동 회귀 (AR) 모델에서 모델은 이전 데이터 포인트를보고 선형 회귀와 유사한 수학 공식을 사용하여 다음 데이터 포인트를 예측합니다. 사용될 이전 데이터 포인트 수를 결정하는 순서 ( "p"로 표시)라는 것이 있습니다. 제 생각에 좋은 p 값을 얻는 가장 좋은 방법은 몇 가지 다른 값을 시도하고 어떤 모델이 최소 (최상의) AIC로 나왔는지 확인하는 것입니다. p 값이 더 높으면 모델은 더 오래 전에 발생한 더 많은 데이터 포인트를 고려합니다. 다음은 자동 회귀 모델의 공식입니다 .¹ "c"는 상수이고 "e"는 오류 또는 노이즈를 나타냅니다 .¹

다음은 ARIMA와 SARIMAX의 통합 부분을 설명하는 것입니다. 자동 회귀 및 이동 평균 모델이 작동하려면 데이터가 고정되어 있어야합니다. 즉, 데이터에 추세 나 계절성이 없어야합니다. 통합은 시계열의 차이를 가져와 각 값에서 이전 값을 빼서 데이터를 더 고정시키는 경향이 있습니다. 데이터가 몇 번 차이가 나는지를 나타내는 "d"라는 값이 있습니다. 자동 회귀 모델의 p 값과 마찬가지로 d에 대해 몇 가지 다른 값을 시도하고 어떤 모델이 최소 AIC를 갖는지 확인하는 것이 가장 좋습니다.

이제 ARIMA와 SARIMAX의 이동 평균 부분을 설명하겠습니다. 이동 평균 (MA) 모델은 데이터의 기울기와 함께 데이터의 노이즈를 기반으로 계산을 수행합니다. MA 모델의 공식은 아래에서 찾을 수 있습니다 .² "µ"는 X의 평균을 나타내고 "Θ"는 모델의 매개 변수를 나타냅니다 .²

차이 (I)와 함께 AR과 MA를 결합하면 ARIMA 모델이 생성됩니다. 차수인 이동 평균 모델에는 "q"라는 값이 있습니다. 순서는 방정식에 넣을 과거 데이터 포인트의 양인 자동 회귀 순서와 유사합니다.

SARIMAX는 계절적주기가있는 데이터 세트에 사용됩니다. ARIMA와 SARIMAX의 차이점은 계절 성과 외인성 요인입니다 (계절 성과 일반 ARIMA는 잘 섞이지 않음). 이것들은 약간 복잡하지만 중요한 점은 SARIMAX가 ARIMA에 필요한 p, d 및 q 인수뿐만 아니라 계절성 측면뿐만 아니라 다른 p, d 및 q 인수 세트도 필요하다는 것입니다. 데이터의 계절적주기의주기 성인 "s"라는 인수. s 값을 선택할 때 계절별 데이터 순환시기에 대한 아이디어를 얻으십시오. 데이터 포인트가 월 단위로 분리되고 계절주기가 1 년이면 s를 12로 설정합니다. 또는 데이터 포인트가 일 단위로 분리되고 계절주기가 주이면 s를 7로 설정합니다.

SARIMAX의 "s"값 이외의 모든 값에 대해서는 그리드 검색을 사용하는 것이 좋습니다. 이것은 파이썬의 itertools 라이브러리와 함께 사용할 수 있습니다. 먼저 ARIMA 모델에서 그리드 검색이 어떻게 닮았는지 설명하겠습니다. 그리드 검색은 기본적으로 어떤 매개 변수 조합이 가장 좋은지 확인하는 방법으로 매개 변수가 다른 여러 모델을 실행합니다. 파이썬에서 먼저 목록과 사전을 만듭니다. 사전은 모델의 AIC 값을 키로 저장하고 모델의 순서를 값으로 갖습니다. 목록은 단순히 다른 모델을 실행하여 얻을 수있는 AIC 값 목록입니다. p, d, q라는 세 개의 변수를 만들고 0과 2 사이의 범위로 설정합니다. 그런 다음 itertools의 곱 방법을 사용하여 p, d, q의 가능한 모든 조합을 찾아 변수로 설정합니다. 그런 다음 ARIMA 메서드를 호출 할 때 for 루프를 사용하여 p, d, q의 각 조합을 반복합니다. 모델 AIC를 찾아서 AIC 목록에 추가하고 각 모델 AIC 및 사용 된 매개 변수 세트로 사전을 업데이트하십시오. 마지막으로 AIC 목록에서 최소값을 찾은 다음 사전에서 해당 키를 찾습니다. 결과 키는 모델을 만들기위한 최적의 순서가됩니다.

ARIMA 모델을 실행하려면 실제 데이터와 순서의 두 가지 인수가 있습니다. 순서는 p, d, q를 포함하는 튜플입니다. 모델을 실행하려면 statsmodels.tsa.arima_model의 클래스에서 ARIMA 객체 인스턴스를 생성하면됩니다. 인스턴스화 할 때 인수 (데이터 및 순서)를 설정 한 다음 ".fit ()"을 호출하여 모델을 피팅하고 모든 인수 조합에 대해이 작업을 수행하고 위에서 언급 한 목록과 사전에 AIC를 저장합니다. 모델의 AIC를 찾으려면 모델의 인스턴스 변수를 가져와 ".aic"를 호출하여 AIC를 반환하면됩니다. 다음은 ARIMA 모델을 구축하는 예입니다.

from statsmodels.tsa.arima_model import ARIMA
import itertools
# Grid Search
p = d = q = range(0,3) # p, d, and q can be either 0, 1, or 2
pdq = list(itertools.product(p,d,q)) # gets all possible combinations of p, d, and q
combs = {} # stores aic and order pairs
aics = [] # stores aics
# Grid Search continued
for combination in pdq:
    try:
        model = ARIMA(data, order=combination) # create all possible models
        model = model.fit()
        combs.update({model.aic : combination}) # store combinations
        aics.append(model.aic)
    except:
        continue
        
best_aic = min(aics)
# Model Creation and Forecasting
model = ARIMA(data, order=combs[best_aic])
model = model.fit()
model.forecast(7)[0]

import statsmodels.api as sm
import itertools
# Grid Search
p = d = q = range(0,3) # p, d, and q can be either 0, 1, or 2
pdq = list(itertools.product(p,d,q)) # gets all possible combinations of p, d, and q 
p2 = d2 = q2 = range(0, 2) # second set of p's, d's, and q's
pdq2 = list(itertools.product(p2,d2,q2)) # simular too code above but for seasonal parameters
s = 12 # here I use twelve but the number here is representative of the periodicty of the seasonal cycle
pdqs2 = [(c[0], c[1], c[2], s) for c in pdq2]
combs = {}
aics = []
# Grid Search Continued
for combination in pdq:
    for seasonal_combination in pdqs2:
        try:
            model = sm.tsa.statespace.SARIMAX(data, order=combination, seasonal_order=seasonal_combination,
                                             enforce_stationarity=False,
                                             enforce_invertibility=False)
            model = model.fit()
            combs.update({model.aic : [combination, seasonal_combination]})
            aics.append(model.aic)
            
        except:
            continue
            
best_aic = min(aics)
# Modeling and forcasting
model = sm.tsa.statespace.SARIMAX(data, order=combs[best_aic][0], seasonal_order=combs[best_aic][1],
                                             enforce_stationarity=False,
                                             enforce_invertibility=False)
model = model.fit()
model.forecast(7)

출처

  1. https://en.wikipedia.org/wiki/Autoregressive_model
  2. https://en.wikipedia.org/wiki/Moving-average_model

Suggested posts

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

중요하지만 종종 간과되는 데이터 과학 및 분석 기술

이제 데이터 과학 및 분석에 들어가는 데 필요한 기술 기술을 배울 수있는 방법이 그 어느 때보 다 많았습니다. 온라인 과정, Kaggle 대회, YouTube 자습서, 스택 오버플로가있는 금광 등이 있습니다. 현장에 침입하려는 사람들은 종종 "X 데이터 작업을 수행하려면 어떤 프로그래밍 기술이 필요한가요?", "어떤 기계 학습 기술을 배워야합니까?", "기술을 구축하려면 어떤 프로젝트를 수행해야합니까?"와 같은 질문을 자주합니다. / 포트폴리오?”.

의미없는 말과 유효한 영어 텍스트를 구별하는 방법

의미없는 말과 유효한 영어 텍스트를 구별하는 방법

텍스트 피트니스 기능의 세계 해커 영화의 인기있는 비유에서 때때로 하루를 저장하기 위해 해독해야하는 암호화 된 텍스트가 있습니다. 주인공은 컴퓨터에서 몇 가지 빠른 헛소리를하고 해독 된 텍스트를 터뜨립니다. 마지막 순간에 세상을 구할 때가되었습니다.

Related posts

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

데이터 과학을위한 필수 수학 : 기초 및 기초 변경

고유 분해 및 SVD에 유용한 기저의 선형 대수 개념 이해이 기사에서는 고유 분해 또는 특이 값 분해 (SVD)와 같은 행렬 분해 방법을 이해하는 흥미로운 방법 인 기저 개념에 대해 알아 봅니다. 정의 기본은 벡터 공간 (벡터 집합)을 설명하는 데 사용되는 좌표계입니다.

판다와 에라스무스 연구 교환 분석

판다와 에라스무스 연구 교환 분석

Erasmus 프로그램 2011-12에서 발생한 20 만 개의 연구 교환으로 데이터 세트를 분석 한 결과 1987 년 이후 Erasmus 프로그램은 매년 수십만 명의 유럽 학생들에게 한 학기 또는 1 년을 해외에서 보낼 기회를 다른 유럽에서 보낼 수있는 기회를 제공합니다. 경제적 인 지원뿐만 아니라 쉬운 교환 과정을 제공합니다. 유럽의 다양한 사람, 언어 및 문화에 대한 마음과 마음을 열어주는 정말 귀중한 경험입니다.

데이터 과학을위한 8 가지 기본 통계 개념

… 평범한 영어로 설명

데이터 과학을위한 8 가지 기본 통계 개념

통계는 "수량 데이터의 수집, 분석, 해석 및 표현을 다루는 수학의 한 분야"입니다. 프로그래밍과 기계 학습을 혼합하면 데이터 과학의 핵심 기술에 대해 꽤 잘 설명 할 수 있습니다.

데이터 과학의 9 가지 거리 측정

일반적인 거리 측정의 장점과 함정

데이터 과학의 9 가지 거리 측정

감독되거나 감독되지 않는 많은 알고리즘은 거리 측정을 사용합니다. 유클리드 거리 또는 코사인 유사성과 같은 이러한 측정은 종종 k-NN, UMAP, HDBSCAN 등과 같은 알고리즘에서 찾을 수 있습니다.