본문 바로가기
ML | DL | Big data/ML

시계열 예측을 지도 학습으로 바꾸는 방법 - Time Series to Supervised Learning with Sliding window

by 썽하 2020. 9. 11.

슬라이딩 윈도우를 통해 시계열 데이터를 지도학습으로 변형하기

Photo by Filip Gielda on Unsplash

 

시계열 데이터 예측(Time series forecasting)은 지도 학습(Supervised learning)으로 변형시킬 수 있다.

이번 글에서는 시계열 문제를 시계열 문제를 머신러닝을 위한 지도 학습으로 어떻게 재구성하는지에 다뤄보고자 한다.

이번 글에서 다룰 내용은 다음과 같다.

 

  • Supervised Learning(지도 학습)은 무엇이고 그것이 어떻게 모든 예측 모델링 머신러닝의 기초가 되는지.
  • 시계열 데이터 집합을 구성하기 위한 슬라이딩 윈도우(Sliding window)를 사용하는 방법
  • 다변량 데이터(multivariate data) 및 다단계 예측(multi-step forecasting)에 슬라이딩 윈도우를 적용하는 방법 

 

자, 그럼 이제 시작해보자.

 

 

Supervised Machine Learning / 지도 학습

대다수의 머신러닝은 지도 학습을 사용한다.

지도 학습은 입력(X)과 출력(y)이 있고 알고리즘을 사용하여 입력에서 출력까지의 맵핑 기능을 학습하는 것이다.

 

y=f(X)

학습의 목표는 학습된 모델을 바탕으로 학습에 쓰이지 않은 새로운 입력 데이터(X)에 대해서 출력(y)을  잘 예측할 수 있도록 하는 것이다. 즉 위의 f(x)라는 함수를 잘 구성하는 것이다.

 

아래는 각 행이 예측해야 할 하나의 입력(X)과 하나의 출력(y)으로 구성된  데이터셋의 예시이다.

X, y
5, 0.7
4, 0.8
5, 1.0
3, 0.7
4, 0.9

지도 학습은 training 데이터셋을 통해 정답을 알고 그 방향으로 지도되는 방식으로 학습되기 때문에 지도 학습이라고 부른다.

즉, 우리는 정답을 알고 있다. 알고리즘은 반복적으로 학습 데이터에 대한 예측을 하고 업데이트를 함으로써 수정된다. 알고리즘이 허용 가능한 성능 수준을 달성하면 학습이 중지된다.

 

지도 학습은 또 크게 다음과 같은 두 가지로 나눌 수 있다.

 

  • Classification(분류) : 우리가 예측할 값이 카테고리인 경우이다. 이미지를 보고 강아지인지 고양이인지 판단하는 문제가 바로 분류에 해당된다.
  • Regression(회귀) : 회귀는 예측할 값이 실제 값인 경우다. 예를 들면 내일 온도가 몇 도인지, 주식의 가격은 얼마일지 예측하는 것들이 있다.

 

Sliding Window / 슬라이딩 윈도우

 

시계열 데이터는 지도 학습으로 표현될 수 있다. 이전 시간의 데이터를 입력(X)으로 사용하고 다음 시간 데이터를 출력(y)으로 사용하면 된다.

 

다음과 같은 시계열 데이터가 있다고 가정하자.

time, 관측값 1, 관측값 2
1,   0.2,   88
2,   0.5,   89
3,   0.7,   87
4,   0.4,   88
5,   1.0,   90

이 시계열 데이터셋을 너비가 1인 윈도우를 통해서 지도 학습으로 재구성해보자.

관측값 1과 관측값 2의 이전 시간 값을 사용한다는 것을 의미한다. 우리가 예측하고 싶은 값이 관측값 2라고 가정해보자.

그렇다면 time 2에서 y=f(X)는 이렇게 쓸 수 있다.

y = f(X1, X2, X3)
89  = f(0,2, 88, 0.5)
현재 관측값 2 = f(직전 관측값 1, 직전 관측값 2, 현재 관측값 1)

모든 시계열 데이터에 대하여 정리해서 써보면 다음과 같다.

 

X1, X2, X3, y
?, ?, 0.2 , 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?

첫 번째 행과 마지막행은 그 이전/이후의 데이터(?로 표기된 것들)가 없으므로 제거해야 할 수도 있다. 

 

그리고 만약 관측값 1과 관측값 2 모두 예측하고 싶을 때는 다음과 같이 하면 된다.

이 경우에도 슬라이딩 윈도우 접근법을 사용하면 된다.

X1, X2, y1, y2
?, ?, 0.2, 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?

 

Sliding Window with Multi-Step Forecasting / 다단계 예측에서의 슬라이딩 윈도우

예측할 미래 단계수는 중요하다.

예측하는 시간의 단계 수에 따라서 다음과 같이 예측 이름을 다르게 표기한다.

 

One-Step Forecast (1단계 예측) : 단순히 다음 시간(t+1)만 예측하는경우

Multi-Step Forecast (다단계 예측) : 여기서 두 단계 이상의 미래 시간(t+1 ~ t+N)을 예측한다.

다단계라고 하니 뭔가 어감이 좀 이상하지만 나쁜 의미는 아니다.

 

다음과 같은 데이터를 사용해보자.

time, 관측값
1, 100
2, 110
3, 108
4, 115
5, 120

예를 들어서

1단계 예측은 time 1의 관측값 100을 이용해서 time 2이 관측값 110을 예측하는 것이라면

다단계 예측은 time 1의 관측값 100을 이용해서 time 2, time 3 혹은 그 이상의 미래 관측값을 예측하는 것이다.

 

그럼 슬라이딩 윈도우 기법을 적용해 2단계 예측을 할 데이터를 생성해보자.  이번엔 윈도우 크기가 2로 설정하자.

X1, X2, y1, y2
?, ? 100, 110
?, 100, 110, 108
100, 110, 108, 115
110, 108, 115, 120
108, 115, 120, ?
115, 120, ?, ?

데이터가 많지가 않아서 이 예시에서는 쓸 수 없는 데이터가 앞뒤로 2개씩 있다.

 

인풋 데이터가 중요하다는 것을 보여주는 좋은 예다. 예측하기 위해선 종류도 많아야 하고, 긴 기간 동안 관측된 데이터가 충분히 있어야 한다.

 

수용할만한 모델 성능을 얻기 위해서는 윈도우 너비를 찾기 위해 많은 실험들과 모델링이 필요하다.

 

요약

이번 글에서는 간단하지만 시계열 예측을 지도 학습으로 바꾸는 방법인 슬라이딩 윈도 기법을 살펴보았다.

사실 슬라이딩 윈도라는 용어는 다양한 분야에서 쓰인다. 네트워크에서도 쓰이고 심지어 ETL Spark에서도 쓰이는 용어이기도 하다.(물론 의미하는 바는 다르다)

보통 저렇게 간단하게 직전 시간의 데이터만 사용하진 않고, 다양한 변수들을 관측해서 여러 인풋이 들어가며, 여태까지의 누적 통계 데이터도 넣기도 한다.

 

Reference

machinelearningmastery.com/introduction-to-time-series-forecasting-with-python/

 

궁금한 점이 있으면, 아래 댓글로 질문해주시면 성심성의껏 답변을 달아드리겠습니다.

댓글