시계열 분석과 예측을 위한 쉬운 안내
시계열 분석과 시계열 예측의 핵심 개념을 다루며, 고전적 방법부터 최신 Machine Learning 모델까지를 Python 예시와 함께 폭넓게 소개합니다. 이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려 주세요.
Created on September 12|Last edited on September 12
Comment

작성자 제공 이미지.
미래가 어떻게 보일지 안다면 무엇을 하시겠습니까? 어떤 사람들에게는 그 답이 “2017년에 비트코인을 사기”일 수 있습니다. 소매업자들에게는 “2019년에 화장지나 실리콘 칩을 미리 비축하기”가 답일 수도 있겠죠. 답이 무엇이든, 미래에 대한 정보를 갖는 것이 유리하다는 점에는 모두 동의할 것입니다.
우리는 오랫동안 점쟁이들에게 미래를 물어왔지만, 미래를 예측하는 일은 여전히 어렵습니다. 오늘날의 기술을 가지고도 한 시간 뒤의 날씨 예보조차 크게 틀릴 수 있습니다. 그러나 일부 활용 사례에서는 시계열의 거동을 충분히 잘 모델링하여 미래에 대한 꽤 정확한 예측을 만들 수 있습니다.
시계열 분석과 예측은 범위가 넓어 부담스럽게 느껴질 수 있습니다. 따라서 이 글에서는 두 분야의 핵심 개념을 소개합니다. 일부 개념을 보여 주기 위해 Python 코드 예시와 해당 라이브러리의 방법들을 활용하겠습니다. statsmodels [10]. 본격적으로 시작해 봅시다!
목차
목차시계열 예측과 시계열 분석의 정의시계열이란 무엇인가?시계열 분석이란 무엇인가?시계열 예측이란 무엇인가?시계열 분석과 예측의 활용 사례시계열 분석의 기초시계열의 구성 요소정상성이란 무엇이며, 시계열 분석에서 왜 중요한가요?시계열 예측의 기초널리 사용되는 시계열 예측 모델 시계열 예측 모델 학습과 검증결론시계열 분석 및 예측을 위한 추천 읽을거리참고문헌
시계열 예측과 시계열 분석의 정의
이 섹션에서는 세 가지 핵�� 용어를 정의합니다: 시계열, 시계열 분석, 시계열 예측.
시계열이란 무엇인가?
시계열은 시간에 의존하는 데이터 포인트들의 순서를 말합니다. 즉, 각 데이터 포인트에는 타임스탬프가 붙어 있습니다. 이상적으로는 이 데이터 포인트들이 일정한 간격(예: 매일)으로, 그리고 시간 순서(예: 월요일, 화요일, 수요일 등)대로 측정됩니다.

가상의 예시 시계열을 선 그래프로 시각화한 그림(작성자 제공)
시계열은 보통 매출 데이터처럼 수치형 값이지만, 이벤트 데이터처럼 범주형일 수도 있습니다. 시계열 데이터는 일반적으로 타임스탬프용 열과 최소 하나의 시계열 값 열을 포함한 표 형식(예: CSV 파일)으로 제공됩니다.

CSV 파일에서 가져온 후 pandas DataFrame으로 표시한 가상의 예시 시계열(작성자 제공)
시계열 분석이란 무엇인가?
시계열 분석은 변수 간의 관계와 이상치를 분석한다는 점에서 데이터 사이언스 워크플로의 탐색적 데이터 분석(EDA)과 유사합니다 [3, 9]. 또한 장기 추세나 단기 반복 패턴을 찾아내는 것이 목표입니다 [3, 9].
표준 EDA 기법과 마찬가지로, 평균과 표준편차 같은 통계적 특성을 계산하고 시각화하는 일은 시계열 분석에서도 필수적입니다 [9]. 다만 시간이라는 추가 차원을 탐색하기 위해서는 추가적인 방법을 사용해야 합니다(참고: 시계열 분석의 기초)."

시계열 분석(작성자 제작, [9]에서 영감받음)
한편으로 시계열 분석은 그 자체로 독립적인 개념일 수 있습니다. 다른 한편으로, 시계열 예측 워크플로에서 EDA 단계로 수행될 수도 있는데, 시계열과 그 패턴에 대해 얻는 통찰이 어떤 모델을 사용할지 결정하는 데 도움을 주기 때문입니다 [9].
시계열 예측이란 무엇인가?
시계열 예측에서는 관측값의 연속이 앞으로 어떻게 이어질지를 예측하려고 합니다. 이를 위해 먼저 시계열 분석과 유사하게 과거 데이터를 분석합니다. 그런 다음 예측을 수행하기 위해 과거 데이터에 모델을 적합합니다.

시계열 예측(작성자 제작)
시계열 예측에는 매우 다양한 문제 설정이 있습니다. 다음과 같은 측면에서 서로 다를 수 있습니다:
- 예측할 관측 시계열의 개수(단변량 vs. 다변량)
- 예측 기간(단기 vs. 장기)
시계열 분석과 예측의 활용 사례
시계열 분석과 시계열 예측은 다양한 활용 사례가 있습니다. 몇 가지 예만 들면 다음과 같습니다:
- 금융 시계열 예측의 가장 널리 알려진 예 중 하나는 주가 예측입니다. 모두가 다음 Google이나 Amazon이 될 주식을 어떻게 계산해 찾을 수 있는지 알고 싶어 하지만, 이는 시계열 예측 활용 사례 가운데서도 가장 까다로운 과제 중 하나이기도 합니다.
- 날씨 시계열 예측의 또 다른 대표적인 활용 사례는 일기 예보입니다. 이 사례는 예측 지평이 짧을수록(예: 내일의 날씨) 예측 신뢰도가 높고, 예측 지평이 길어질수록(예: 일주일 뒤의 날씨) 일반적으로 신뢰도가 낮아진다는 점을 잘 보여주는 훌륭한 예시이기도 합니다.
- 수요 수요가 존재하는 거의 모든 분야는 시계열 분석과 예측의 훌륭한 활용 사례가 됩니다. 예를 들어 발전량, 매장 재고, 인력 배치, 버스나 항공편의 승객 수, 고속도로 교통량 등이 있습니다.
눈치채셨겠지만, 시계열의 유형에 따라 예측 난이도는 달라집니다. 이는 다음 요인들에 좌우됩니다 [3]:
- 영향 요인들을 우리는 얼마나 잘 이해하고 있나요?
- 우리는 데이터를 얼마나 보유하고 있나요?
시계열 분석의 기초
이 섹션에서는 시계열 분석의 핵심 개념 몇 가지를 소개합니다. 시계열의 구성 요소와 정상성입니다.
시계열의 구성 요소
예측 방법을 선택할 때는 먼저 시계열 데이터의 패턴을 식별하고, 그 패턴을 충분히 포착할 수 있는 모델을 선택해야 합니다[3]. 관측된 시계열은 다음의 다섯 가지 구성 요소로 분해할 수 있습니다:
- 수준: 평균값.
- 추세: 장기적으로 증가하거나 감소하는 경향.
- 계절성: 주간, 월간, 연간처럼 고정된 주기로 반복되는 단기 패턴.
- 주기: 고정된 주기가 아닌 단기 반복 패턴.
- 잡음: 불규칙하거나 심지어 무작위적인 단기 변동.
시계열 데이터에서 계절성과 순환 패턴은 구분하기 어려울 수 있습니다. 만약 반복되는 패턴의 빈도가 달력 기준으로 일정하다면 그 패턴은 계절성입니다. 그렇지 않다면 순환입니다 [3].
우리는 함수를 사용할 수 있습니다 seasonal_decompose() 에서 statsmodels [10] 라이브러리입니다. 이는 기초적인 분해 방법으로, 시계열을 세 가지 성분—추세, 계절성, 잡음(잔차)—으로만 분해합니다 [10].
from statsmodels.tsa.seasonal import seasonal_decompose# The timestamp has to be set as the index of the dataframe dfdecomp = seasonal_decompose(df,model = 'additive',period = 180,extrapolate_trend = 'freq')decomp.plot()

분해된 시계열: 추세, 계절성, 잔차 (Image by the author)
정상성이란 무엇이며, 시계열 분석에서 왜 중요한가요?
정상성은 시계열이 변화하는 방식이 앞으로도 동일하게 유지된다는 개념을 의미합니다 [3]. 수학적으로는 시계열의 통계적 특성(평균, 분산, 공분산)이 시간에 의존하지 않을 때 그 시계열을 정상이라고 합니다 [7].

평균, 분산, 공분산이 시간에 의존하거나 의존하지 않는 경우 (Image by the author).
미래가 과거와 유사할수록 예측이 더 쉽습니다 [3]. 따라서 통계적 특성이 변하지 않는 정상 시계열은 비정상 시계열보다 모델링하기가 더 쉽습니다. 이 때문에 많은 시계열 예측 모델은 정상성을 가정합니다.
시계열이 비정상이라면, 예를 들어 차분을 적용하여 정상화할 수 있습니다.
# Apply differencing to make time series stationarydf["example_diff"] = df["example"].diff()

정상화를 위해 차분을 적용하기 전과 후의 시계열 (Image by the author)
시계열 예측의 기초
이 섹션에서는 널리 사용되는 시계열 예측 모델과 이를 학습하고 검증하는 방법을 다룹니다.
널리 사용되는 시계열 예측 모델
시계열 예측은 매우 다양한 모델로 접근할 수 있습니다. 예측 방법은 마지막 관측값을 그대로 예측으로 사용하는 것처럼 단순한 방법부터, 고전적 방법을 거쳐, 매우 복잡한 ML 모델에 이르기까지 [3] 폭넓게 분포합니다.
단순 접근법: 단순 예측에서는 가장 최근 관측값을 그대로 예측값으로 사용합니다. 이 기본적인 방법은 더 정교한 모델들의 성능을 평가하기 위한 기준선으로 자주 활용됩니다.

시계열 예측: 단순 접근법 (Image by the author)
따라서 Weights & Biases로 실험을 추적할 때 첫 단계로, 실험 결과를 비교할 기준선으로 사용할 수 있도록 단순 접근법으로 베이스라인을 만드는 것을 권장합니다.
💡
회귀 기반 시계열 예측: 회귀 기반 시계열 예측 방법은 대상 시계열이 다른 시계열들과 선형 관계를 가진다고 가정합니다 [3]. 이러한 선형 관계에 대한 가정은 추세를 모형화하게 하지만 아니오 계절성의
지수 평활법: 지수 평활법은 1950년대 후반에 제안된 고전적인 예측 기법입니다 [1, 2, 13]. 이 방법은 상대적으로 적은 메모리만 필요하면서도 신뢰할 수 있는 단기 예측을 빠르게 생성한다는 점에서 널리 사용됩니다 [3].
이 예측 기법은 과거 관측값의 가중 평균을 사용합니다. 모든 과거 관측값에 대해 평균을 취하면 시계열의 잡음이 줄어들어(평활화) 더 매끄러워지고, 관측 시점이 오래될수록 가중치는 지수적으로 감소합니다 [3].
자기회귀누적이동평균(ARIMA): ARIMA는 자기상관에 기반해 시계열을 모형화하는 예측 기법들의 한 범주입니다 [3, 9]. 이 모델들은 다음과 같은 구성 요소들의 조합으로 이루어져 있습니다:
- 자기회귀(AR): 과거 값들의 선형 결합에 기반해 예측을 수행합니다.
- 이동평균(MA): 과거 예측의 오차들을 선형 결합하여 예측을 수행합니다.
Prophet:" Prophet 는 Facebook의 Core Data Science 팀이 개발한, 즉시 활용 가능한 오픈 소스 시계열 프레임워크입니다 [12]. 핵심 아이디어는 시계열을 네 가지 구성 요소로 분해할 수 있다는 가정에 기반합니다: 추세, 계절 요소(예: 주간 또는 연간), 결정적 불규칙 요소(예: 공휴일), 그리고 잡음.
머신 러닝: 최근 몇 년 사이에 시계열 예측에서는 Machine Learning 모델이 큰 인기를 얻고 있습니다. 다양한 시계열 예측 기법을 평가하고 비교하는 일련의 대회인 2020년 Makridakis 대회(M5 competition) [8]에서는 최상의 예측이 Neural Networks 또는 Gradient Boosting 프레임워크 [4, 5, 6]에 의해 산출되었습니다.
시계열 예측 모델 학습과 검증
시계열 예측에서는 시간적 특성 때문에 일반적인 Machine Learning 모델에 사용하는 교차 검증 전략을 그대로 적용할 수 없습니다. 따라서 예측 모델을 학습하고 검증할 때, 학습 데이터는 검증 데이터보다 더 과거의 데이터여야 합니다.
from sklearn.model_selection import TimeSeriesSplitN_SPLITS = 4X = df['timestamp']y = df['value']folds = TimeSeriesSplit(n_splits = N_SPLITS)for i, (train_index, valid_index) in enumerate(folds.split(X)):X_train, X_valid = X[train_index], X[valid_index]y_train, y_valid = y[train_index], y[valid_index]
시간적 특성을 고려하는 것 외에도, 학습을 위해 입력 데이터의 길이를 고정 길이(슬라이딩 윈도우)로 할지, 점차 늘어나는 길이(익스팬딩 윈도우)로 할지 결정할 수 있습니다.

시계열 예측을 위한 교차 검증 (이미지: 작성자 제공)
결론
시계열 분석과 시계열 예측은 범위가 넓어 초보자에게는 부담스럽게 느껴질 수 있습니다. 따라서 이 글은 핵심 개념 몇 가지를 부드럽게 소개하는 데 목적이 있습니다.
우리는 먼저 시계열 분석이 기술적 접근이라는 점을 배웠습니다. 데이터 사이언스 워크플로에서의 EDA와 마찬가지로, 시계열 분석의 목표는 데이터 속 패턴과 관계를 찾는 것입니다. 다만 시간이라는 추가 차원이 존재하므로 그에 맞는 추가적인 분석 관점이 필요합니다.
시계열은 수준, 추세, 계절성, 순환, 잡음의 다섯 가지 구성 요소를 가질 수 있다는 것을 배웠습니다. 이 구성 요소들은 시계열 값과 타임스탬프 사이의 다양한 관계를 나타냅니다. 또한 시계열의 변화 양상이 앞으로도 동일하게 유지될지(정상성) 확인하는 방법도 익혔습니다.
시계열 분석과 달리, 시계열 예측은 시계열 속 패턴을 바탕으로 미래 값을 예측합니다. 일부 예측 사례는 다른 경우보다 예측하기 더 쉽다는 점도 논의했습니다.
또한 우리는 시계열 예측 방법의 일부를 간단한(나이브) 방법부터 고전적 방법(회귀, ARIMA, 지수 평활)과 현대적 방법(Prophet, 신경망, 그래디언트 부스팅 프레임워크)까지 폭넓게 살펴보았습니다. 아울러 시계열 예측 모델을 학습하고 검증할 때에는 시간적 특성을 반드시 고려해야 한다는 점도 배웠습니다.
시계열 분석 및 예측을 위한 추천 읽을거리
참고문헌
[1] R. G. 브라운 (1959). 재고 관리의 통계적 예측. 맥그로-힐.
[2] C. C. 홀트 (1957). 지수 가중 평균을 이용한 계절성과 추세 예측(ONR 메모랜덤 52호). 카네기 공과대학교, 미국 피츠버그. International Journal of Forecasting, 2004년 재수록. https://www.sciencedirect.com/science/article/abs/pii/S0169207003001134?via%3Dihub
[3] R. J. Hyndman, & G. Athanasopoulos (2021). Forecasting: principles and practice, 3rd edition, OTexts: 멜버른, 호주. OTexts.com/fpp3. (2022년 9월 26일 접속).
[4] Y. In(2019) 1위 솔루션. https://www.kaggle.com/competitions/m5-forecasting-accuracy/discussion/163684 (2022년 10월 1일 접속)
[5] "Jeon"(2019). 3위 솔루션 - NN 접근. https://www.kaggle.com/competitions/m5-forecasting-accuracy/discussion/164374 (2022년 10월 1일 접속)
[6] "Matthias"(2019). 2위 솔루션. https://www.kaggle.com/competitions/m5-forecasting-accuracy/discussion/164599 (2022년 10월 1일 접속)
[7] A. Mikusheva (2009) "정상성, 지연 연산자, ARMA, 공분산 구조" 14.384 시계열 분석 강의 노트
[8] MOFC (2017). M5 대회. https://mofc.unic.ac.cy/m5-competition/ (2022년 10월 1일 접속)
[9] D. C. 몽고메리, C. L. 제닝스, 무랏 쿨라흐치 (2015). 시계열 분석과 예측 입문, 제2판, John Wiley & Sons.
[10] J. Perktold, S. Seabold, J. Taylor (2009). statsmodels. https://www.statsmodels.org/stable/index.html (2022년 10월 1일 접속)
[11] "scikit-learn developers"(2007). sklearn.model_selection.TimeSeriesSplit. https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.TimeSeriesSplit.html#sklearn.model_selection.TimeSeriesSplit (2022년 10월 1일 접속)
[12] S. J. Taylor와 B. Letham (2017). 대규모 예측. PeerJ Preprints 5:e3190v2 https://doi.org/10.7287/peerj.preprints.3190v2
[13] P. R. 윈터스 (1960). 지수 가중 이동 평균을 이용한 매출 예측. Management Science, 6(3), 324–342. https://pubsonline.informs.org/doi/10.1287/mnsc.6.3.324
Add a comment