3부에서는 앞에서 알아본 XGBoost와 time series 데이터를 supervised learning problem으로 변형한 것을 종합하여 간단히 다음날의 주식 종가를 예측하는 프로그램을 만들어 보겠다.
[1. 입력 모듈]
프로그램 실행을 위해 입력하는 모듈들은 아래와 같다.
위에서 마지막에 import 하는 것은 yahoo에서 주식 데이터를 불러오기 위해서 사용한다.
[2. 예측을 위한 입력 데이터 수 결정]
훈련된 모델에 오늘 날짜의 종가부터 몇 개의 이전 날짜 종가 데이터를 입력한다.
여기에서는 위와 같이 30일 치의 데이터를 입력으로 하고 다음날 하루의 종가 정보를 예측한다.
얼마큼의얼마 큼의 데이터를 입력으로 하는지에 따라 예측 종가가 바뀐다. 얼마 큼의 데이터를 입력하여야 좀 더 정확한 예측이 가능한지는 모른다. 다만 여기서는 30일 치를 입력하였다.
[3. 주식 데이터 로드]
다음은 yahoo 사이트에서 원하는 주식 데이터를 주식코드를 통해 로드하고 그중에서 우리가 관심 있는 종가 데이터만을 뽑아낸다.
위는 신한지주의 주식을 읽어드린 것이며, 코스피는 ‘KS’를 붙여주고 코스닥은 ‘KQ’를 붙여줘야 한다.
신한지주의 데이터를 불러보면 아래와 같이 종가(Close)외에도 고가(High)와 저가(Low)등 다른 데이터들이 해당 날짜와 같이 읽어진 것을 볼 수 있다.
여기서 우리가 관심 있는 종가(Close)만의 데이터를 뽑고 날짜를 제외한 values만 별도로 저장한다.
[4. Time Series 데이터를 Supervised Learning 데이터로 변형]
다음은 2부에서 알아본 시계열(Time Series) 데이터 Supervised Learning 데이터로 변형하는 부분이다.
이 내용은 2부에서 자세히 알아봤으므로 넘어가도록 하겠다.
최종적으로 supervised learning 데이터로 변형된 데이터는 train에 저장되며 다음과 같다.
[5. 모델 훈련 및 예측]
다음은 마지막인 훈련을 위한 데이터 분리와 모델 훈련 그리고 예측을 수행한다.
훈련을 위한 데이터 분리와 XGBoost 모델 사용에 대한 기본적인 것은 1부에서 얘기했었다.
앞에서 이전 종가 데이터 몇 개를 넣어주냐에 따라 예측이 달라진다고 했는데 여기서의 n_estimators도 어떤 값이냐에 따라 예측 값이 달라진다.
1부에서 얘기했듯이 XGBRegressor에는 여러 parameter가 있으며 각 parameter의 값에 따라 결과가 달라진다. 이 parameter들은 최적화하는 방법이 있는데 여기서는 적용하지 않았다.
사실 이에 대한 공부가 부족해서 다루기에 부족한 부분이 많고 주식 종가 예측은 이 parameter가 최적화 된다고 해서 결과를 신뢰할 수 있다고 생각하지 않기 때문이다.
위의 프로그램부분으로 돌아가서, 모델을 훈련시키고 30개의 종가 데이터를 훈련된 모델에 입력하여 다음날 하루치의 종가를 예측한다.
결과는 아래와 같다.
30개의 입력된 이전 종가 데이터가 보이고 31687.873 이란 숫자가 예측되었다.
2020년 11월 6일(금)의 데이터부터 이전 30일 치의 데이터를 넣어 다음날, 그러니깐 11월 9일(월)의 종가를 예측한 것이라 볼 수 있다.
3부에 걸쳐 XGBoost를 통한 간단한 주식 종가 예측 프로그램을 만들어 보았다.
이 프로그램은 어디까지나 이전 주식 데이터 값들의 변화를 학습하여 다음 값의 추세를 예측하는 것이다. 그러나 주식은 여러 경제 상황이나 주변 환경에 영향을 받아 변한다. 그러므로 이 프로그램으로 주식의 종가를 예측하는 것은 사실 그 정확도를 얘기할 수 없는 것이다.
XGBoost를 Python에서 어떻게 사용하고 시계열 데이터를 모델 훈련을 위해 가공하는 부분을 공부했다는 데에 의미가 있다.
'Python' 카테고리의 다른 글
Machine Learning을 이용한 간단 주식 예측 (0) | 2021.01.03 |
---|---|
Python Machine Learning을 이용한 Lotto 번호 생성 프로그램 - (2)(UPDATE ) (5) | 2021.01.03 |
Python Machine Learning을 이용한 Lotto 번호 생성 프로그램 - (1) (3) | 2020.12.13 |
XGBoost를 이용한 주식 예측 - (2) (0) | 2020.10.25 |
XGBoost를 이용한 주식 예측 - (1) (0) | 2020.10.17 |
댓글