본문 바로가기
Python

XGBoost를 이용한 주식 예측 - (2)

by 아짱이아빠 2020. 10. 25. 10:52
반응형

1부에서는 XGBoost의 기본적인 사용법에 대해서 알아봤다.

2부에서는 주식 데이터와 같은 시계열 (Time Series) 데이터를 통해 예측을 하는 방법에 대해 알아보겠다.

 

Time series 데이터는 시간의 index 순으로 나열되어 있는 숫자들이라 할 수 있다.

이러한 time series 데이터는 supervised learning problem의 형태로 바꾸어 이전의 시간 데이터를 통해 다음번 시간의 데이터를 예측하게 된다.

아래의 그림은 이를 표현한 예 이다.

 

시계열 데이터를 Supervised Learning Problem으로 변형

위의 supervised learning problem 형태를 살펴보면, X는 입력이고 Y를 출력이라 할 때에 이전 시간의 입력 X가 다음번 시간의 출력 Y 인 형태가 된다. 이렇게 supervised learning problem 형태의 데이터로 예측 모델을 훈련시키게 된다.

 

이전 시간(또는 순번)의 데이터를 이용해서 다음 시간(또는 순번)의 데이터를 예측하는 것을 Sliding Window 기법 또는 Window 기법이라 부르며, 통계학에서는 lag 또는 lag 기법이라고 부른다고 한다. 또한, 이전 시간대의 데이터 수나 크기를 window size 또는 lag size라 부른다.

 

Times series 데이터를 supervised learning problem 형태로 바꾸는 것은 Python에서 Pandas shift() function을 이용한다.

다음의 예에서처럼 0부터 9까지의 데이터를 column ‘t’를 만들어서 넣는다.

 

관련 코드

 여기에서 shift() 기능을 이용하여 한 스텝 앞으로 데이터를 이동하고 이를 ‘t-1’ column을 만들어 넣어준다.

 

관련 코드

위에서 알 수 있듯이 한 스텝 앞으로 이동한 데이터의 첫 번째 row에는 데이터가 없으므로 NaN이 들어가 있으며 이는 모델 훈련 시에는 버려져야 하는 데이터가 된다.

첫 번째 row 데이터를 버리고 두 번째 row의 데이터를 보면, ‘t-1’ column에 있는 0.0이 입력 X가 되고 ‘t’ column에 있는 1이 출력 또는 Y가 된다.

Shift() 기능에 양수인 1 대신 음수 -1을 적용하면 row의 마지막이 NaN이 되고 위에서 얘기한 입력과 출력에 해당하는 값은 거꾸로 되어 ‘t’ column이 입력 또는 X, 그다음 column이 출력 또는 Y가 된다.

 

이제까지 time series 데이터를 예측하기 위해 supervised learning problem 형태로 바꾸는 것에 대해 알아봤다.

다음은 실제로 주식 종가 데이터를 예측하기 위해 supervised learning problem 형태로 바꾸는 코드 부분에 대해 얘기해 보겠다.

위에서 얘기한 코드 부분들을 합치고 마지막에 NaN 값을 버리는 부분만 추가하면 된다.

 

관련 코드

 

위는 전날 하루의 데이터를 입력으로 다음날 하루의 값을 예측하기 위한 코드인데, 실제 주식의 종가 데이터 대신 일단 0부터 9까지의 데이터를 만들어 supervised learning problem 형태로 만들고 concat() 함수를 통해 데이터를 합친다. Concat 함수의 axis는 1이면 좌/우로 합치고 0이면 위/아래로 합치게 된다. 이후 NaN가 포함된 row를 pandas의 dropna() 함수를 통해 삭제하고 inplace가 True이기 때문에 삭제된 후의 변경된 데이터가 덮어씌워진다.

그래서 output을 보면 다음과 같다.

결과

 

이제 XGBoost를 통해 간단히 주식의 종가를 예측할 수 있는 코드를 만드는데 핵심이 되는 부분은 모두 알아봤다. 크게 두 가지였는데 Python에서 XGBoost를 다루는 부분은 1부에서 얘기했고 2부에서는 주식 데이터와 같은 time series 데이터를 XGBoost의 훈련을 위한 데이터로 입력하기 위한 supervised learning problem의 형태로 바꾸는 것을 알아봤다.

 

3부에서는 이 두 가지를 합치고 실제 특정 주식 종가 데이터를 입력하여 하루치의 종가를 예측해보도록 하겠다.

반응형

댓글