Deep Learning - LSTM을 이용한 애플의 주식 값 예측하기
데이터 출처 : www.kaggle.com/tarunpaparaju/apple-aapl-historical-stock-data
Apple (AAPL) Historical Stock Data
Apple stock data for the last 10 years
www.kaggle.com
github 주소 : github.com/sangHa0411/DataScience/blob/main/Apple%20Stock%20Market.ipynb
sangHa0411/DataScience
Contribute to sangHa0411/DataScience development by creating an account on GitHub.
github.com
이번 포스팅에서는 Time Series Problem을 Apple 주식에 적용함으로써 Apple 주식 값을 예측해보도록 하겠습니다.
먼저 필요한 라이브러리를 불러옵니다.
그리고 Pandas를 이용해서 데이터를 불러옵니다.
데이터 구조를 확인해보니 날짜 및 주식 가격에 대한 정보가 있는 것을 확인할 수 있습니다.
여기서 날짜가 역순 즉 최근 날짜의 주식 가격이 0번에 있으니 행을 역순으로 조정합니다.
데이터에는 Apple 주식 가격을 2010년 3월 부터 2020년 2월 말 까지있다는 것을 확인할 수 있습니다.
저는 여기서 Time Series 문제로 접근하기 위해서 데이터는 Close/Last 만을 사용하였습니다.
먼저 Close/Last는 데이터가 str로 구성되어 있기 때문에 이를 정수로 변환해줍니다.
그리고 이 값 들을 그래프로 그려보겠습니다.
날짜 전부 xlabel에 표기하면 겹치는 부분이 발생해서 지저분해보이니 매년 4월 11만을 xlabel에 표기하도록 하겠습니다.
아래는 Apple 주식의 그래프입니다.
이제 여기서 최근 200개의 데이터를 예측하는 것을 목표로 잡고 데이터를 훈련 데이터와 테스트 데이터로 분할해보겠습니다.
이제 훈련 데이터 만을 이용해서 Time Series Problem을 위한 데이터를 만들어 보겠습니다.
먼저 위 훈련데이터를 이용해서 Pandas의 dataframe을 만듭니다.
이제 이 데이터를 한 칸씩 아래로 이동하면서 Dataframe에 Column을 하나씩 추가해줍니다.
여기서 NaN 데이터가 있는 행을 모두 삭제합니다.
여기서 4행에 있는 데이터는 Target Data가 되고 나머지는 그를 위한 훈련 데이터가 되도록 설정해줍니다.
이로써 저희는 위 데이터를 활용해서 앞선 4일 간의 주식 값을 이용해서 다음 날의 주식 값을 예측할 수 있게 데이터를 만든 것이 됩니다.
이 데이터를 LSTM에 입력함으로써 훈련시키고 Apple의 주식 가격을 예측할 수 있게 됩니다.
LSTM을 위한 라이브러리를 불러옵니다.
이를 이용해서 LSTM을 훈련시킵니다.
훈련된 LSTM을 이용해서 값을 예측해보겠습니다.
훈련 데이터에서 가장 최근의 4일을 LSTM에 입력한 결과 나온 값이 189.749이고 이는 2019/05/15 Apple 주식의 값을 예측한 것입니다. 이 날의 Apple 주식의 실제 값은 190.928입니다. 이 수치로만 보면 두 값이 그렇게 큰 차이가 없어 보이는데 더 정확하게 파악하기 위해서 그래프를 그려보겠습니다.
먼저 이 문제는 분류 문제가 아니라 회귀문제이기 때문에 rmse로 error 값을 계산해서 모델의 성능을 측정해보도록 하겠습니다.
그리고 walk_forward_validation 함수는 훈련 데이터 값을 이용해서 예측 값을 구하고 실제 값을 훈련 데이터에 추가하고 그 다음 예측 값을 구하는 방식으로 실제 값과 비교할 수 있게 끔 예측 값을 구하는 함수입니다.
RMSE 값은 다음과 같습니다.
이제 예측 값을 얻었으니 이와 실제 값을 비교해보겠습니다.
그래프로만 보면 훈련한 LSTM이 실제 값을 잘 예측하는 것처럼 보이지만 이는 치명적인 문제가 하나 있습니다.
바로 훈련 데이터에 실제 값을 하나하나 추가하면서 예측을 했다는 점입니다.
아래는 위 walk_forward_validation함수의 일부분을 따온 사진입니다.
위에서 확인할 수 있다시피 hitory에 실제 값을 하나씩 추가하면서 그 history를 이용해서 예측 값을 구하는 구조입니다.
따라서 앞선 4일의 데이터를 바탕으로 해서 예측 값을 구하는 것을 계속 반복해야 된다는 것이고 이는 앞으로 1달 혹은 1년 뒤에 Apple 주식의 값을 예측할 수는 없다는 것을 의미합니다.
이를 직접 확인하기 위해서 위에서 실제 값을 추가한 것이 아니라 예측 값을 훈련데이터에 추가하면서 예측한 값을 구해보겠습니다.
RMSE 값만 보더라도 316으로 훨씬 더 크다라는 것을 확인할 수 있습니다.
이를 그래프로 그린 결과입니다.
LSTM으로 예측한 결과 실제 값의 작은 굴곡 등을 전혀 예측하지 못하고 그저 가파르게 상승하는 것을 확인할 수 있습니다.
참고 자료 : machinelearningmastery.com/time-series-forecasting/
What Is Time Series Forecasting?
Time series forecasting is an important area of machine learning that is often neglected. It is important because there are so many prediction problems that involve a time component. These problems are neglected because it is this time component that makes
machinelearningmastery.com