시계열 분석 예제 | [이것이 데이터 분석이다 With 파이썬_11] 시계열 예측 분석 인기 답변 업데이트

당신은 주제를 찾고 있습니까 “시계열 분석 예제 – [이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석“? 다음 카테고리의 웹사이트 ppa.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.charoenmotorcycles.com/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 한빛미디어 이(가) 작성한 기사에는 조회수 15,506회 및 좋아요 145개 개의 좋아요가 있습니다.

Table of Contents

시계열 분석 예제 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석 – 시계열 분석 예제 주제에 대한 세부정보를 참조하세요

※ 도서 해당 내용
Chapter 03. 미래를 예측하는 데이터 분석(p162~p180)
– 비트코인 시세 예측하기
– 시간 정보가 포함된 데이터 살펴보기
– 파이썬 라이브러리를 활용해 시세 예측하기
※ 추천합니다!
– 코드를 실행하다가 이론을 모르겠어서 지치는 분들
– 이론을 공부하다가 수학이 막혀서 지치는 분들
– 수학 공부하다가 코드를 잊어보는 분들
WHY,
‘왜’ 가 중요합니다.
왜 이런 코드를 실행하고 분석의 방법을 잡는지
왜 이런 알고리즘이나 분석 방법을 여기서 사용하는지
※ 이 동영상은 『이것이 데이터 분석이다 with 파이썬』 책 내용을 토대로 제작되었습니다.
▶ 도서 자세히 보기 : http://www.hanbit.co.kr/store/books/look.php?p_code=B2717499992
▶ 질문하기 : 영상에 댓글을 달아주세요.

시계열 분석 예제 주제에 대한 자세한 내용은 여기를 참조하세요.

[Python] 날씨 시계열 데이터(Kaggle)로 ARIMA 적용하기

이전 포스팅에서 시계열 분석에 대한 전반적인 설명과 ARIMA 모형(정상성, AR, MA) 에 대해 설명했다. 이번에는 실제 시계열 데이터에 ARIMA 모형을 …

+ 자세한 내용은 여기를 클릭하십시오

Source: leedakyeong.tistory.com

Date Published: 1/29/2021

View: 857

시계열 분석 – 한양대학교 | KOCW 공개 강의

이 과목에서는 시계열 분석의 기본 분석 방법을 소개하고 univariate의 ARMA/ARIMA 모형, (G)ARCH 모형, 예측, 모델 선택 등에 대한 내용을 다룬다.

+ 여기에 더 보기

Source: www.kocw.net

Date Published: 6/22/2022

View: 1793

[이재호 강좌] 오렌지 제10강 시계열 분석(Time Series Analysis)

본 예제에서는 기본 parameters 값들을 사용하되, Forecast 예측의 steps를 10으로 설정하여 미래의 10회의 시점까지의 가격지수를 예측하였다. Name에 …

+ 여기에 보기

Source: www.sbr.ai

Date Published: 5/9/2021

View: 226

[Python Data Analysis 분석 8] 데이터 분석 – 파이썬 시계열분석

시계열 분석 : 시계열 분석은 말그대로, 현시점까지의 데이터로 앞으로 어떤 패턴의 차트를 그릴지 예측하는 분석기법입니다.

+ 더 읽기

Source: tjansry354.tistory.com

Date Published: 5/16/2021

View: 8446

실전 시계열 분석 – 한빛출판네트워크

이 책에 담긴 통계와 머신러닝 기술을 활용하면 데이터 엔지니어링 및 분석 과제를 해결하는 방법을 익히고, 시계열 데이터의 핵심을 꿰뚫어볼 수 있는 시각을 얻을 수 …

+ 여기에 더 보기

Source: www.hanbit.co.kr

Date Published: 10/4/2022

View: 2336

[데이터분석] 시계열 분석 1 – ARIMA – 마고커

해 오고 있다. Kaggle의 예제 데이터 기반으로 그 방법들을 살펴 볼 예정이다. 데이터는 아래 Kaggle 에서 가져올 수 있다.

+ 더 읽기

Source: magoker.tistory.com

Date Published: 1/19/2021

View: 974

[Book] 실전 시계열 분석 – 생각많은 소심남

해당 포스트에서 소개하고 있는 “실전 시계열 분석” 책은 한빛미디어로부터 … 시계열 분석에 익숙치 않았던 나한테는 원리와 실제 구현 예제가 같이 …

+ 더 읽기

Source: talkingaboutme.tistory.com

Date Published: 11/9/2022

View: 9069

ARIMA, Python으로 하는 시계열분석 (feat. 비트코인 가격예측)

시계열 분석(Time series analysis)이란, 독립변수(Independent variable)를 이용하여 종속변수(Dependent variable)를 예측하는 일반적인 기계학습 …

+ 더 읽기

Source: byeongkijeong.github.io

Date Published: 7/14/2021

View: 2117

Python 시계열 분석

학교 수업으로 시계열분석을 듣고 싶었지만, 커리큘럼상 문제로 중요한 시계열분석을 듣지 못하고 졸업을 해야할 것 같습니다 ㅠㅠ 그래서 요즘은 …

+ 자세한 내용은 여기를 클릭하십시오

Source: taek98.tistory.com

Date Published: 6/7/2021

View: 8415

Time Series Forecasting (3) 파이썬을 이용한 시계열 예측 모델링

시계열 분석할 때 데이터가 계절성을 띄는지 안띄는지 분석하고 모델링을 해야 헛짓거리를 줄일 수 있다. 그러므로 아직 안했다면 아래 포스팅을 통해 …

+ 더 읽기

Source: happy-chipmunk.tistory.com

Date Published: 4/8/2022

View: 2318

주제와 관련된 이미지 시계열 분석 예제

주제와 관련된 더 많은 사진을 참조하십시오 [이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석
[이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석

주제에 대한 기사 평가 시계열 분석 예제

  • Author: 한빛미디어
  • Views: 조회수 15,506회
  • Likes: 좋아요 145개
  • Date Published: 2020. 3. 1.
  • Video Url link: https://www.youtube.com/watch?v=AuzoQ8eZXEw

[Python] 날씨 시계열 데이터(Kaggle)로 ARIMA 적용하기

반응형

2021.05.24 – [통계 지식/시계열자료 분석] – 시계열 분해란?(Time Series Decomposition) :: 시계열 분석이란? 시계열 데이터란? 추세(Trend), 순환(Cycle), 계절성(Seasonal), 불규칙 요소(Random, Residual)

2021.05.24 – [통계 지식/시계열자료 분석] – ARIMA란? :: ARIMA 분석기법, AR, MA, ACF, PACF, 정상성이란?

이전 포스팅에서 시계열 분석에 대한 전반적인 설명과 ARIMA 모형(정상성, AR, MA) 에 대해 설명했다.

이번에는 실제 시계열 데이터에 ARIMA 모형을 적용하는 Python 코드를 설명하겠다.

ARIMA in Python

kaggle에서 제공된 제 2차 세계대전 날씨데이터를 활용했으며, kaggle 코드를 참고하였다.

총 2가지 날씨 데이터이며, 하나는 station별 위도, 경도 등 위치가 표시되어있는 위치데이터,

하나는 station 별 실제 온도 데이터이다.

각 데이터별 사용한 컬럼에 대한 Description은 다음과 같다.

Weather station location: WBAN: Weather station number NAME: weather station name STATE/COUNTRY ID: acronym of countries Latitude: Latitude of weather station Longitude: Longitude of weather station

Weather: STA: eather station number (WBAN) Date: Date of temperature measurement MeanTemp: Mean temperature

필요한 라이브러리들을 import하고, 데이터를 불러온다.

import numpy as np # linear algebra import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv) import seaborn as sns # visualization library import matplotlib.pyplot as plt # visualization library # import plotly.plotly as py # visualization library from plotly.offline import init_notebook_mode, iplot # plotly offline mode init_notebook_mode(connected=True) import plotly.graph_objs as go # plotly graphical object import os import warnings warnings.filterwarnings(“ignore”) # if there is a warning after some codes, this will avoid us to see them. plt.style.use(‘ggplot’) # style of plots. ggplot is one of the most used style, I also like it.

weather_station_location = pd.read_csv(“../01. Data/Weather Station Locations.csv”) weather = pd.read_csv(“../01. Data/Summary of Weather.csv”) weather_station_location = weather_station_location.loc[:,[“WBAN”,”NAME”,”STATE/COUNTRY ID”,”Latitude”,”Longitude”] ] weather = weather.loc[:,[“STA”,”Date”,”MeanTemp”] ]

분석에 필요한 컬럼들만 불러왔으며, 각 데이터에 대한 상위 5개를 head()로 보면 다음과 같다.

여러 지역 중 BINDUKURI 지역에 대한 일 평균 온도를 대상으로 분석을 진행하겠다.

weather_station_id = weather_station_location[weather_station_location.NAME == “BINDUKURI”].WBAN weather_bin = weather[weather.STA == int(weather_station_id)] weather_bin[“Date”] = pd.to_datetime(weather_bin[“Date”])

1943년 5월 11일부터 1945년 5월 31일까지 일단위 평균 온도이다.

이를 시계열 그래프로 그려보면 다음과 같다.

plt.figure(figsize=(22,8)) plt.plot(weather_bin.Date,weather_bin.MeanTemp) plt.title(“Mean Temperature of Bindukuri Area”) plt.xlabel(“Date”) plt.ylabel(“Mean Temperature”) plt.show()

이를 시계열 분해법으로 분해해보면 다음과 같다.

먼저, 시계열 형태의 ts 데이터를 만들어준다.

# lets create time series from weather timeSeries = weather_bin.loc[:, [“Date”,”MeanTemp”]] timeSeries.index = timeSeries.Date ts = timeSeries.drop(“Date”,axis=1)

다음으로 seasonal_decompose() 를 활용하여 분해한다.

from statsmodels.tsa.seasonal import seasonal_decompose result = seasonal_decompose(ts[‘MeanTemp’], model=’additive’, freq=7) fig = plt.figure() fig = result.plot() fig.set_size_inches(20, 15)

freq에 들어가는 주기는 계절성 주기를 기반으로 설정해준다.

이 계절성 주기는 정답이나 공식이 있는 것은 아니고 눈으로 보고 파악해야 하는데,

분기별 데이터는 4, 월별 데이터는 12, 주별 패턴이 있는 일별 데이터는 7로 초기 설정해보고 보면서 맞춰가는 것을 추천한다.

(이 데이터는 계절성 주기가 1년이라 365로 설정하는 것이 바람직하다.)

데이터가 패턴이 보이기 때문에 정상성이 의심된다. 이를 판단하기 위해 ACF 그래프를 그려보았다.

import statsmodels.api as sm fig = plt.figure(figsize=(20,8)) ax1 = fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(ts, lags=20, ax=ax1)

아주아주 천천히 값이 작아지는 것을 볼 수 있다. 이전 포스팅에서 언급했듯이, ACF 값이 아주아주 천천히 감소하는 것은 정상성을 만족하지 않는다는 것을 의미한다.

이번에는 단위근 검정인 ADF 검정(Augmented Dickey-Fuller test)으로 정상성을 확인해보겠다.

이 검정의 가설은 다음과 같다.

H0(귀무가설) : 자료에 단위근이 존재한다. 즉, 정상성을 만족하지 않는다.

H1(대립가설) : 자료가 정상성을 만족한다.

from statsmodels.tsa.stattools import adfuller result = adfuller(ts) print(‘ADF Statistic: %f’ % result[0]) print(‘p-value: %f’ % result[1]) print(‘Critical Values:’) for key, value in result[4].items(): print(‘\t%s: %.3f’ % (key, value))

p-value가 0.05를 넘으므로, 귀무가설을 기각하지 못한다. 즉, 해당 데이터는 정상성을 만족하지 못한다.

이를 해결하기 위해 1차 차분을 해주었다.

ts_diff = ts – ts.shift() plt.figure(figsize=(22,8)) plt.plot(ts_diff) plt.title(“Differencing method”) plt.xlabel(“Date”) plt.ylabel(“Differencing Mean Temperature”) plt.show()

일정한 패턴이 확인되지 않고, 정상성을 만족하는 듯 보인다.

ADF 검정 결과는 다음과 같다.

p-value가 0.05보다 작으므로 귀무가설을 기각한다. 즉, 1차 차분한 데이터는 정상성을 만족한다.

정상성을 만족하는 차분된 데이터로 ACF와 PACF 그래프를 그려 ARIMA 모형의 p와 q를 결정한다.

import statsmodels.api as sm fig = plt.figure(figsize=(20,8)) ax1 = fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(ts_diff[1:], lags=20, ax=ax1) # ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(ts_diff[1:], lags=20, ax=ax2)# , lags=40

ACF와 PACF 모두 금방 0에 수렴하고, 2번째 lag 이후 0에 수렴한다.

즉, ARIMA(2,1,2) 모형을 base model로, ARIMA(2,1,1), ARIMA(1,1,2), ARIMA(1,1,1) 등의 모델을 시도해 볼 수 있다.

ARIMA(2,1,2) 모델의 결과이다.

1994년 6월 25일 부터를 Test했다. Obs로는 340개에 해당한다.

from statsmodels.tsa.arima_model import ARIMA from pandas import datetime # fit model model = ARIMA(ts, order=(2,1,2)) model_fit = model.fit(disp=0) # predict start_index = datetime(1944, 6, 25) end_index = datetime(1945, 5, 31) forecast = model_fit.predict(start=start_index, end=end_index, typ=’levels’) # visualization plt.figure(figsize=(22,8)) plt.plot(weather_bin.Date,weather_bin.MeanTemp,label = “original”) plt.plot(forecast,label = “predicted”) plt.title(“Time Series Forecast”) plt.xlabel(“Date”) plt.ylabel(“Mean Temperature”) plt.legend() plt.show()

위 코드에서 중의할 점은 model fitting 시 typ = ‘levels’로 해 주어야 한다.

차분이 들어간 모델의 경우 typ을 default 파라미터인 ‘linear’로 설정해 줄 경우 차분한 값에 대한 결과가 나오기 때문이다.

눈으로 볼 때 결과가 아주 좋아보인다. 마지막으로 잔차 분석을 통해 모델에 빠진 것이 없는지, 문제가 없는지 확인한다.

잔차는 어떠한 패턴이나 특성이 나타나서는 안된다.

어떤 패턴이 있다는 것은 모델에 그만큼 덜 적용이 되었다는 것을 의미하기 때문이다.

resi = np.array(weather_bin[weather_bin.Date>=start_index].MeanTemp) – np.array(forecast) plt.figure(figsize=(22,8)) plt.plot(weather_bin.Date[weather_bin.Date>=start_index],resi) plt.xlabel(“Date”) plt.ylabel(“Residual”) plt.legend() plt.show()

ACF 그래프 및 ADF 검정을 통해 정상성도 판단한다.

ACF 그래프도 빠르게 0으로 수렴하고, ADF 검정 역시 p-value값이 매우 작은 것을 볼 수 있다.

마지막으로 성능까지 확인해보면 다음과 같다.

from sklearn import metrics def scoring(y_true, y_pred): r2 = round(metrics.r2_score(y_true, y_pred) * 100, 3) # mae = round(metrics.mean_absolute_error(y_true, y_pred),3) corr = round(np.corrcoef(y_true, y_pred)[0, 1], 3) mape = round( metrics.mean_absolute_percentage_error(y_true, y_pred) * 100, 3) rmse = round(metrics.mean_squared_error(y_true, y_pred, squared=False), 3) df = pd.DataFrame({ ‘R2’: r2, “Corr”: corr, “RMSE”: rmse, “MAPE”: mape }, index=[0]) return df

반응형

시계열 분석

1. 시계열분석의 기본 통계 시계열분석에 필요한 기본 통계 내용인 White Noise, Stationary 시그널, ACF 등을 설명

시계열분석의 기본 통계 시계열분석에 필요한 기본 통계 내용인 White Noise, Stationary 시그널, ACF 등을 설명

2. 시계열 선형 모델과 트랜드 시계열 선형 모델인 MA, AR 모델과 트랜드 찾는 방법 설명

시계열 선형 모델과 트랜드 시계열 선형 모델인 MA, AR 모델과 트랜드 찾는 방법 설명

3. 시계열 선형 ARMA 모델 시계열 선형 모델인 ARMA 모델과 Y-W 식 등을 설명

시계열 선형 ARMA 모델 시계열 선형 모델인 ARMA 모델과 Y-W 식 등을 설명

5. 모델 변수 추정 및 예측 선택된 모델의 계수를 추정하는 방법과 예측치 계산하는 방법을 설명

모델 변수 추정 및 예측 선택된 모델의 계수를 추정하는 방법과 예측치 계산하는 방법을 설명

6. ARIMA 모델 및 전통적 스무딩 방법 nonstationary 시그널과 ARMIA 모델, 전통적인 스무딩 방법들, Seasonal ARIMA 모형에 대해 설명

ARIMA 모델 및 전통적 스무딩 방법 nonstationary 시그널과 ARMIA 모델, 전통적인 스무딩 방법들, Seasonal ARIMA 모형에 대해 설명

7. Winter 방법, 다변량 시계열 모델 Centered moving average 방법, Winter 방법을 설명하고 다변량 시계열 모형에 대한 기본 내용을 설명

Winter 방법, 다변량 시계열 모델 Centered moving average 방법, Winter 방법을 설명하고 다변량 시계열 모형에 대한 기본 내용을 설명

8. VAR 시계열 모델 다변량 시계열 모델인 VAR 모델을 설명하고 R을 이용하여 연습

VAR 시계열 모델 다변량 시계열 모델인 VAR 모델을 설명하고 R을 이용하여 연습

9. ARFIMA 모델, Unit Root 테스트 장기기억 속성 시계열 데이터 분석을 위한 ARFIMA 모델을 설명하고 Unit Root 테스트에 대해 설명

ARFIMA 모델, Unit Root 테스트 장기기억 속성 시계열 데이터 분석을 위한 ARFIMA 모델을 설명하고 Unit Root 테스트에 대해 설명

10. Linear transfer function 모델과 ARCH 모델 Linear transfer function 모델에 대해 설명하고 비선형 모델인 ARCH모델에 대해 설명

Linear transfer function 모델과 ARCH 모델 Linear transfer function 모델에 대해 설명하고 비선형 모델인 ARCH모델에 대해 설명

11. Spectral Analysis Spectral Density에 대해 설명하고 white noise, ARMA 모형에 대한 Spectral Density 표현을 설명

Spectral Analysis Spectral Density에 대해 설명하고 white noise, ARMA 모형에 대한 Spectral Density 표현을 설명

12. Peridogram Peridogram, 주파수 특성 찾아내는 예제, 선형필터링, lagged 회귀 분석에서의 응용 등에 대한 설명

[이재호 강좌] 오렌지 제10강 시계열 분석(Time Series Analysis)

알림: 본 강좌의 모든 예제와 오렌지 파일은 강좌 하단에 zip 파일로 제공됩니다. 강좌의 내용을 따라하시면서 활용해주세요. -스마투스비즈니스리뷰지 알림-

목차

1. 시계열 분석의 소개

2. 시계열 분석 알고리즘 소개

3. 오렌지3 실습

4. 파일 다운받기

5. 참고문헌

1. 시계열 분석의 소개

이번 강좌에서는 오렌지3에서 추가 모듈로 제공되는 시계열 분석 모듈을 다룬다. 시계열 분석은 time series analysis라고 한다. 시계열 분석의 목적은 데이터분석가가 과거 시점에서부터 현재까지 수집된 일련의 자료들을 분석하여 “미래에 대한 예측(Forecast)”을 수행하는 것이며 나아가 생성된 시스템 또는 확률을 수학적으로 모델링하여 시스템 및 예측의 전 과정을 관리할 수 있도록 하는 것이다.

시계열 분석 방법은 대학에서 한학기 강좌를 필요로 할 정도로 방대하므로, 본고에서는 오렌지3에서 지원하는 유용한 시계열 예측 모듈인 ARIMA, VAR 모형을 중심으로 학습한다.

이를 위해서, 우리는 먼저 예측이란 무엇인가를 논의한다.

1.1 예측이란 무엇인가?

가. 용어 정의

예측이란 크게 2가지 용어가 혼재되어서 사용된다. Forecasting와 prediction이다.

Forecasting 예측 : 과거와 현재 데이터에 기반하여 예측을 수행하는 과정이다 [참고문헌 1]. 미래에 어떤 일이 발생할지를 판단하는 설명이다 [출처: 캠브리지 사전].

Prediction 예측 : 라틴어 præ-, “전”, dicere, “말하다”의 조합어로 명명되며, 미래의 사건이나 데이터에 대해 서술하는 것이다 [참고문헌 2]. 미래에 어떤 사건이나 행위가 일어날 것이라고 말하는 것으로써 지식 또는 경험의 결과로써 서술된다 [출처: 캠브리지 사전].

좀더 축약하면, forecast는 확률적 의미가 강하고, predict는 구체적인 명시의 의미가 강하다.

Forecast 예측은 과거와 현재의 데이터를 기반으로 예측하는 과정이다. 예를 들어, 회사는 다음 해의 수익을 추정한 다음 실제 결과와 비교할 수 있다.

Prediction 예측은 비슷하지만 더 일반적인 용어이다. Forecast 예측은 시계열, 횡단면 또는 종단 데이터를 사용하는 특정 공식 통계 방법을 참조할 수 있다.

예를 들어, 수문학에서 “forecast 예측”이라는 용어는 특정 미래의 특정 시간에 대한 값의 추정을 위해 사용되는 반면, “prediction 예측”이라는 용어는 장기간에 걸쳐 홍수가 발생할 횟수와 같은 보다 일반적인 추정에 사용된다.

Prediction 예측은 항상 그런 것은 아니지만 경험이나 지식을 기반으로 미래를 기술하는 경우가 많으며, “추정(estimation)”과의 정확한 차이에 대한 보편적인 합의는 없다. 학자마다 분야마다 다른 의미를 정의하여 사용한다 [참고문헌 2]

본고에서는 시계열 분석에서의 예측이라는 맥락에서 forecast 예측이라는 용어를 사용한다.

그렇다면, 미래를 ‘예측’한다는 것은 무엇인가? “미래에 일어날 결과를 사전에 과학적으로 헤아릴 수 있는 것 “이다. “과학적으로 예측”이란 “데이터를 분석하고 그 결과를 바탕으로 가능한 한 객관적으로 미래를 헤아리는 것”이라고 말할 수 있다. “데이터 분석”과 “객관적으로”라는 용어가 ‘예측’에 필수적인 요소이다. 예를 들어, 기업의 마케팅 담당자가 자신의 감각만으로 향후 매출을 추정했을 때, 그것은 예측이 아니라 “예언이나 예상”에 불과할 것이다.

대표적인 객관적 예측으로는 통계 모델에 의한 예측이 있다. 이는 과거 실적 데이터에서 “통계 모델 ‘을 구축하고 미래 예측을 실시하는 방법이다.

통계 모델을 간단하게 설명하면 어떤 현상에 대해 과거의 데이터들로부터 도출 된 법칙 (패턴)을 수식화 (함수화) 한 것이다. 그러나 어떤 법칙(패턴)도 현상을 완전히 해명할 수 없기 때문에 그것을 인정하는 “오차 항”을 반드시 포함해야 한다. 또한 모델은 객관적으로 얻은 정보 (데이터)를 사용하여 객관적인 절차 (통계적으로)에 의해 만들어지기 때문에 객관성이 담보된다 [참고문헌 6].

1.2 예측에 대한 몇가지 사례들

우리는 많은 경우에 예측이 필요하다. 당뇨환자에게 향후 4시간 내에 저혈당 쇼크가 발생할지 여부를 알려면, 과거 혈당 값들로부터 미래의 혈당 예상치 값을 예측해야 한다. 또한 공장에서 재고를 관리하려면 공급량 예측이 필요하다. 대규모 공장의 건립 투자의 경우에는 몇 년 앞을 내다보는 수요량 예측이 필요할 수 있다. 어떤 상황이건 시간적 범위가 길건 짧건 상관없이 효율적이며 효과적인 계획을 세우는데 예측은 큰 역할을 수행한다.

우리는 일상에서 예측의 문제를 쉽게 접한다. 내일 아침에 해가 뜰 시간은 비교적 정확하게 예측할 수 있다(지구는 공전과 자전을 규칙적으로 수행하기 떄문이다). 반대로, 내일 로또 당첨 번호는 정확하게 예측할 수 없다(로또 기계는 무작위 확률로 작동하기 때문이다, 규칙성을 최대한 줄여서 사람이나 기계가 어떤 알고리즘으로도 예측을 못하게 만든다).

그렇다면, 어떤 사건의 예측가능성은 무엇에 의존하는 것일까?

그것은 1) 우리가 사건에 영향을 주는 요인을 얼마나 잘 이해할 수 있는지 2) 사용할 수 있는 데이터가 얼마나 많은지 3) 예측이 우리가 예측하려는 것에 영향을 줄 수 있는지 여부에 달려 있다.

예를 들면, 전기 수요 예측의 경우는 보통 세 가지 조건이 모두 만족되기 때문에 상당히 정확할 수 있다. 우리는 1) 전기 수요가 기온에 영향을 크게 받고(여름의 에어컨, 겨울의 전기보일러), 휴일이나 경제적인 요인에 의해 영향을 적게 받는다는 사실을 잘 알고 있다. 전기 수요와 날씨 상황에 대해 시간에 따른 충분한 데이터가 있고, 전기 수요와 핵심 변수를 관련 지어 잘 설명할 수 있는 모델을 세울 수 있는 기술도 있어서, 놀라울 정도로 정확하게 예측할 수 있다 [참고문헌 5].

반대로, 환율 예측의 경우에는 사용할 수 있는 데이터가 충분히 많다는 한 가지 조건만 만족된다. 하지만, 환율에 영향을 주는 요인을 잘 모르고, 환율 예측은 환율 자체에 직접적으로 영향을 주기도 한다. 만약에, 환율이 증가할 것이라는 예측이 아주 잘 공개된다면, 사람들은 즉시 가격을 조정할 것이다. 즉, 사람들이 돈을 기꺼이 지불하는 상황이 벌어져, 예측 자체 때문에 예측이 맞는 상황이 되고 만다. 이러한 의미에서, 환율은 점점 스스로를 예측하게 되는 셈이다. 이것은 “효율적인 시장 가설(efficient market hypothesis)”의 한 예이다.

환율이 오를 것이냐 내릴 것인가를 예측할 때 우리가 무엇을 예측하던지 50% 가까이는 맞을 것이다. 이러한 경우에, 예측하는 사람은 스스로의 한계를 자각할 필요가 있고, 더 잘 맞추는 것이 가능하다고 주장하지 말아야 할 필요가 있다 [참고문헌 5].

용어설명)

효율적 시장 가설(efficient market hypothesis, EMH)은 자산가격에는 그 자산의 가치에 관한 모든 공개된 정보가 반영된다는 이론이다. 이 가설에 따르면 금융시장은 활용 가능한 정보를 합리적으로 처리하므로 주식 가격(주가)에는 항상 모든 정보가 반영돼 있다. 따라서 주식 투자를 통해 꾸준하고 지속적인 초과수익을 기대하기는 힘들다. 비이성적이거나 심리적 요인들도 자산가격에 많은 영향을 미친다며 효율적 시장 가설에 반대하는 학자들도 있다.

출처: http://www.tesat.or.kr/bbs.frm.view/tesat_study?no=12850

종종 예측에 있어서 핵심적인 과정은 정확한 예측이 가능한 때가 언제 인지와, 그리고 예측이 큰 의미가 없을 때(예측을 하는 것이 동전을 던진 결과로 의사결정을 하는 것보다 나을 것이 없을 때)가 언제인가를 아는 것이다. 좋은 예측은 과거 데이터에서 존재하는 진짜 패턴과 관계를 잡아내지만, 다시 반복되지 않을 과거 사건을 정확히 모사하지는 않는다 [참고문헌 5].

많은 사람이 환경이 변하는 경우에 예측이 불가능할 것이라는 잘못된 방식으로 가정한다. 그러나 모든 환경은 변하고, 좋은 예측 모델은 변하는 방식을 잡아낸다. 예측할 때 환경이 변하지 않는다는 가정은 잘 사용하지 않는다. 보통은 환경이 변하는 방식이 미래에도 계속 될 것이라고 가정한다. 즉, 아주 불안정한 환경은 계속하여 아주 불안정할 것이고, 판매량이 변하는 사업은 계속 판매량이 변할 것이고, 호황과 불황 패턴을 보이는 경제에는 계속하여 호황과 불황이 나타날 것이라는 내용이다 [참고문헌 5].

예측하는 일은 시간 범위에 따라, 실제 결과를 결정하는 요인에 따라, 데이터의 패턴의 종류에 따라, 그리고 그 밖의 많은 양상에 따라 많이 달라진다. 예측 기법은 (단순(naïve) 기법이라고 불리는) 가장 최근의 관측값을 예측값으로 사용하는 것처럼 단순할 수도 있고, 신경망(neural network)이나 계량경제학적(econometric) 시스템을 다루는 연립방정식처럼 아주 복잡할 수도 있다.

1.3 시계열 데이터 분석 예측 모델링의 역사

시계열 분석의 목적은 현재까지 수집된 자료들을 분석하여 미래에 대한 예측을 수행하는 것이며 나아가 생성된 시스템 또는 확률을 수학적으로 모델링하여 시스템 및 예측의 전 과정을 관리할 수 있도록 하는 것이다 [참고문헌 3].

시계열 데이터 분석 모델의 개발은 역사적으로 1926년 Yule이 ARMA(autoregressive moving average)에 대한 개념을 제시함으로써 시작되었다. 이 후 1937년 Walker는 이러한 ARMA 모델을 실제 수학 모델로 만들었으며, 초기 ARMA 모델은 추후 Durbin(1960)과 Box- Jenkins(1970)에 의해서 ARIMA Model(Autoregressive Integrated Moving Averge Model)로 구체화 되었다. 1957 년 Holt 는 지수평활법(exponential smoothing)을 제시하는데, 이 분석법은 1960 년 Winter의 seasonal exponential smoothing 에 의해 추정되었다. 가장 근래의 분석 모델로는 1967년 미국 Beureu of the Census가 제시한 X-11 모델이 있는데, 이는 경기 지수에 대한 계절적인 변동을 설명하기 위한 모델에서 시작했다. 하지만 X-11 모델은 원론적으로 이동 평균 개념을 이용하므로 초기 관측치와 마지막 관측치를 사용할 수 없다는 문제점을 지니고 있었다. 이에 1975년 Canada 연구진들은 X-11 에 대한 보완법으로 X11-ARMA 방법을 제시하였다 [참고문헌 3].

2. 시계열 분석 알고리즘 소개

시계열 분석은 시간에 따라 변화되는 자료의 패턴을 밝혀 가까운 미래를 예측하는 방법이다.

시계열 분석(Time series analysis)에서는 독립변수(Independent variable)를 이용하여 종속변수(Dependent variable)를 예측하는 일반적인 기계학습 방법론과 비교해서 시간을 독립변수로 사용한다는 특징이 있다. 독립변수로 시간을 사용하는 특성 때문에 분석에 있어서 일반적인 방법론들과는 다른 몇가지 고려가 필요하다.

시계열 분석을 위해서는 시계열 데이터가 준비돼야 한다. 시간 경과가 일정한 시차로 정돈 되어 있을 때 이를 시계열 데이터로 본다 [참고문헌 7].

시계열들은 생성되는 특성에 따라 연속적으로 생성되는 연속 시계열(continuous time series)과 이산적 시점에서 생성되는 이산 시계열(discrete time series)로 구분할 수 있다. 그러나 실제로는 많은 시계열들이 연속적으로 생성되고 있지만 일정한 시차를 두고 관측(observation)\되므로 이산시계열의 형태를 지니는 경우가 많다.

시계열 자료(time series data)들은 시간의 경과에 따라 관측된 자료이므로 시간에 영향을 받는다. 따라서 시계열 자료를 분석할 때 관측시점들 간의 시차(time lag)가 중요한 역할을 한다. 예를 들어 오늘의 주가가 한달 전, 일주일 전의 주가보다는 어제의 주가에 더 많은 영향을 받는 것과 마찬가지로 가까운 관측시점일수록 관측자료들 간에 상관관계가 커진다.

시계열은 일반적으로 시간 t를 아래 첨자로 하여 다음과 같이 표현된다.

{Z t: t=1, 2, 3, ×××} 또는 Z 1 , Z 2 , Z 3 , ×××

시계열분석(time series analysis)의 목적은 과거 시계열 자료의 패턴(pattern)이 미래에도 지속적으로 유지된다는 가정하에서 현재까지 수집된 자료들을 분석하여 미래에 대한 예측(forecast)을 하는 것이다.

예를 들어 과거부터 수집되어 온 어떤 상품의 매출액 자료를 분석하면 미래의 매출액을 예측할 수 있다. 또한 시계열 자료가 생성된 시스템 또는 확률과정을 모형화하여 시스템 또는 확률과정을 이해하고 제어(control)할 수 있도록 하는 것이다.

용어설명)

확률 과정(Stochastic process, Random process)

확률 과정은 <확률 공간에서 시간의 진행에 의해 정의되는 모든 확률 변수들의 모임>이라고 할 수 있다. 즉, 시계열 데이터라는 개념은 확률 과정의 표본이라고 할 수 있다. 확률 과정의 표본은 {Z_t : Z_1, Z_2, … Z_t} 같은 형태로 간단히 표현할 수 있다.

한 가지 예를 들면, 특정 회사의 주가 데이터를 시계열 자료로 보고, 이 시계열 자료가 확률 과정이라고 생각했을 때 우리가 보고 있는 주가는 확률 과정에서 나올 수 있는 하나의 표본일 뿐이다. 그리고 이런 관점을 확장시켜 생각해보면, 우리가 살고 있는 이 세계 자체도 확률 과정의 하나의 표본일 뿐이다.

예를 들어 원료가 투입되어 제품이 생산되는 시스템을 모형화할 수 있으면 제품의 목표값(target value)을 달성하기 위해 원료를 어떻게 입력시키는 것이 가장 최적 인지를 알아낼 수도 있다.

시계열 분석시 우선 선행되어야 할 일은 시계열 그림(time series plot)을 그려보는 것이다. 시계열 그림은 시간의 경과에 따라 시계열 자료의 값이 변하는 것을 나타낸 그림으로 시간 t를 가로축, 시계열의 관측값 Zt를 세로축에 나타낸다. 이 그림을 도출하는 이유는 시계열의 특징을 쉽게 파악할 수 있어 해당 자료에 적합한 분석방법의 선택에 도움이 되기 때문이다. 일반적으로 시계열에서 나타나는 변동으로는 우연적으로 발생하는 불규칙변동(irregular variation)과 체계적 변동(systematic variation)이 있다.

[그림] 다양한 시계열들의 모습

불규칙변동(irregular variation 또는 확률적 변동 : random variation)은 시계열 자료에서 시간에 따른 규칙적인 움직임과는 달리 어떤 규칙성이 없이 예측이 불가능하게 우연적으로 발생하는 변동을 말한다. 예로 전쟁, 홍수, 화재, 지진, 파업 등이다. 체계적 변동에는 장기간에 걸쳐 어떤 추세로 나타나는 추세 변동(trend variation), 추세 선을 따라 주기적으로 오르고 내림을 반복하는 순환변동(cyclical variation), 그리고 계절적 요인이 작용하여 1년 주기로 나타나는 계절변동(seasonal variation)이 있다.

추세변동(trend variation)이란 시계열 자료가 갖는 장기적인 변화추세이다. 추세란 장기간에 걸쳐 지속적으로 증가 또는 감소하거나 또는 일정한 상태(stationary)를 유지하려는 성향을 의미한다. 그러므로 시계열 자료에서 짧은 기간 동안에는 추세변동을 찾기 어렵다. 따라서 추세변동은 짧은 기간 동안 급격하게 변동하는 것이 아니라 장기적인 추세경향이 나타나는 것으로 직선이나 부드러운 곡선의 연장선으로 표시함. 이러한 추세는 직선뿐만 아니라 곡선, S자 형태의 추세를 가질 수도 있다. 예로 국내총생산(GDP), 인구증가율, 기술변화 등이 있다.

순환변동(cyclical variation)이란 일반적으로 추세변동은 장기적으로(일반적으로 1년 초과) 나타나는 추세 경향이지만, 순환변동은 대체로 2~3년 정도의 일정한 기간을 주기로 순환적으로 나타난다. 즉, 1년 이내의 주기로 곡선을 그리며 추세변동에 따라 변동하는 것을 말한다. 시간의 경과(흐름)에 따라 상하로 반복되는 변동으로 추세선을 따라 변화하는 것이 순환변동이다. 경기변동곡선(business cycle curve)은 불황과 경기회복, 호황과 경기후퇴로 인하여 수년을 주기로 나타나고 있는데 순환변동을 나타내는 좋은 예이다.

계절변동(seasonal variation)은 일반적으로 시계열자료에서 보통 계절적 영향과 사회적 관습에 따라 1년 주기로 발생하는 변동요인을 계절변동이라 하고, 보통 계절에 따라 순환하며 변동하는 특성을 지닌다. 예로 설, 추석 등 명절요인 등이 있다. 그런데 계절변동이 순환변동과 다른 점은 순환주기가 짧다는 점이다. 그러나 대부분의 경제관련 시계열들은 추세와 계절요인을 동시에 포함한다. 이는 경제성장에 따라 백화점의 판매액, 해외여행자수, 아이스크림 판매액, 전력소비량 등과 같이 계절상품 판매량 자료들이 시간의 변화에 따라 증가하기 때문이다.

시계열 데이터의 필수 조건, 정상성(Stationary)

정상성이란 ‘데이터 변동의 안정성’이라고 달리 표현할 수 있다.

시간의 흐름에 따라 관측된 결과에서 세로축(y) 값의 변동이 지나치게 크다면 그 다음 예측에 관한 정확도가 높을 수 있을까 생각해보자.

회귀분석에서 살펴보았듯이, 데이터의 분포가 추세선을 기준으로 잘 모여 있을 때(=표준오차가 작을 때), 해당 추세선이 보다 예측력이 높다고 배웠다. 마찬가지로 어떤 시계열 자료가 정확한 간격으로 데이터를 관측 했을 때 세로축(y) 값의 변동성이 너무 크게 나타난다면 다음 관측 결과에 대한 예측의 의미가 퇴색될 것이다.

따라서 올바른 시계열 분석을 위해 ‘비정상’시계열 자료를 ‘정상’시계열 자료로 전처리하는 과정이 분석 만큼이나 중요하다.

정상성(Stationary)을 가진 데이터란, 일관된 평균과 분산(variance)과 자기 상관(auto-correlation) 정도를 보이는 데이터이다. 일반적으로 로그변환과 차분을 통해 정상성을 확보한 후에 자기회귀 모형을 구축한다 [참고문헌 8].

정상성을 가진 데이터의 몇가지 특징을 알아보자.

-먼저, 평균이 일정하다. 즉, 모든 시점에 대해서 일정한 평균을 가진다.

-평균이 일정하지 않은 시계열은 차분(difference)을 통해 정상화 할 수 있다.

-차분(difference)은 현 시점 자료에서 전 시점 자료를 빼는 것이다.

-일반차분(regular difference)이란 바로 전 시점의 자료를 빼는 것이다.

-계정차분(seasonal difference)이란 여러 시점 전의 자료를 빼는 것. 주로 계절성을 갖는 자료를 정상화하는데 사용한다.

-분산이 일정하지 않은 시계열은 변환(transformation)을 통해 정상화한다.

정상성을 가진 데이터로 만드는 이유는 원래 시간의 흐름에 따라 증가 혹은 감소 추세가 있는 현상을 연구할 때, 혹은 계절적, 주기적으로 증감 현상을 보이는 이슈를 연구할 때 그런 자연 발생적인, 혹은 문제의 예측 변 수와 관계 없는 요인(힘: forces)들의 영향력을 배제하고 순수한 예측변수의 힘을 보고 싶기 때문이다.

정상성을 확보하는 방법, 차분(Difference)과 변환(Transformation)

정상 시계열로 조정하는 방법이다. 아래의 그림과 같이 일반적으로 평균 변동이 크면 직전 값에서 현재 값을 빼는 차분의 과정을 거치고, 분산이 시점에 따라 다르면 변환 과정을 거쳐 정상성을 충족시킨다.

변환을 통해 정상성을 높이는 방법에는 이동평균법, 지수평활법 등이 있다.

이러한 과정들은 인터넷을 통해서 손쉽게 자료를 얻을수 있으므로 본고에서는 생략한다.

[그림] 비정상 자료의 정상성 확보 개념도(차분 연산과 변환 연산을 통해, 위의 각각의 경우에 정상성을 확보시킨다)

2.1 시계열분석 모형

시계열분석은 기본적으로 선형 예측을 전제로 한다. 시간을 가로축에 놓은 회귀분석이라고 할 수 있다. 뚜렷한 상관관계를 바탕으로 하는 선형 회귀분석은 미래는 과거를 닮는다는 전제를 바탕으로 시계열 분석으로 응용되었다.

[표] 대표적인 시계열 분석 모형들

종류 설명 AR

Auto regressive 과거 데이터에 기반하여 미래를 예측하는 모형으로 추세선을 통한 예측

과정은 선형 회귀모델과 동일하다. MA

Moving

Average 직전 데이터와 현재 데이터의 평균인 ‘이동평균‘을 이용한 시계열 분석법이다.

전체 자료 가운데 다른 하위 데이터에 대한 이동평균을 따로 생성해 활용하는 것도 가능하다. ARIMA

AR-MA-Momentum 결과적으로 회귀분석의 한 형태다. 단, 정상 시계열 자료로만 회귀 예측을 한다는 차이가 있다. MA에 대한 수 차례의 차분을 통해 정상성을 높이고 AR을 수행한다.

시계열 데이터에 존재하는 경향 패턴, 주기 패턴, 계절성 패턴 그리고 불규칙적인 패턴에 적용되는 실 분석법들과 관련 모델의 구축은 통계학 기반의 데이터 분석법에 기초한다. 임상적으로 시계열 데이터 분석에는 회귀 분석법(Regression method), Box-Jenkins 법(ARMA and ARIMA), 지수 평활법(Exponential Smoothing) 등이 데이터 특성 및 연구적 목적 차이에 의해 선별적으로 참조되고 있다. 회귀 분석법과 BOX-JENKINS 법은 수학적인 이론 모형에 의존하기 때문에 시간에 따른 변동량이 크게 관찰되는 시계열 데이터 분석에 적합하다. 반면에 지수 평활법은 비교적 직관적인 분석법이기에 시간에 따른 변동량이 적은 시계열 데이터에 적용이 용이하다.

위에서 보는 바와 같이, 시계열 분석도 일종의 회귀분석의 한 형태로 볼수 있다.

1) 자기회귀 모형 (AR모형, auto regressive model)

이 모델의 특징은 p시점 전의 자료가 현재 자료에 영향을 준다 (즉, p시점 전의 시계열이 현재 시점과의 공분산이 있다).

2) 이동평균 모형 (MA 모형, Moving average model)

이 모델은 유한 개수의 백색잡음의 결합이 된 모델로써 항상 정상성을 만족한다. 그리고 1차 이동평균 모형(MA(1) 모형)은 바로 전 시점의 백색잡음의 결합으로 이루어진 모형이다. 2차 이동평균 모형(MA(2) 모형)은 바로 전 시점의 백색잡음에 시차가 2인 백색잡음의 결합 모델이다.

3) 자기회귀누적이동평균 모형(ARIMA(p,d,q) 모형, autoregressive integrated moving average model)

ARIMA모형은 비정상 시계열 데이터를 다루는 모형 (non-stationary)이다. 차분이나 변환을 통해 AR모형, MA모형, 이 둘을 합친 ARMA모형으로 정상화 할 수 있다.

여기서, p는 AR모형, q는 MA모형과 관련된 차수이며,

시계열 {Zt}의 d번 차분한 시계열이 ARMA(p,q) 모형이면, 시계열{Zt}는 차수가 p,d,q인 ARIMA 모형이 된다.

2.2 ARIMA 모형

ARIMA(Autoregressive Integrated Moving-average, 자기회귀누적이동평균 모형)는 넓은 범위의 시계열 데이터의 표현이 가능한 모델이다.

시계열 모형(timeseries model)이란 특정 변수의 현재 값이 동일 변수의 과거 값과 무작위적충격(random shock)에 의존하고 있는 모형을 시계열 모형이라 한다. 즉, 시계열 Y t 가 시차값 Y t-1 ,Y t-2 ,Y t-3 … 및 무작위적 충격 ε t-1 , ε t-2 , ε t-3 , … 에 어떻게 영향을 받고 있는지를 나타내는 모형이다.

이 모델은 시계열 자료의 과거 특정 값을 기초로 모형을 구축하여 미래 값을 예측할 수 있다. 이러한 모형 구축과정은 Box and Jenkins(1976)에 의해 제시된 ARIMA 모형을 통해 처음으로 구체화되었다.

ARIMA 모형은 AR, MA, ARMA, ARIMA 등과 같은 다양한 모형으로 설명될 수 있다. 시계열 자료 Yt가 Yt이전의 시차 값 (lagged value)에 영향을 받는 모형을 자기회귀모형(AR; autoregressive model)이라 하며, 관측치의 오차 값(ε t )에 영향을 받게 되는 모형을 이동평균모형(MA; moving average model)이라 하며 이 두 모형이 결합된 모형을 ARMA 모형이라 하고, 아래의 수식과 같이 나타낼 수 있다.

위의 식은 α i Y t-p 가 AR 모형을 나타내고, α i α t-q 가 MA 모형을 나타낸다. 따라서, 아래의 수식으로 정리된다.

위의 식에서 p와 q는 AR과 MA에서의 각각의 시차를 나타내며 t는 모든 t에 대해서 평균이 0인 즉 E(ε t )=0인 백색 잡음 과정(white noise process)라고 한다.

시계열 Y t 는 일반적으로 ARMA(p, q)로 표현된다. 현재 값Y t 가 시차 값(lagged value)에 어떤 관계를 갖고 있는지 살펴보기 위해 시차연산자(lag operator) L을 사용해서 다음 식과 같이 표현 할 수 있다.

위의 식에서 α(L)과 β(L)은 차수가 p와 q인 다항시차(polynomial distributed lag) 모형이라고 부른다. 시계열 Y t 가 비정상적이어서, 적분된 과정(integrated process)을 따른다면, 위의 식은 아래과 같이 표현된다.

시계열 Y t 가 위의 식과 같은 과정을 따른다면, 시계열 Y t ~ ARIMA(p,q,d)로 표현한다.

이때, d는 적분차수를 말하는 것으로서, d 번 차분(difference)하면 시계열 Yt는 안정적인(stationary) 시계열 Y t ~ ARMA(p,q)로 환원된다.

즉, 차분은 시계열 자료의 반복적인 상승 혹은 하강의 패턴을 보일 경우 차분하여 정상시계열로 전환할 수 있다. 특정 시계열변수의 모형 설정은 시계열의 동태적 움직임의 통계적 특성을 파악하여 p와 q의 차수를 찾아 시계열변수가 어떠한 자기상관구조를 가지는지 식별하여 계수를 추정하는 것이다 [참고문헌 9].

오렌지3에서는 ARIMA(p,q,d)를 지원한다.

즉, ARIMA는 자기회귀(AR)와 이동평균(MA)을 둘 다 고려하는 모형인데, ARMA와 ARIMA의 차이점은 ARIMA의 경우 시계열의 비정상성(Non-stationary)을 설명하기 위해 관측치간의 차분(Difference)을 사용한다는 차이점이 있다.

ARIMA 모형의 이름은 아래와 같이 이해하면 쉬울 것이다 [참고문헌 10].

AR: 자기회귀(Autoregression)로써. 이전 관측값의 오차항이 이후 관측값에 영향을 주는 모형이다.

I: Intgrated. 누적을 의미하는 것으로, 차분을 이용하는 시계열 모형들에 붙이는 표현이다.

MA: 이동평균(Moving Average). 관측값이 이전의 연속적인 오차항의 영향을 받는 모형이다.

현실에 존재하는 시계열 자료는 불안정(Non-stationary)한 경우가 많다. 그런데 AR(p), MA(q) 모형이나, 이 둘을 합한 ARMA(p, q)모형으로는 이러한 불안정성을 설명할 수가 없다. 따라서 모형 그 자체에 이러한 비정상성을 제거하는 과정을 포함한 것이 ARIMA모형이며 ARIMA(p, d, q)로 표현한다.

ARMIA(p, d, q)는 AR, MA, ARMA를 모두 표현할 수 있다.

AR(p) = ARIMA(p, 0, 0)

MA(q) = ARIMA(0, 0, q)

ARMA(p, q) = ARIMA(p, 0, q)

d=0이면, Yt = Yt

d=1이면, Yt =Yt-Yt-1

d=2이면, Yt =(Yt-Yt-1)- (Yt-1-Yt-2)

이 된다.

ARIMA의 모수는 크게 3가지가 있다. AR모형의 Lag을 의미하는 p, MA모형의 Lag을 의미하는 q, 차분(Difference)횟수를 의미하는 d 가 그것이다. 보통은 p, d, q의 순서로 쓴다. 통상적으로 p + q < 2, p * q = 0 인 값들을 많이 사용한다. 2.3 VAR(벡터 자기 회귀) 모형 VAR이란 Vector Auto-Regression로써 ‘벡터 자기회귀모형’ 이라고 한다. ‘벡터 + 자기회귀’ 라는 말에서 자기회귀가 무엇인지, 벡터라는 단어는 어떤 의미인지를 알아보자. 자기회귀란? 무엇인가? 먼저 회귀에 대해서 논해보자. 독립변수(X1, X2, X3, …) 들로 종속변수 Y 를 예측하는 모델링을 ‘회귀(Regression)’라고 한다. 예 : 나의 키 = 0.5*아버지의 키 + 0.5*어머니의 키 이때, 회귀 앞에 ‘자기’가 붙어 있는 자기회귀는 ‘현재의 나’가 ‘과거의 나’ 에 영향을 받는 경우를 자기회귀라고 한다.. 나의 과거에만 영향을 받는 모델은 자기회귀라고 하고, 나의 과거와 다른 변수의 과거에서도 영향을 받는 모델을 벡터 자기 회귀라고 한다 [참고문헌 10]. 벡터 자기 회귀(VAR)에서는 단변량 자기회귀의 일반적인 형태로서 여러 개의 Y값이 시차에 따라 서로 영향을 주는 모델(종속변수 y가 여러개)이다. 벡터자기회귀모형(Vector AutoRegressive Model, VAR)은 일변량 자기회귀모형을 다변량 자기회귀모형으로 확정시킨 모형으로 예측 및 내생변수의 변화에 따른 효과 분석 등과 관련하여 자주 활용되고 있음 ARIMA 모형보다 좀 더 다변량의 효과를 모델링한 모형이며, 다변량 분석 시 예측할 변수의 과거 데이터를 고려할 뿐 아니라 여러 변수 사이의 의존성 또한 고려하는 모델이다. 또한 일변량 분석인 ARIMA 모형은 변수들 사이 상호작용을 무시하는 반면 VAR는 이를 고려하여 모델링한다. 이러한 특성 때문에 예측뿐만 아니라 특정 변수의 일시적 충격에 대한 효과를 모델링 하기 위해 연립방정식 체계로 구성된 VAR 모형을 이용할 수 있다. 충격 반응 분석을 수행할 수 있고 어떤 변수가 변할 때 내생 변수에 미치는 효과를 파악 가능하다. 분산분해(variance decomposition)를 통하여 각각 내생변수의 변동 중에 이들 변수들이 전체 변동에 기여한 부분이 어느 정도인지 상대적 크기를 분석 가능하다 [참고문헌 11]. VAR의 모형의 가정은 아래와 같다. 정상성(Stationarity) 가정을 가지고 있다. 정상성 가정하에 모델링을 할 수밖에 없는데, 왜냐하면 특정 t 시점에 관측된 값은 분포 값 가운데 단 하나의 값이므로, 특정 t 시점에 대한 분포를 추정하지 못한다는 한계를 지니기 때문이다 (즉, 관측치 하나로 분포를 추정하는 것은 불가능하기 때문이다) [참고문헌 12] 시간 t=1,2,3…,T에 대해서 다변량 시계열 Xt=(X 1t , X 2t , …, X Nt )의 정상성의 조건은 아래와 같다. n개의 다변량 정상시계열 (X 1t , X 2t , …, X Nt )가 p시차인 자기회귀과정으로 구성된 벡터자기회귀 모형(VAR(p))은 아래와 같이 정의된다. 여기서, C는 (N x 1)의 상수벡터, Θ i 는 현시점의 변수와 시차변수들간 시차회귀계수인 (N x N)의 행렬, ε t 는 (N x 1)의 벡터백색잡음과정으로 E(ε t )=0이며 다음 공분산 행렬을 갖는다. X의 벡터회귀방정식은 N개의 개별 회귀방정식을 갖게 되며, 개별 회귀방정식의 모수 Θn는 통상최소자승법(Ordinary Least Square method: OLS)을 활용하여 추정한다. 모형 설계 시에는 표본 기간, 사용될 변수 및 변수의 순서, 시차 길이에 의해서 예측 결과가 달라질 수 있음에 유의해야 한다 [참고문헌 15]. VAR 모형의 대두는 구조방정식 접근의 한계에 기인한다. 경제 이론에 의한 변수들간의 행태적 관계를 모형화한 구조방정식에 의한 접근 방법은 경제 이론 자체가 이들간의 모든 동태적 관계들을 제공해주기에 불충분했다. 통계적 추정과 검정은 특히 내생변수들이 모형의 방정식들의 양쪽에 모두 나타남으로 인해 복잡해진다. 따라서 VAR 모형에 의한 접근법이 제안되었는데, 몇 몇 변수들간의 관계를 모형화함에 있어 대안으로 사용되는 비구조적인 접근을 취한다. 서로 연관되어 있는 시계열 변수들의 예측 모형으로 사용되거나, 확률적 충격이 모형내 변수에 미치는 동태적 영향을 분석하는 데 많이 사용된다. VAR 모형은 모든 변수들을 모형 내에서 모든 변수들의 시차변수들의 함수로서 내생적인 것으로 취급한다 [참고문헌 14]. VAR 모형의 한계로는 무이론적(a-theoretic)이라는 점이 있다. 즉, 모형 설정에 있어서 변수들간의 관계에 대한 사전적(prior) 정보를 별로 사용하지 않는다. 이로 인해 VAR모형은 정책적 분석에 다소 부적합하다고 알려져 있다. 주로 예측모형으로서의 기능에 초점을 두고 있다. 특히 개별 모수들의 추정치에 대한 해석의 어렵다. 구조적 방정식이 아니므로 개별 모수들의 추정값에 적절한 의미를 부여하기 힘들다고 알려져 있다. 이 때문에 분석가들은 소위 인과점정(causality test), 충격반응함수(Impulse Response Function:IFR), 분산분해(variance decompositions)등을 통해 추가적 해석을 시도한다. 즉, VAR도 모형 구성상의 한계점이 있다는 점에 유의하자. VAR 모델은 이론적이지 않다고 비판 받기도 한다. 즉, 이론적인 구조를 식에 반영하는 몇몇 경제학적 이론에 기초하여 세운 것이 아니기 때문이다. 모든 변수는 시스템 안의 다른 모든 변수에 영향을 준다는 가정을 하기 때문에 추정한 계수를 해석하는 것이 어렵다. 그러나, VAR 모델은 여러 상황에서 유용하다 [참고문헌 5]. 1) 분명한 해석이 필요 없을 때 관련된 변수의 모임을 예측할 때; 2) (그랑거(Granger) 인과율(causality) 검정에 기초하여) 한 변수가 다른 것을 예측 할 때 유용한지 판단할 때; 3) 충격 반응 분석(impulse response analysis), 한 변수가 다른 한 변수의 갑작스럽지만 일시적인 변화에 반응하는 것을 분석할 때; 4) 예측 분산 분해를 예측할 때, 다른 변수의 효과의 결과가 각 변수의 예측 분산의 비율이 될 때이다. VAR 모형의 수식에 대한 보다 상세한 설명이 필요한 독자는 [참고문헌 14]를 참조하자. 2.4 시계열 모형과 구조방정식 모형의 차이점 전통적인 회귀모형에 의한 구조방정식모형은 변수간의 인과관계를 통하여 종속변수 Y를 몇 개의 설명 변수 {X1, X2, …}에 의해서 설명하고 있다. 구조방정식의 회귀모형에서는 설명변수의 영향이 시간 t가 변하더라도 항상 일정하다는 가정을 하고 있어 구조적 변화가 급속히 진행되어 설명변수의 영향이 변한 경우 이를 적절히 반영하지 못한다는 약점이 있다. 또한 구조모형(structure model)은 경제이론에 의해서 모형을 구축하고 있어 변수선택 및 모형의 내․외생변수의 선정이 모형 설계자의 주관에 의해서 결정된다는 단점이 있다. 따라서 이러한 시간에 대한 경직성과 주관성을 극복할 수 있는 방법이 Box and Jenkins(1976)의 ARIMA모형이라고 할 수 있다. ARIMA모형은 현재의 관측치 Zt는 과거의 어떠한 규칙성에 의해서 재현되며, 이러한 규칙성은 미래에도 유지된다고 가정하고 미래를 예측하고자 했다. 이러한 방법은 모형 설정이 용이한 반면 변수들 사이의 상호작용을 무시하고 있어 일변량분석이라는 한계에 부딪치게 된다. 이들 회귀모형과 시계열분석의 한계를 보완한 모형이 Sims(1980)의 VAR모형이라 할 수 있다. VAR모형은 연립방정식 체계와 비슷하나 모형의 오차항을 구조적으로 해석하며 식별제약의 일부가 오차항의 공분산행렬에 가해진다는 특징을 가지고 있어 연립방정식에 비해 다음과 같은 분석상의 특징을 갖고 있다. 첫째, 충격반응분석(impulse response analysis)을 통하여 어떠한 한 변수의 변화가 내생변수에 미치는 동태적 효과를 파악할 수 있다. 둘째, 분산분해(variance decomposition)를 통하여 각각의 내생변수의 변동 중에서 이들 변수들이 전체변동에 기여한 부분의 상대적 크기를 분석할 수 있다. VAR모형은 어떠한 경제이론을 기초로 가설을 설정하지 않고 실제 관찰되는 경제시계열들이 주는 정보를 최대로 이용하여 현실경제를 분석하게 된다. 즉, VAR모형은 모형내의 모든 변수들에 대한 시차변수들을 동시에 설명변수로 이용하여 결과를 분석하고자 한다. 2.5 딥러닝 기법과 시계열 모형의 활용 최근 딥러닝, 인공지능 등의 발전과 함께 시계열 분석에도 인공신경망이 널리 사용되고 있다. 특히 시계열 분석에는 RNN, LSTM 등을 이용할 수 있지만, 신경망모델의 가장 큰 단점은 제대로 된 모형해석이 거의 안 된다는 점이다. 즉 설명가능성이 떨어진다. 물론 알고리즘적인 측면에서야 성능이 잘나오면 되는 거지만 데이터 과학에서 의사결정 지원 시스템(Decision support system)상의 결과는 분석에 대한 최종 결정권자는 사람이기에 모형이 도출한 결과는 그렇게 예측한 근거가 필요하다. 이러한 관점에서 보았을 때, AR, MA 등과 같은 고전적인 통계기반의 시계열 분석법이 아직은 조금 더 우위에 있다고 판단된다. 이는 최근의 신경망모형 개발이 대부분 컴퓨터 비전이나 자연어처리에 집중되고 있기 때문이라고 판단되며 신경망 모형의 설명가능성에 대한 연구가 활발해지고 있으므로 딥러닝의 적용은 활발해질 것으로 예상된다. [참고문헌 13]. 3. 오렌지3 실습 가, ARIMA 모형 실습 이번에 실습할 내용은 강남구 아파트 매매 가격 지수를 통한 가격의 등락에 대한 ARIMA 시계열 분석 모형의 예측 실습이다. 데이터 출처: 전국주택가격동향/한국부동산원 기간: 2006년 1월~2019년 3월 아파트 매매 가격 지수 다운로드 경로 https://www.reb.or.kr/r-one/statistics/statisticsViewer.do?menuId=HOUSE_21111 [그림] ARIMA 모델을 이용한 강남구 아파트 매매가격 지수의 시계열 예측 구성도(오렌지3) [그림] ARIMA 위젯의 세부 설정 화면 본 예제에서는 기본 parameters 값들을 사용하되, Forecast 예측의 steps를 10으로 설정하여 미래의 10회의 시점까지의 가격지수를 예측하였다. Name에 보면 ARIMA (1, 1, 0)이라고 되어 있는데, 이것은 ARIMA 모형에서 p, d, q의 매개 변수값(parameter)을 갖는 ARIMA 모형임을 의미한다. Parameter에 있는 Auto-regression order(p)가 1, d=1, q=0이라는 의미는 아래의 값의 의미와 같다. p = 자기회귀 부분의 차수; d = 1차 차분이 포함된 정도; q = 이동 평균 부분의 차수. ARIMA 모형에서 특별한 값들을 갖는 매개변수들의 의미는 아래와 같다. ARIMA 모델의 특별한 경우. 백색잡음 ARIMA(0,0,0) 확률보행 상수가 없는 ARIMA(0,1,0) 표류를 포함하는 확률보행 상수가 있는 ARIMA(0,1,0) 자기회귀 ARIMA( p ,0,0) 이동평균 ARIMA(0,0, q ) p, d, q의 적절한 값을 고르는 것이 어려울 수 있다. 여기서는 오렌지3의 기본 값으로 설정된 값을 사용한다. [그림] 10회의 미래 시점의 아파트 매매 가격 지수를 예측한 결과 화면 위의 그림에서 제일 오른쪽의 점선의 모양이 미래 예측치이다. 서서히 상승하고 있음을 나타내고 있다. 구축된 모형의 적합도를 나타내는 척도들로써 하기의 것들이 있으며, 값이 작은 모형일 수록 선호되는 좋은 모형이다 [참고문헌 16]. - AIC(Akaike Information Criterion) - SC(Schwartz Criterion) - HQ(Hannan-Quinn criterion) - RMSE(Root Mean Square Error, 평균제곱오차의 제곱근) - 정규화된 BIC(nomarlized Bayesian Information Criterion) - 평균절대백분위오차, 평균절대오차, 절대퍼센트오차의 최대값, 절대오차의 최대값 하기의 척도는 값이 큰 모형일 수록 선호되는 좋은 모형이다. - R^2 오렌지3에서는 아래의 그림의 척도들이 지원된다. [그림] ARIMA 모델의 성능 평가를 제공하는 Model Evaluation 위젯 본 예제에서는 하나의 ARIMA 모형만 평가했으며 ARIMA 위젯을 여러 개 만들어서 p, d, q 매개변수 값을 바꿔가면서 다양한 모델들을 평가하는데 유용한 도구이다. [그림] 두개의 ARIMA 모델을 만들어서 성능을 성능 평가를 수행한 모습 성능 평가 결과는 아래와 같다. 두개의 모델은 R^2 값과 AIC/BIC 값에서 거의 차이가 없으므로 두 모델의 성능 차이는 없다고 판단된다. 나. VAR 모형의 실습 이번에 실습할 내용은 미국 NASDAQ의 2021-12-27부터 2022-01-24까지 약 한달간의 주식 데이터를 기반으로 한 VAR 모형의 시계열 예측이다. [그림] VAR 모형의 실습을 위해서 구성한 오렌지3 화면 [그림] VAR 위젯의 모습 위의 위젯에서 정보 기준(Information Criterion)은 None으로 설정된 값을 사용한다. 기타 옵션중 Akaike’s Information Criterion(AIC)과 Bayesian Information Criterion(BIC)에 대해서는 아래의 링크를 참조한다. 참조) https://otexts.com/fppkr/arima-estimation.html VAR 위젯에서는 Optimized AR order를 위의 척도 값을 최적화하기 위한 알고리즘이 지원되지만 본 예제에서는 큰 영향을 미치지는 않는다. 관심있는 독자들께서는 다양한 데이터 예제를 가지고 실험해보기 바란다. [그림] VAR 모형으로 예측한 결과값들을 가시화한 모습(Line Chart 위젯 활용) 위의 그림에서 제일 오른쪽의 점선의 모양이 미래 예측치이다. 위의 첫번째 그림인 초록색 그래프에서는 주식시장의 종가(Close/Last) 기준으로 예측시 서서히 하락하고 있음을 나타내고 있다. 아래의 그림인 주황색 그래프에서는 주식시장의 거래량(Volume) 기준으로 서서히 증가해감을 알수 있다. 즉 거래량이 증가하면서 주식가격(주가)이 하락할 것을 예측해주고 있다. 아래의 그림은 VAR 모델을 두개 만들어서 성능을 평가해본 모습이다. [그림] 두개의 VAR 모델로 구성한 오렌지3 화면 [그림] VAR 모델을 2개 만들어서 평가한 모습 R2 값에서 거의 차이가 없으므로 두개의 VAR 모델로 인한 예측의 성능을 큰 차이가 없다고 판단된다. 결론 이번 강좌에서는 미래를 예측해주는 시계열 분석에 대해서 다루었다. 특히 ARIMA와 VAR 모형을 제공하는 오렌지3의 모듈을 실습해 보았다. 시계열 분석은 대학에서 한학기 분량의 이론을 학습해야 할 정도로 많은 기법들이 개발되어 있다. 시계열 분석으로 비즈니스 데이터들에 대한 예측 기법들을 활용하여 실무에 반영하고 싶은 독자들은 인터넷에 많은 자료들이 있으니 본고의 5장의 참고문헌을 참조하여 더 공부해두면 좋을 것이다. 단, 시계열 예측 기법들이 늘 정확하게 미래를 맞추는 것이 아님을 유의하자. 시계열 예측에 대한 깊은 이해를 위해서 롭 힌드만(Rob J Hyndman)교수의 참고 문헌을 추천한다. (온라인 북) https://otexts.com/fppkr/ Forecasting 예측: 원리와 실습 2판 Hyndman, R.J., & Athanasopoulos, G. (2018) Forecasting: principles and practice, 2nd edition, OTexts: Melbourne, Australia. OTexts.com/fpp2. Accessed on <2022-02-01>.

4. 파일 다운받기

5. 참고문헌

[1] forecasting 예측의 정의

https://en.wikipedia.org/wiki/Forecasting

[2] Prediction 예측의 정의

https://en.wikipedia.org/wiki/Prediction

[3] 시계열 분석의 역사

서울대학교 산학협력단, 시계열 빅데이터 분석 및 가시화 기술 개발, KISTI, 2015, 과제보고서

https://scienceon.kisti.re.kr/srch/selectPORSrchReport.do?cn=TRKO201600000567

[4]

HF주택가격지수 개발 및 활용방안 연구, 한국주택금융공사, 주택금융연구소, 2015

[5] 예측: 원리와 실습 2판

Hyndman, R.J., & Athanasopoulos, G. (2018) Forecasting: principles and practice, 2nd edition, OTexts: Melbourne, Australia. OTexts.com/fpp2. Accessed on <2022-02-01>.

[6]

미래를 ‘예측’한다는 것은 무엇인가?

https://blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=youngyeul&logNo=80190878160

[7]

심평원(2021, 9월) 파이썬을 활용한 데이터, AI 분석 사례

https://repository.hira.or.kr/handle/2019.oak/2586

[8] 정상성(stationary)의 설명

https://charstring.tistory.com/538

[9] ARIMA 모형

최차순. 2014. REITs 수익률의 ARIMA Model 설정에 관한 연구. 부동산학보, 58(0): 291-302

[10] ARIMA 모형의 이름 설명

https://byeongkijeong.github.io/ARIMA-with-Python/

[11] VAR 명칭의 의미

https://medium.com/@kimkido95/time-series-analysis-using-var-6737cf2055cb

[11] VAR의 장점

https://jonsyou.tistory.com/75

[12] VAR 모형의 정상성 가정

https://jonsyou.tistory.com/75#VAR%–%EB%AA%A-%ED%–%–%EC%–%–%–%EB%-C%–%ED%–%-C%–%EC%-D%B-%ED%–%B-

[13] 신경망과 시계열 모형의 적용 현황

https://byeongkijeong.github.io/ARIMA-with-Python/

[14] VAR 강의 교안(중앙대학교 경제학과 이광훈 교수)

http://econ22.hosting.paran.com/

[15]

문권순, 벡터자기회귀(VAR)모형의 이해, 통계청『통계분석연구』제2권 제1호(‘97.봄)23-56

[16] AIC, BIC 척도를 통한 시계열 모델의 평가

https://stat-and-news-by-daragon9.tistory.com/40?category=701756

필자 소개

이재호는 현재 스마투스 디지털 경제연구원의 연구위원이다. 산업공학전공으로 동국대학교에서 공학박사를 학위를 취득하였고, ㈜유플러스네트웍스의 연구소장과 동국대학교 산업AI연구센터의 연구초빙교수를 역임하였다. 주연구분야는 AI, 디지털 트랜스포메이션, ICT 서비스 연구 및 분석 등 이다. 현재 연구관심사는 AI에 관심을 둔 독자/시민들을 위한 머신러닝 강좌/서비스 개발, 디지털 전환 기업을 위한 연구 /컨설팅이다.

[Python Data Analysis 분석 8] 데이터 분석 – 파이썬 시계열분석

차트의 x축 시간만큼을 토대로, 이후 어떤 수치로 변할지 예측합니다.

파이썬 라이브러리 중 대표적으로 쓰이는 ARIMA를 활용합니다. (상세 알고리즘은 생략합니다.)

ARIMA(Autoregressvie integrated MovingAverage)

AR(자기상관) : 이전의 값이 이후의 값에 영향을 미치고 있는 상황

MA(이동평균) : 랜덤 변수의 평균값이 지속적으로 증가하거나 감소하는 추세

차분은 비정상성을 정상성으로 만들기 위해, 관측값들의 차이를 계산하는 것.

(아래 그림처럼 비정상성에서 정상성으로)

실전 시계열 분석

실전 시계열 분석을 받기 전에 이 책이 나에게 주식 부자가 되게 해줄 마법의 책이 되기 않을까 살짝 기대해보았어요.

훗, 역시 기대가 빗나갔습니다. 대신 이 책은 앞으로 다가올 딥러닝계의 포인트를 찍어주었어요.

바로 시계열이죠. 쉽게 생각해서 시간 개념을 도입한다고 보시면 됩니다.

우리가 분석하는 데이터중 많은 것은 시간 개념이 들어가 있습니다.

저는 MS Power BI 시각화 툴을 사용하면서(파이썬으로 분석할 때 보다), 그래프를 많이 그리게 되었습니다.

그때 놀란 것이 시간 데이터 삽입과 공간 데이터 삽입으로 데이터를 훨씬 더 풍부하게 살펴볼 수 있게 되었다는 점입니다.

이 책은 저처럼 대충 시계열을 알고 있는 사람들이 읽어보면 좋을 내용들이 가득합니다.

왜 그런지 좀 더 살펴볼까요?

일단 이 책에서 필수 배경지식으로 R과 파이썬에 어느 정도 익숙해야 한다고 합니다.

아닙니다. 초중급 실력은 되어야 합니다. 그냥 파이썬 좀 아는 정도로는 이 책의 예제 소스 코드를 이해할 수 없습니다.

소스 코드에 약하더라도, 시계열에 대한 여러 생각거리를 던져주므로, 비개발자라고 하더라도(조금 어렵더라도) 미리 읽어볼 가치는 있다고 생각합니다.

집필의도에서 보면 시계열 분석에 대한 자료나 책이 없다고 합니다. 맞습니다. 그래서 이 책이 다소 어렵습니다.

앞으로 시계열 분석에 대한 요구가 많아지면, 좀 더 쉬운 내용들의 책들이 나오겠죠.

그리도 시계열에 대한 전체 구성에서 다양한 시각을 보여주고, 주요한 이야기거리를 던져주므로, 언젠가는 읽어야 할 것 같습니다.

목차가 앞쪽에는 통계기반 분석을, 뒷쪽에는 딥러닝쪽입니다.

전 13장부터 나오는 헬스케어 애플리케이션과 같은 실전 사례가 더 마음에 들었습니다.

머신러닝, 통계 모델을 잘 몰라서, 초반에는 읽기 힘들어서 그런지도 모르겠어요.

이 책에는 실전 예제로 소스 코드를 수록하였습니다.

설명은 R 과 Python 으로 각 사례별로 잘 맞는 언어를 사용해서 설명합니다.

문제는 우리가 R과 Python 둘 다 사용하지 않는다는 점이죠. 파이썬을 하는 입장에서 R 소스 코드를 보면 답답해지는 것이죠.

문제는 파이썬을 좀 하거나, 배운 입장에서는 위 이미지의 소스 코드는 이해하시겠죠.

그런데, 분석 쪽을 한번도 하지 않으신 분 같으면, 일반 파이썬 기초만 공부하셨다면 어려울 수 있습니다.

소스 코드 한 줄 한 줄에 대한 설명은 하지 않습니다.

필요하면 소스 코드와 그래프를 많이 제공하기 때문에, 소스 코드를 못 읽더라도, 전체적인 개념 익히기나 공부하기에 많은 도움이 됩니다.

소스 코드는 천천히 공부하시면서, 익히시면 되니까요.

책이 거의 560 쪽 입니다.

시계열에 대해서 상당히 많이 서술하였습니다. 일반 데이터 분석할 때의 순서대로 책 내용이 구성되어 있습니다.

각 내용에서 시계열 입장에서 다시 보충, 추가 설명했다고 보시면 됩니다.

시간을 어떻게 잡고, 어떻게 수집하고, 어떻게 저장할까? 앞 쪽에서 많이 할애하는데, 이 책을 읽고 정말 중요하다고 다시금 되새기게 되었습니다.

시계열 개념 자체가 알아야 할 것들이 많은데, 이런 것들을 책 곳곳에 있습니다.

데이터 분할도 일반적으로 하는 것과 왜 달리해야 하는지도 중요하고요.

딥러닝쪽을 좀 더 많이 봐온 저로서는 통계 모델과 수식이 좀 어려웠습니다.

책 리뷰를 하기 위해, 다시 처음부터 쭉~ 넘겨보니, 지금 적고 있는 것보다 훨씬 더 많은 이야기들을 적고 싶었는데, 빠트린 것들이 너무 많네요.

통계, 딥러닝으로 시계열로 데이터 분석하고 싶으시다면, 처음부터 빼놓치 마시고, 시계열 관점에서 하나하나 의심을 가지고 기존에 아시던 것에 물음을 해보세요.

저는 많은 배움을 안겨준 책이라, 다음에 시계열 분석을 해야한다면 옆에 놓고 다시 보려고 합니다.

책에 나온 많은 용어와 개념이 이해가 안되는 부분들이 많아서, 또다른 영역의 공부도 많이 해야 할 것 같습니다.

그러나, 앞으로 모든 분석에 시간 개념이 차츰 들어갈 것 같고, 오늘의 이 고통이 내일의 초석이 되었으면 하는 바램입니다.

[데이터분석] 시계열 분석 1 – ARIMA

기업 내 데이터분석이 많아지면서 자연스럽게 시계열분석에 대한 Needs가 많아졌다. 마케팅/구매/SCM 등 가치 사슬 내 거의 모든 부분이 시계열 데이터에 의존하고 있는데, 기존의 통계적 접근에서 빅데이터 분석, 딥러닝까지 발전(?)해 오고 있다. Kaggle의 예제 데이터 기반으로 그 방법들을 살펴 볼 예정이다.

데이터는 아래 Kaggle 에서 가져올 수 있다.

구조는 간단해서, 2013년부터 17년말까지 가게(store)별로 각 아이템들이 얼마나 팔렸는지를 나타내고 있다. 월별로 살펴보면 판매는 여름에 높아지고 겨울로 갈 수록 줄어드는 경향을 보인다.

데이터 EDA는 위와 같이 간단히만 해 두고, 판매 예측을 위해 우선 전통적인 ARIMA(Auto Regressive Integrated Moving Average)를 적용해 본다. ARIMA는 AR과 MA가 합쳐진 것으로, AR은 p시점 이전의 데이터가, MA는 최근의 추세(평균) 변화가 현재의 결과에 영향을 준다는 것이다. 코드를 통해 단계별 결과를 확인해 보자.

1) 전처리

아래는 전처리 하는 부분으로 우선 월별로 판매를 합산하고 훈련과 테스트 데이터로 나눈다.

import pandas as pd import numpy as np import matplotlib.pyplot as plt from datetime import datetime from pylab import rcParams import statsmodels.api as sm import warnings import itertools from statsmodels.tsa.ar_model import AR from statsmodels.tsa.arima_model import ARIMA # Kaggle에서 데이터를 받아오면 train.csv와 test.csv가 있는데 train.csv를 df = pd.read_csv(“data/train.csv”) # string 형태의 date 필드를 datetime 형태로 변환 df[‘date’] = pd.to_datetime(df[‘date’]) # date 필드를 index로 설정 df = df.set_index(‘date’) # 빠르게 테스트 해 보기 위해 월별로 아이템 판매 예측을 해 보기로 함 salesbymonth = df.sales.resample(‘M’).sum() #2013-2016 데이터를 train으로 2017 데이터를 test로 분리 split = “2017-01-01” salesbymonth_train= salesbymonth[:split] salesbymonth_test= salesbymonth[split:] salesbymonth_test_final=salesbymonth_test.copy() # 데이터를 시즌별로 분해해서 살펴 봄 rcParams[‘figure.figsize’] = 18, 8 decomposition = sm.tsa.seasonal_decompose(salesbymonth_train, model=’additive’) fig = decomposition.plot() plt.show()

statsmodels 패키지의 seasonal_decompose함수는 seasonal 데이터를 트렌드와 주기성을 살펴보는데 사용하는 데 결과는 아래와 같다.

점진적으로 증가하는 트렌를 보이고 있으며 계절별로 주기성이 뚜렷한 편이다. 네번째 항목은 잔차를 나타낸다.

2) 파라미터 찾기

이제 본격적으로 ARIMA 모델을 만들어야 한다. ARIMA 모델을 만들기 위해 p, d, q 값을 지정해 주어야 하는데 일반적으로 p가 0이면 MA 모델을 따르고, q가 0이면 AR 모델을 따른다고 한다. d가 0이면 정상성을 보유한 모델이라고 보는데, 발생확률이 변하지 않는 ARMA 모델이라고 간주하면 된다고 한다. 우린 아직 이 데이터가 어떤 모형을 따르는 지 모르기 때문에 최적의 결과를 가져오는 p,d,q 값을 찾아야한다. 그 방법은 크게 두가지로 임의의 값들을 다 넣어 테스트 해보거나, pmdarima 패키지의 auto_arima 함수로 찾아내면 된다.

#방법 1. p,d,q의 조합을 만들어 하나하나 ARIMA 모델을 돌려봄 p = d = q = range(0, 2) import itertools pdqa = list(itertools.product(p, d, q)) seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))] for param in pdqa: for param_seasonal in seasonal_pdq: try: mod = sm.tsa.statespace.SARIMAX(salesbymonth_train, 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 #방법 2. auto_arima 함수로 자동 추출 from pmdarima import auto_arima stepwise_model = auto_arima(salesbymonth_train, start_p=1, start_q=1, max_p=3, max_q=3, m=12, start_P=0, seasonal=True, d=1, D=1, trace=True, error_action=’ignore’, suppress_warnings=True, stepwise=True)

후자의 결과는 아래와 같이 나타나는데 전자의 결과에서도 AIC(Akaike Information Criterion) 값이 제일 작은 조합을 선택하면 된다.

Performing stepwise search to minimize aic ARIMA(1,1,1)(0,1,1)[12] : AIC=775.474, Time=0.07 sec ARIMA(0,1,0)(0,1,0)[12] : AIC=784.706, Time=0.01 sec ARIMA(1,1,0)(1,1,0)[12] : AIC=774.061, Time=0.04 sec ARIMA(0,1,1)(0,1,1)[12] : AIC=773.779, Time=0.05 sec ARIMA(0,1,1)(0,1,0)[12] : AIC=786.609, Time=0.01 sec ARIMA(0,1,1)(1,1,1)[12] : AIC=775.686, Time=0.20 sec ARIMA(0,1,1)(0,1,2)[12] : AIC=775.734, Time=0.11 sec ARIMA(0,1,1)(1,1,0)[12] : AIC=774.156, Time=0.04 sec ARIMA(0,1,1)(1,1,2)[12] : AIC=inf, Time=0.55 sec ARIMA(0,1,0)(0,1,1)[12] : AIC=770.820, Time=0.03 sec ARIMA(0,1,0)(1,1,1)[12] : AIC=772.724, Time=0.07 sec ARIMA(0,1,0)(0,1,2)[12] : AIC=772.374, Time=0.11 sec ARIMA(0,1,0)(1,1,0)[12] : AIC=767.799, Time=0.05 sec ARIMA(0,1,0)(2,1,0)[12] : AIC=772.845, Time=0.09 sec ARIMA(0,1,0)(2,1,1)[12] : AIC=inf, Time=0.41 sec ARIMA(1,1,1)(1,1,0)[12] : AIC=775.833, Time=0.23 sec ARIMA(0,1,0)(1,1,0)[12] intercept : AIC=773.761, Time=0.09 sec Best model: ARIMA(0,1,0)(1,1,0)[12] Total fit time: 2.150 seconds

3) 학습 및 테스트

이제 ARIMA 모델을 학습해 본다. 학습 코드는 간단하다.

SARIMAMonth = sm.tsa.statespace.SARIMAX(salesbymonth, order=(0, 1, 0), seasonal_order=(1, 1, 0, 12) ,enforce_stationarity=False,enforce_invertibility=False) SARIMA_results_month = SARIMAMonth.fit() SARIMA_results_month.plot_diagnostics(figsize=(16, 8)) plt.show()

학습 결과는 아래와 같다. 상관도가 높게 잘 나타났다.

만들어 두었던 예측 데이터를 넣어 예측하고 결과를 비교해 본다.

# 2017년 12개월 데이터로 예측 SARIMA_predict_month_1 = SARIMA_results_month.predict(start=48,end=60) # 결과 비교를 위해 기존에 마련해둔 test데이터에 결과를 붙임 salesbymonth_test_final[‘SeasonalARIMA’] = SARIMA_predict_month_1 # RMSE를 살펴 봄 RMSE_Month_Seasonal_ARIMA = np.mean(np.sqrt((salesbymonth_test_final[‘SeasonalARIMA’] – salesbymonth_test_final[‘sales’]) ** 2)) print(RMSE_Month_Seasonal_ARIMA) -> 12190.886296802802 # test 데이터와 예측 결과치를 비교 salesbymonth_test_final[1:].plot()

비교적 결과를 제대로 예측하고 있음을 확인할 수 있다.

[Book] 실전 시계열 분석

(해당 포스트에서 소개하고 있는 “실전 시계열 분석” 책은 한빛미디어로부터 제공받았음을 알려드립니다.)

인공지능을 많이 활용하는 대표적인 분야를 딱 2가지로 구분짓자면 아마도 대부분의 사람들이 분류(Classification)과 예측(Prediction)을 들 것이다. 사람이 할 수는 있지만 그 일을 하기에는 직관이 필요한 일들이고, 인공지능이 하는 일은 이 직관을 대신할 수 있도록 학습 데이터에서 패턴을 찾는 것이다.

그 중 뭔가 미래의 일을 예측하는 일 자체는 인간이 선망하는 일 중 하나가 아닐까 생각한다. 미래를 예측할 수 있다면, 미래에 닥칠 위험에 미리 대비할 수도 있고, 혹은 자산을 증식시키는데도 적용시킬 수 있다. 그래서 최근 광고를 보면 많이 등장하는 내용이 AI로 자산을 늘릴 수 있는 서비스를 제공하고 있는 것이다. 아마도 주식을 하는 사람이라면 알고 있을 HFT (High Frequency Trading)에도 이미 인공지능이 반영되어, 대부분의 투자회사나 퀀트업체에서도 활용하고 있는 것으로 알고 있다.

그런데 이렇게 미래의 일을 예측하려는 시도는 인공지능이 도입되기 이전부터 이뤄졌다. 이런 시계열 데이터를 많이 다루는 사람이라면 알고 있을 AR(AutoRegression)이나 MA(Moving Average)같은 기법은 현재 시점에서 과거 몇 시점 전까지의 데이터를 바탕으로 미래의 데이터를 예측하는 전통적인 통계적 기법이며, 이런 기술들이 적절히 조합되어 ARMA나 ARIMA, SARIMA같은 주기성을 띄는 시계열 데이터에 대해 적용할 수 있는 조금 더 발전된 형태의 기법들도 존재한다. 사실 이 이야기를 꺼낸 이유는 역사가 오래된 만큼이나 구현되어 있는 기술이나 프로그래밍 언어들이 R이나 SPSS 같은 통계툴에 한정되어 있던 것이다. 그나마 최근 Python이 등장하면서 이를 쉽게 사용할 수 있는 라이브러리도 나와있다. 특히나 LSTM이나 GRU같이 시계열 데이터를 입력으로 받는 딥러닝 기술들도 있어, 데이터의 특성이나 API를 활용할 수 있는 방법들을 알면 누구나 쉽게 시계열 데이터를 예측에 활용할 수 있다.

이번 포스트에서 소개할 책도 바로 이런 내용과 관련된 책이다.

실전 시계열 분석

이 책은 자그마치 560여페이지 안에 앞에서 소개한 분석과 예측 기술들을 소개하고 있다. 어떻게 보면 데이터 분석의 시작 단계인 데이터 소개와 EDA부터 시작해서 전형적인 시계열 모델들, 그리고 딥러닝/머신러닝을 통한 예측 기법과 분석시 발생할수 있는 오차와 정확성 문제를 다루고 있다. 자세한 내용은 아래와 같다.

시계열 데이터 탐색과 정리

탐색적 시계열 데이터 분석 수행

시간 데이터 저장

시계열 데이터 시뮬레이션

시계열 기능 생성 및 선택

측정 오류

머신러닝과 딥러닝을 활용한 예측 분류

정확도 및 성능 평가

회사에서 수행했던 일 중에는 건물 내부의 온도나 음식의 신선도에 따라서 적합한 제어를 해야했던 일들이 있었다. 물론 제어의 관점에서는 얼마나 사용자가 원하는 온도를 잘 “유지”시키느냐의 문제도 있었지만, 이런 실험을 실제로 진행하기에는 시간이나 자원의 문제가 있었기 때문에, 어떻게 하면 미래의 온도를 잘 “예측”하느냐, 즉 시뮬레이션의 문제도 있었다. 그 때는 이 책이 나오지 않아 원서(Practical Time Series Analysis, O’reilly)를 참고했었는데, 시계열 분석에 익숙치 않았던 나한테는 원리와 실제 구현 예제가 같이 소개된 이책의 내용이 좋았었다. 이론적인 내용과 더불어 후반부에 헬스케어 어플리케이션을 통한 실제 적용 사례도 같이 소개되어 있어서, 이론과 적용을 생각하는 독자에게는 좋은 책이 될거라는 생각이 들었다. 특히 딥러닝과 머신러닝을 통해서 시계열을 분석하는 내용도 나와있어서, 최근 발표되는 시계열 관련 논문을 이해하는 입문적인 요소도 될 수 있을 듯 하다. 아 참 그리고 무엇보다 보통 입문책이라면 포함되어 있을 문법과 사용법과 같은 기초 내용은 최대한 배제되어 있어, 읽기가 좋았던 부분도 있었다.

다만, 책의 내용에 따라서 구현되어 있는 내용이 R과 Python으로 병행되어 있어 어느 특정 언어에만 익숙한 사람이라면 원하는 내용을 찾지 못할 수도 있다. 원서의 github repo에서도 살펴보면 이런 경향이 그대로 유지되어 있다. 최근에는 R에 구현되어 있는 내용도 Python으로 많이 포팅되어서 이와 관련된 동일 구현 코드도 전달되었으면 좋았을텐데 하는 아쉬움이 살짝 있다. 또한 시계열 분석 분야가 통계와 수학이 깊숙히 관여한 분야이기에 이 부분에 대한 지식이 조금 부족하다면 단순히 책의 내용만 가지고 이해하기 어려운 부분이 있다.

그럼에도 불구하고 내가 생각하기에 이 책은 시계열 분석을 다룬 실용 서적 중 거의 필수적으로 봐야할 책이라고 생각한다. 나도 개인적으로 시계열 분석에 관심이 있고, 또 공부를 해야될 분야라고 생각해서 서점에서 자주 관련 책을 찾는 편인데, 은근히 이와 관련된 책들이 별로 없었다. 그나마 있었던 내용들은 R이나 SPSS로 되어 있고, 책이 나온지 오래되어 최신 경향을 담고 있지 않은 책들이 많았다. (참고로 이 책 후반부에는 facebook에서 만든 시계열 프레임워크인 prophet에 대한 내용도 살짝 들어 있다.)그 와중에도 이렇게 활용할 수 있는 책이 나왔고, 실질적으로 구현해보면서 담겨진 내용의 흐름이 시계열 데이터뿐만 일반적인 통계에서 머신러닝을 배우는 단계와 유사하여 학습하는데 도움이 많이 될 것이라고 생각한다.

참고: 원서 github repo

역서 fastpages

참고2: 개인적으로는 시계열 분석 자료도 많이 공개되어 있어, 이와 관련된 온라인 강의도 같이 들으면 좋을 것 같다. 참고로 내가 들었던 강의는 다음과 같다.

포항공대 시계열분석 기법과 응용

Coursera Practical Time Series Analysis (SUNY)

시계열 분석 관련 서적 딥러닝으로 걷는 시계열 예측

윤영선 저 실전 시계열 분석

에일린 닐슨 저/박찬성 역 예스24 | 애드온2

ARIMA, Python으로 하는 시계열분석 (feat. 비트코인 가격예측)

서론

시계열 분석(Time series analysis)이란,

독립변수(Independent variable)를 이용하여 종속변수(Dependent variable)를 예측하는 일반적인 기계학습 방법론에 대하여 시간을 독립변수로 사용한다는 특징이 있다. 독립변수로 시간을 사용하는 특성때문에 분석에 있어서 일반적인 방법론들과는 다른 몇가지 고려가 필요하다.

본 포스트에서는 시계열 분석(혹은 예측)에 있어서 가장 널리 사용되는 모델중 하나인 ARIMA에 대해 알아보고 Python을 통해 구현해본다.

본 포스트에서는

ARIMA의 간단한 개념

ARIMA 모델의 파라미터 선정 방법

실제 데이터와 ARIMA 모델을 이용한 미래 예측

등 과 관련된 내용을 다룬다.

ARIMA(Autoregressive Integrated Moving Average)

ARIMA는 Autoregressive Integrated Moving Average의 약자로, Autoregressive는 자기회귀모형을 의미하고, Moving Average는 이동평균모형을 의미한다.

즉, ARIMA는 자기회귀와 이동평균을 둘 다 고려하는 모형인데, ARMA와 ARIMA의 차이점은 ARIMA의 경우 시계열의 비정상성(Non-stationary)을 설명하기 위해 관측치간의 차분(Diffrance)을 사용한다는 차이점이 있다.

ARMA와 ARIMA 외에도 ARIMAX 등의 방법도 있는데, 이는 본 포스트에서 살펴보지 않는다.

AR : 자기회귀(Autoregression). 이전 관측값의 오차항이 이후 관측값에 영향을 주는 모형이다. 아래 식은 제일 기본적인 AR(1) 식으로, theta는 자기상관계수, epsilon은 white noise이다. Time lag은 1이 될수도 있고 그 이상이 될 수도 있다.

: 자기회귀(Autoregression). 이전 관측값의 오차항이 이후 관측값에 영향을 주는 모형이다. 아래 식은 제일 기본적인 AR(1) 식으로, theta는 자기상관계수, epsilon은 white noise이다. Time lag은 1이 될수도 있고 그 이상이 될 수도 있다. I : Intgrated. 누적을 의미하는 것으로, 차분을 이용하는 시계열모형들에 붙이는 표현이라고 생각하면 편하다.

: Intgrated. 누적을 의미하는 것으로, 차분을 이용하는 시계열모형들에 붙이는 표현이라고 생각하면 편하다. MA: 이동평균(Moving Average). 관측값이 이전의 연속적인 오차항의 영향을 받는다는 모형이다. 아래 식은 가장 기본적인 MA(1) 모형을 나타낸 식으로, beta는 이동평균계수, epsilon은 t시점의 오차항이다.

현실에 존재하는 시계열자료는 불안정(Non-stationary)한 경우가 많다. 그런데 AR(p), MA(q) 모형이나, 이 둘을 합한 ARMA(p, q)모형으로는 이러한 불안정성을 설명할 수가 없다.

따라서 모형 그 자체에 이러한 비정상성을 제거하는 과정을 포함한것이 ARIMA모형이며 ARIMA(p, d, q)로 표현한다.

위와 같은 특징에 따라 ARMIA(p, d, q)는 AR, MA, ARMA를 모두 표현할 수 있다.

AR(p) = ARIMA(p, 0, 0)

MA(q) = ARIMA(0, 0, q)

ARMA(p, q) = ARIMA(p, 0, q)

이 외에도 ARIMA와 관련한 많은 내용이 있으나, 본 포스트에서는 생략하고 이후 포스트 진행에 필요한 부분들이 있으면 간략하게 설명하겠다. 참고할만한 서적으로는 ARIMA를 포함하여 통계적 시계열분석의 Standard라고 할 수 있는 Box, George; Jenkins, Gwilym (1970). Time Series Analysis: Forecasting and Control.(아마존 링크)를 참조하시면 좋을 듯 하다.

데이터

본 포스트에서 ARIMA를 이용한 예측에 사용할 데이터는 Blockchain Luxembourg S.A에서 Export한 최근 60일간의 비트코인 시세와 관련된 자료이다.

CSV파일로 Export했으며, Column name만 수동으로 추가하여주었다.

Date Price 2017-10-12 5325.130683333333 2017-10-13 5563.806566666666 2017-10-14 5739.438733333333 … …

미화(USD)기준 가격 변동임에도, 며칠전 일련의 사태(비트코인 플래티넘 등)로 폭등했던 흔적이 남아있다.

import pandas as pd series = pd.read_csv(‘market-price.csv’, header=0, index_col=0, squeeze=True) series.plot()

ARIMA 모수 설정

ARIMA의 모수는 크게 3가지가 있다. AR모형의 Lag을 의미하는 p, MA모형의 Lag을 의미하는 q, 차분(Diffrence)횟수를 의미하는 d 가 그것이다. 보통은 p, d, q의 순서로 쓴다.

통상적으로 p + q < 2, p * q = 0 인 값들을 많이 사용한다. 여기서 p * q = 0 이라 하면, 두 값중 하나는 0이라는 이야기이다. ARIMA는 AR모형과 MA모형을 하나로 합쳤다면서 둘 중 하나의 모수가 0인건 또 무슨소리? 라고 할지 모르겠지만, 실제로 대부분의 시계열 자료에서는 하나의 경향만을 강하게 띄기 때문에, 이렇게 사용하는것이 더 잘 맞는다고 한다. 그렇다면, p와 d, q는 어떻게 정해야 할까? Rules of thumb이긴 하지만 ACF plot와 PACF plot을 통해 AR 및 MA의 모수를 추정할 수 있다. ACF(Autocorrelation function) : Lag에 따른 관측치들 사이의 관련성을 측정하는 함수 PACF(Partial autocorrelation function) : k 이외의 모든 다른 시점 관측치의 영향력을 배제하고 와 두 관측치의 관련성을 측정하는 함수 시계열 데이터가 AR의 특성을 띄는 경우, ACF는 천천히 감소하고 PACF는 처음 시차를 제외하고 급격히 감소한다. 반대로, MA의 특성을 띄는 경우 ACF는 급격히 감소하고 PACF는 천천히 감소한다. 급격히 감소하는 시차를 각 AR과 MA 모형의 모수(p, q)로 사용할 수 있다. 또한 데이터를 차분하여 ACF 및 PACF 계산함으로써 적절한 차분횟수까지 구할 수 있다 (Robert Nau @Duke university). 본 포스트에서는 python package인 statsmodels를 사용하여 ACF 및 PACF를 계산했으며, 비트코인 가격 자료의 ACF 및 PACF는 다음과 같다. import matplotlib.pyplot as plt from statsmodels.graphics.tsaplots import plot_acf, plot_pacf plot_acf(series) plot_pacf(series) plt.show() ACF를 보면 20의 Time lag을 기준으로 자기상관이 양에서 음으로 변동한다. 또한 PACF는 1의 Time lag에서 약 0.9를 보이고 이후에 급격히 감소한다. 따라서 p=0, q=1이 적당하다고 추측할 수 있다. 적절한 차분 차수의 계산을 위해 우선 1차 차분을 하고, ACF 및 PACF를 다시 계산한다. import matplotlib.pyplot as plt import pandas as pd from statsmodels.graphics.tsaplots import plot_acf, plot_pacf diff_1=series.diff(periods=1).iloc[1:] diff_1.plot() plot_acf(diff_1) plot_pacf(diff_1) plt.show() 차분 결과를 보니, 12월 초에 있었던 급등락이 더 도드라져보인다…2500만원에 물리신분들께 애도.. 아무튼, 차분이후의 ACF와 PACF를 보니, 시계열이 정상상태(Stationary)를 보이는것으로 생각되므로, 1차차분 만으로 충분할것같다. 따라서 본 데이터에는 ARIMA(0,1,1)을 사용하기로 한다. 모형구축 ARIMA(0,1,1)을 이용하여 모형의 Parameter를 추정하고, 결과를 확인한다. from statsmodels.tsa.arima_model import ARIMA model = ARIMA(series, order=(0,1,1)) model_fit = model.fit(trend='c',full_output=True, disp=1) print(model_fit.summary()) ARIMA Model Results ============================================================================== Dep. Variable: D.Price No. Observations: 58 Model: ARIMA(0, 1, 1) Log Likelihood -442.285 Method: css-mle S.D. of innovations 495.214 Date: Wed, 13 Dec 2017 AIC 890.570 Time: 13:10:49 BIC 896.751 Sample: 10-13-2017 HQIC 892.977 - 12-09-2017 =================================================================================== coef std err z P>|z| [0.025 0.975] ———————————————————————————– const 166.9630 91.874 1.817 0.075 -13.107 347.033 ma.L1.D.Price 0.4200 0.131 3.199 0.002 0.163 0.677 Roots ============================================================================= Real Imaginary Modulus Frequency —————————————————————————– MA.1 -2.3811 +0.0000j 2.3811 0.5000 —————————————————————————–

‘P > z’ 값이 일반적으로 학습의 적정성을 위해 확인되는 t-test값이다. 즉, p value 0.05수준에서 보면 MA(1)의 계수는 유효하고, 모형의 Constant는 유효하지 않다…(슬픔)

따라서, 위 코드에서 model.fit()의 파라미터중 trend=’c’가 아니라 ‘nc’로 설정해주어야 하는게 옳다.

from statsmodels.tsa.arima_model import ARIMA model = ARIMA(series, order=(0,1,1)) model_fit = model.fit(trend=’nc’,full_output=True, disp=1) print(model_fit.summary())

ARIMA Model Results ============================================================================== Dep. Variable: D.Price No. Observations: 58 Model: ARIMA(0, 1, 1) Log Likelihood -443.856 Method: css-mle S.D. of innovations 508.665 Date: Wed, 13 Dec 2017 AIC 891.712 Time: 14:08:16 BIC 895.833 Sample: 10-13-2017 HQIC 893.318 – 12-09-2017 =================================================================================== coef std err z P>|z| [0.025 0.975] ———————————————————————————– ma.L1.D.Price 0.4514 0.123 3.657 0.001 0.209 0.693 Roots ============================================================================= Real Imaginary Modulus Frequency —————————————————————————– MA.1 -2.2152 +0.0000j 2.2152 0.5000 —————————————————————————–

예측

constraint가 없는 모형으로 fitting하고 나니, MA(1)의 t-test값이 0.001로 더 좋아졌다.

이제, 모형을 통해 예측된 값을 보자.

model_fit.plot_predict()

fitting이 잘 된것으로 보인다.

또한, 앞으로의 값을 예측하기 위해서는 forecast method를 사용할 수 있다. 코드에서 steps는 예측할 개수를 의미한다.

fore = model_fit.forecast(steps=1) print(fore)

위 코드의 결과는 아래와 같은데, 순서대로 예측값, stderr, upper bound, lower bound 이다.

(array([ 15061.16108756]), array([ 508.66521867]), array([[ 14064.19557878], [ 13303.94590548]]))

즉, 가장 즁요한 예측값은 15061달러인데, 학습에 쓰인 데이터가 12월 9일까지이므로, ARIMA모형은 12월 10일의 비트코인 가격을 15,061달러로 예측하였다.

참고로, 같은 사이트에서 획득한 12월 10일의 실제 비트코인 가격은 아래와 같다.

마치며

최근 딥러닝, 인공지능 등의 트랜드와 함께 시계열분석에도 인공신경망이 널리 사용되고 있다.

특히 시계열분석에는 RNN, LSTM 등을 이용할 수 있지만, 신경망모델의 가장 큰 단점은 (아직까지는)제대로 된 모형해석이 거의 안된다는 점이다.

알고리즘적인 측면에서야 성능이 잘나오면 되는거지만 데이터과학, 특히 의사결정 지원 시스템(Decision support system)에서는 최종 결정권자는 사람이기에 모형이 그렇게 예측한 근거가 필요하다.

이러한 관점에서 보았을 때, AR, MA 등과 같은 고전적인 통계기반의 시계열분석법이 아직은 조금 더 우위에 있지 않나 한다.

(물론 신경망모형이 대부분 컴퓨터비전이나 자연어처리에 신경쓰고 있기 때문에 시계열모형 그 자체로써 고려는 아직 부족한 점도 한몫 한다.)

ARIMA에 관해 통계적 기반이나 지식을 포함하여 더 알고싶다면 위에서 언급한 Box, George; Jenkins, Gwilym (1970). Time Series Analysis: Forecasting and Control. 이나, Robert Nau @Duke university의 강의자료를 참고하면 좋다.

Python 시계열 분석

학교 수업으로 시계열분석을 듣고 싶었지만, 커리큘럼상 문제로 중요한 시계열분석을 듣지 못하고 졸업을 해야할 것 같습니다 ㅠㅠ

그래서 요즘은 youtube나 블로그로도 시계열분석에관한 핵심내용이 정리가 잘 되어 있어 youtube를 통해 공부한 python 시계열분석에대한 내용을 포스팅하도록 하겠습니다!! 아래 유튜브 채널을 통해 공부를 하였는데 참 쉽고 설명을 잘해주셨더라구요 감사의 말씀을 드립니다!

출처 : https://www.youtube.com/watch?v=ZwjMJyA3r5s

특정 간격을 갖는 시간 즉 (Lag)

Lag에서 Data의 Trend를 찾는것이 목적입니다.

대표적 일변량 정상시계열모델인 ARIMA 모델이 있습니다.

시계열분석은 크게 4가지 특성이 있습니다.

1) Trend : 추세

2) Seasonality : 계절성

3) Cycle : 주기

4) Noise : 잡음 -> White Noise

다음은 시계열분석을 python으로 진행해보겠습니다.

아래와 같이 날짜로 이루어진 Datetime칼럼을 pd.to_datetime을 통해 datetime형태로 변환하고

각 year, month, week, day_name으로 새로운 칼럼을 생성합니다.

아래와 같이 데이터프레임을 생성합니다.

날짜별 구매금액의 합계를 시계열로 보기위해 pivot_table을 생성하였습니다.

pivot_table로 x축에 datetime, y축에 구매금액을 두고 라인플랏을 그립니다.

아래는 index를 날짜뿐만아니라 물품의 종류까지 포함해서 구매금액의 합계를 pivot으로 변환하였습니다.

pivot_table로 x축에 datetime, y축에 구매금액을 두고 라인플랏을 그립니다.

여기까지 물품들의 합계별 간단한 라인플랏을 그려보았습니다.

다음으로 시계열분석을위해 ARIMA모델에 대해 설명을 드리겠습니다.

ARIMA(Auto Regressive Intergated Moving Average Model) = AR(Auto Regressive Model) + MA (Moving Average Model) + Difference (차분)가 합쳐진 모델입니다.

1) AR : 자기회귀모델

– p 시점 전의 자료가 현재 시점의 데이터에 영향을 주는 자기회귀모델

– 단점 : 외부적인 변동이 일어날 수 있음

– ACF(Auto corr func) : 자기상관함수 / 특정 구간내 데이터간 상관관계

ex) 교회수 증가 범죄율증가 (상관관계만 보면 높다 나오지만 인구가 증가해서 교회도 증가하고 범죄율도 증가한것)

두개의 종속변수(독립적변수)가 상관관계가 있는것 처럼 나올 수 있다.

– PACF(particial Auto corr func) : 위의 문제를 방지하기위해 나온 것, 부분자기상관함수

2) MA : 이동평균모델

– 일정한 구간 데이터의 평균을 계산해, 미래를 예측하는 모델

3) Difference : 차분

– 정상적이지 못한 데이터에 대해서 차분을 실시해 데이터를 어느정도 정상적으로 만들어줌 (정상성을 잡아주는)

ARIMA모델의 특징은 다음과 같습니다.

1. 단기예측에 적합

2. 계절적 변동요인 (주기적 변동)

3. Sample수 > 50

4. 정성적자료

-> 차분

다음은 시계열 분해에 대해 설명을 드리겠습니다.

들어가기전에 데이터프레임에 만약 null값이 있을때는 보통 fillna를 통해 평균값을 대체하거나 하지만 시계열모델은

.fillna(method=’bfill’)를 통해 이전값을 대체자료로 넣거나

.fillna(method=’ffill’)를 통해 다음값을 대체자료로 넣으니 참고하시면 좋을 것 같습니다!

시계열 분해

1. Trend (추세요인)

2. Seasonality (계절요인)

3. Cycle/Residual (불규칙 또는 순환 요인)

이 있습니다.

위에서 생성된 데이터프레임을 날짜를 인덱스로 다시 생성한 후 resample을 1day의 평균으로 생성합니다.

통계적모델을 import합니다.

아래와 같이 각각 추세, 계절성, 잔차등의 시계열 분해가 이루어집니다.

각각의 p, d, q라는 파라미터 중 어떤 모델의 성능이 가장 좋은지 알아보기 위해 파라미터를 생성하였습니다.

아래와 같이 이중 for문을 통해 SARIMAX라는 모델을 적용해 위에서 만들어낸 파라미터를 각각 대입하여 어떤 모델일때 성능이 가장 좋은지 확인하는 과정입니다.

아래는 위의 과정을 데이터프레임으로 바꾸고 AIC가 낮은 순으로 정렬한 모습입니다. 통계적으로 모델의 성능을 따질 때는 보통 AIC가 낮은 값이 성능이 좋다고 볼 수 있습니다.

아래는 모델의 결과를 요약한 내용입니다. 비전공자이신 분들은 각각이 무엇을 의미하는지 어려울 수 있기 때문에 설명을 드리도록 하겠습니다.

우선 z값은 분산에 대한 오차로 p값을 판별할 때의 검정 통계량을 활용할 수 있습니다.

위의 내용들을 이해하기 위해서는 간단하게 Likelihood(최대우도)라는 개념이 필요합니다.

– Likelihood (최대우도) : 특정 데이터가 모수로부터(모집단) 추출되었을 가능도

– 특정값에대한 분포의 확률을 추정합니다.(연속 확률 밀도 함수 pdf의 y값)

– 확률분포에서 y값을 계산하는것 입니다.

ex) 80점인 학생이 이 분포의 몇 %다.

– AIC (AKaike Information Criterion) : 데이터에 대한 모델의 상대적 품질

– AIC = -2 ln(L) + 2k(특정 파라미터 값)

– 값이 낮을수록 모형 적합도가 높은것을 의미 합니다.

– BIC (Bayes Information Criterion)

– BIC = -2 ln(L) + log(n)p

– 변수가 더 많은 경우. AIC에 더 많은 패널티를 부여해 계산된 값입니다.

– HQIC (Hannan Quinn Information Criterion)

– HQIC = -2 ln(L) + 2k ln(ln(n))

위의 모델에서 사용한 SARIMAX는

SARIMAX(seasonal arima 모델)

– 트렌드여부에대해 arima모델을 생성하고 계절성에 대해서도 arima모델을 추가적으로 수행한 모델입니다.

– order가 계절성이 없는 파라미터가 들어가고 + 계절성이 들어간 파라미터를 추가해서 만든 모델입니다.

– Order (p,d,q), Seasonal Order (P,D,Q,M)

– p : AR에서의 p값 (p 구간 내 데이터 사이의 상관관계)

– d : 차분

– q : q MA PACF 편상관계수 q 값

– P : 계절성주기에서의 패턴이 어떻게 되는가?

– D : 계절성여부

– Q : 주기의 패턴이 얼마나 반복되는지 계절성이 얼마나 반복되는지 횟수

– M : 계절성 주기가 어떻게 되느냐 주기의 값

– Ljung – Box Test : 일정 기간동안 관측치가 랜덤이고, 독립적인지 여부를 검정

– 귀무 : 데이터가 상관관계를 나타내지 않는다.

– 대립 : 데이터가 상관관계를 나타낸다.

– p.value(귀무가설이 참일 확률) < 0.05 (유의수준) - Jarque Bera Test : 왜도와 첨도가 정규분포와 일치하는지 가설검정 - SARIMAX : 잔차의 분포가 정규분포인가 - 귀무 가설 : 해당 잔차(residual)는 정규분포와 일치한다. - 대립 가설 : 해당 잔차(residual)는 정규분포와 일치하지 않는다. - p.value < 0.05 정규분포를 띄지 않는다. - Skew : 왜도 (얼마나 뾰족한가 얼마나 한쪽으로 쏠려있는가) - Kurtois : 첨도 여기까지 python을 이용한 시계열분석을 공부한 내용입니다. 데이터 분석에서 중요한, 시계열데이터분석을 하는데 조금이나마 도움이 되었으면 합니다. 긴글 읽어주셔서 감사합니다 🙂

Time Series Forecasting (3) 파이썬을 이용한 시계열 예측 모델링 – ARIMA (Auto regressive-integrated-moving average), Auto ARIMA

Time Series Forecasting (2) 파이썬을 이용한 시계열 예측 모델링 – ARIMA (Auto regressive-integrated-moving average), Auto ARIMA

ARIMA 모델은 지나고보니… 가장 traditional하고 오래된만큼 여러 분야의 시계열 연구에 많이 쓰이고, 오래됐음에도 정확도가 나쁘지 않은 편인 것 같다. 공부하는 입장에서 이 모델의 최대 장점은 많이 쓰인만큼 자료가 많다는거다. 땡큐 슨배님들 계속해서 많은 자료를 남겨줘,,, 그럼에도 역시나 한국어 자료는 비교적 적다. 내가 1년에 몇개 안되지만 생각날때마다 개발 포스팅을 남기는 이유!

1. 데이터 계절성 체크하기.

ARIMA 모델을 공부하기 전에 제발 내가 미리 알았더라면 좋았을 건.

이 모델은 가지고 있는 시계열 데이터가 정산성을 보일 때, 즉 데이터가 stationary할 때 최대로 유용하다는 점이다. 이게 무슨 개소리냐고 생각할 수 있다. 그거슨 매우 정상 – stationarity란 계절성을 말하는데, 데이터가 계절에 따라 비슷하거나 다른 점이 있을 때, 계절이 아니더라도 어떤 주기를 가지고 움직일 때 stationary 하지 않다고 한다. 계절성이 없을 때, 즉 주기가 없을 때 stationary하다고 표현한다. 시계열 분석할 때 데이터가 계절성을 띄는지 안띄는지 분석하고 모델링을 해야 헛짓거리를 줄일 수 있다. 그러므로 아직 안했다면 아래 포스팅을 통해 미리 데이터가 Stationary한지 체크하고 오자.

2022.01.21 – [COMPUTER SCIENCE/Textmining & Spatial Analysis] – 시계열 분석 데이터 Stationarity check – 파이썬으로 데이터의 계절성/주기성 파악하기 (1) ACF, PACF 플롯 그리고 해석하기

2. ARIMA 모델 이해

ARIMA 모델은 AR-I-MA 를 합친 용어다. 아뤼마라니 모델 이름치고 참으로 우아함. LSTM 같은 이름보다 아주 보드랍고 간지럽단 말이징 아무튼 아래 표를 위에서 아래로 차례차례 이해하면 ARIMA가 뭔지 조금이라도 쉽게 알아들을 수 있다. 왼쪽이 모델명이고 오른쪽이 모델에 대한 설명이다.

시계열 데이터가 있다고 치면, 예측하려는 값으로부터 >>

AR (Auto-regressive) / AR(p) AR(p) 모델은 p개의 과거 값들을 이용해 예측한다. MA (Moving average) / MA(q) MA(q) 모델은 q개의 과거 오차 값들을 이용해 예측한다. ARMA(p,q) ARMA(p,q) 모델은 p개의 과거 값과 q개의 과거 오차 값들을 이용해 예측한다. ARIMA(p,d,q) 데이터를 d회 차분하고 p개의 과거 값과 q개의 오차 값을 이용하여 예측

그 후 다시 비차분화(차분한 값을 다시 원래의 값으로 변화)하여 예측값 생성

즉 ARIMA 모델에서 변수 p,d,q 의 의미는

p: the number of lag observations in the model; also known as the lag order (AR)

–> p개 전 값부터 주르륵 과거 값을 이용함 (p개의 과거 값들을 이용해 예측)

d: the number of times that the raw observations are differenced; also known as the degree of differencing (I)

–> d 만큼 차분함

q: the size of the moving average window; also known as the order of the moving average (MA)

–> q개 전 값부터 주르륵 오차 값을 이용함

예측컨대 아마도 데이터를 d회 차분한다는 부분에서부터 이게 무슨 소리지 했을 것.. 아니면 말고..

differencing은 데이터를 stationary 하게 만들기 위한 과정이다.

a,b,c,d,e,f,…z 라는 시계열테이터가 있다고 치면 1회 차분하면

b-a, c-b, …, z-y 가 된다. 이 데이터를 가지고 다시 한번 stationarity 를 검사한다. 아직도 계절성이 있으면 다시 한번 차분한다.

데이터가 계절성이 없어지면 그 상태에서 AR과 MA 모델을 돌린 후, 다시 차분한 d횟수 만큼 과거값을 더해주면서 돌아온다.

이 차분 과정을 통해 AR, MA 모델을 계절성없는 데이터로 돌려서 효율을 높이는 것이다.

3. Python으로 ARIMA 모델 돌리기

예시로, 뉴욕시의 2020년 2월 16일부터 2020년 12월 27일까지 매주 일요일 집계된 코로나로 인한 사망률 데이터를 이용해서 마지막 4주간의 사망률을 예측해보겠다.

먼저 필요한 package들을 import 한다.

# 패키지 임포트 import os import numpy as np import pandas as pd from pandas import to_datetime from matplotlib import pyplot as plt import seaborn as sns import itertools import warnings import datetime from datetime import datetime warnings.filterwarnings(‘ignore’) %matplotlib inline # ARIMA 모델 패키지 from statsmodels.tsa.arima_model import ARIMA from statsmodels.tsa.api import ExponentialSmoothing, SimpleExpSmoothing, Holt from sklearn.metrics import mean_squared_error from sklearn.linear_model import LinearRegression from sklearn import linear_model # Auto Arima 모델 패키지 # pip install –user pmdarima import pmdarima as pm from pmdarima.model_selection import train_test_split

그 후 Pandas DataFrame 타입의 인풋 데이터를 준비한다. 아래와 같이 datetime 타입의 ‘date’ 라는 열과 float 타입의 ‘death_rate’라는 열을 만들었다. 이 인풋데이터를 forecast_data 라고 저장했다고 가정하자.

그 후, 이 데이터를 training 데이터와 validation 데이터로 나눈다.

training 데이터를 이용해서 모델을 훈련하고, validation 데이터를 이용해서 모델의 성능을 확인할 것이다.

2020년 12월 12일까지의 데이터를 이용해서 훈련, 12월 6일 이후의 값을 예측한 후, 실제 12월 6일 이후의 값과 비교해서 성능을 확인한다.

# train 데이터와 validation 데이터 나누기. X_train = forecast_data[forecast_data[‘date’] < '2020-12-13'] X_valid = forecast_data[forecast_data['date'] >= ‘2020-12-06’] # 예측한 열만 필터링하기 nyc = X_train[[‘date’, ‘death_rate’]] nyc_v = X_valid[[‘date’, ‘death_rate’]] # 각 데이터의 사이즈 확인하기 print(‘X_train Shape’, X_train.shape) print(‘X_Valid Shape’, X_valid.shape)

시계열 데이터의 시간을 담당하는 부분은 꼭 datetime 타입으로 전환해서 사용해야 된다.

# Date 를 dataframe의 인덱스로 만들어주기 nyc.set_index(‘date’, inplace=True) nyc_v.set_index(‘date’, inplace=True)

# 4주간의 값을 예측할 것이므로 예측날짜들을 인덱스로 한 dataframe 만들기 index_4_weeks = pd.date_range(nyc.index[-1], freq=’W’, periods = 4, tz = None) # 확인해보기 index_4_weeks

결과값:

DatetimeIndex([‘2020-12-06’, ‘2020-12-13’, ‘2020-12-20’, ‘2020-12-27′], dtype=’datetime64[ns]’, freq=’W-SUN’)

본격 모델 돌리기..

order= 뒤에 (p,d,q)의 값을 정해 넣어주면 된다.

# order 에 파라미터 넣어주기. model_arima = ARIMA(nyc, order=(1,0,2)) model_arima_fit = model_arima.fit(disp=-1) # 예측한 값들을 저장 fcast1 = model_arima_fit.forecast(4)[0] fcast1 = pd.Series(fcast1, index=index_4_weeks) fcast1 = fcast1.rename(“Arima”) # 확인 fcast1

결과값:

2020-12-06 0.774338 2020-12-13 0.930663 2020-12-20 1.069161 2020-12-27 1.000975 Freq: W-SUN, Name: Arima, dtype: float64

이제 예측된 값을 시각화해보자.

# 예측값 plot 하기 fig, ax = plt.subplots(figsize=(15,5)) chart = sns.lineplot(x=’date’, y=’death’, data = nyc) chart.set_title(‘New York-Newark-Jersey City COVID-19 Induced Death’) fcast1.plot(ax=ax, color=’red’, marker=”o”, legend=True) nyc_v.plot(ax=ax, color=’blue’, marker=”o”, legend=True) # AIC 프린트하기 print(‘The MSE of ARIMA is:’, mean_squared_error(nyc_v[‘death’].values, fcast1.values, squared=False))

결과값:

The MSE of ARIMA is: 0.09129622751300906

최적의 (p,d,q)값을 찾기 위해선 어떻게 해야할까?

우선 첫번째 방법은 가능한 모든 (p,d,q)값을 돌려보고 가장 높은 정확도를 주는 쌍을 고르는 것이다. for문을 통해서 p,d,q 가 각각 0부터 4까지의 값일 때 AIC (Akaike information criterion) 가 얼마정도 되는지 프린트 한다. 프린트된 결과를 보고, 가장 낮은 값을 가진 p,d,q 쌍을 고르면 된다.

import itertools p=d=q=range(0,5) pdq = list(itertools.product(p,d,q)) for param in pdq: try: model_arima = ARIMA(chicago,order=param) model_arima_fit = model_arima.fit() print(param,model_arima_fit.aic) except: continue

결과값 예시:

이 예시에서는 (1,0,4) 쌍이 제일 AIC가 낮다.

4. Auto-ARIMA 모델

두번째는 Auto-ARIMA 모델을 이용하는 것이다. 앞에서는 직접 iteration을 돌려보고 최적의 p,d,q 값을 정해야했지만, Auto-ARIMA 모델을 이용하면 모델이 알아서 최적의 값을 정해준다. 하지만 결과를 보면 알 수 있듯이, 직접 최적 값을 찾을 때와 값이 다른 것을 알 수 있다. Auto-ARIMA 모델은 AIC 만 보는 것이 아니라 복합적인 척도가 있기 때문이라고 한다.

# Auto-ARIMA 돌리기 – 계측값이 일별이면 m=1, 월별이면 m=12, 주별이면 m=52, # 계절성이 있는 데이터면 seasonal=True 로 바꿔야함. 알아서 d 값을 찾아줌. auto_arima_model = pm.auto_arima(nyc, seasonal=False, m=52) # 모델 예측 fcast2 = auto_arima_model.predict(4) fcast2 = pd.Series(fcast2, index=index_4_weeks) fcast2 = fcast2.rename(“Auto Arima”) # 예측값 시각화 fig, ax = plt.subplots(figsize=(15,5)) chart = sns.lineplot(x=’date’, y=’death’, data = nyc) chart.set_title(‘New York-Newark-Jersey City’) fcast2.plot(ax=ax, color=’red’, marker=”o”, legend=True) nyc_v.plot(ax=ax, color=’blue’, marker=”o”, legend=True) # AIC 프린트하기 print(‘The MSE of auto-arima is:’, mean_squared_error(nyc_v[‘death’].values, fcast2.values, squared=False))

결과값:

The MSE of auto-arima is: 0.5152136019417364

짜잔.

아리마에 대한 공부는 유튜브를 통해 제일 많이했다.

여기서 가장 많이 참고한 영상은 요것이다.

Reference: https://www.youtube.com/watch?v=axjgEgBgIY0

무료이미지

다음에 기회가 되면 Vector AR 모델 (VAR), 페이스북에서 만든 Facebook Prophet 모델을 알아보겠다.

반응형

키워드에 대한 정보 시계열 분석 예제

다음은 Bing에서 시계열 분석 예제 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석

  • 데이터 분석
  • 데이터 과학
  • 데이터
  • 데이터과학자
  • 데이터분석가
  • 파이썬
  • python
  • datascientist
  • datascience
  • data
  • 데이터분석 배우기
  • 데이터분석 책
  • 데이터 과학 책
  • 데이터 분석 책 추천
  • 데이터 분석 기초
  • 데이터 분석 강의
  • 데이터 분석 강좌
  • 데이터 분석 입문
  • 데이터 분석 무료 강의
  • 윤기태
  • ARIMA
[이것이 #데이터 #분석이다 #with #파이썬_11] #시계열 #예측 #분석


YouTube에서 시계열 분석 예제 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [이것이 데이터 분석이다 with 파이썬_11] 시계열 예측 분석 | 시계열 분석 예제, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  Na Zakolu Wisły 12 | Miracle On The Vistula. Battle Of Warsaw 1920. 상위 62개 답변

Leave a Comment