주가 예측에 사용한 핵심 알고리즘은 '랜덤포레스트'를 사용하였다. 랜덤포레스트(Random Forest)는 앙상블 학습의 일종으로, 다수의 결정 트리(Decision Tree)를 생성하고 이를 결합하여 예측 성능을 향상시키는 머신러닝 알고리즘이다. 랜덤포레스트를 선택한 이유는 여러가지가 있었다.
처음 시작은 lstm이었는데, 딥러닝은 다뤄본적이 없었기도 했고 수개월간 시도를 해 보았는데 큰 진전이 없어 ML으로 다시 도전해보고자 했다. 검색량과 뉴스의 감성분석 등 여러 특징들을 사용하여 주가 예측을 수행하고 싶었기 때문에 조금 오래된 모델이어도 랜덤포레스트를 사용했다.
랜덤포레스트의 특징
- 앙상블 모델 여러 개의 결정 트리 모델을 생성한 뒤, 각각의 결과를 평균 내거나 다수결 투표를 통해 최종 예측값을 결정
- 높은 성능 개별 결정 트리가 가지는 과적합(Overfitting) 문제를 완화하면서도 강력한 예측 성능을 발휘합니다.
- 랜덤성 트리를 만들 때 데이터 샘플과 특성(feature)을 랜덤하게 선택하여 다르게 학습, 데이터 샘플 랜덤화: 부스트랩 샘플링으로 각 트리에 사용할 데이터를 랜덤하게 선택, 특성 랜덤화: 각 노드에서 최적의 분할을 찾을 때 일부 특성만 사용하도록 제한
- 비교적 튜닝이 쉬움 다른 복잡한 모델보다 적은 매개변수로도 좋은 성능을 낼 수 있어 사용하기 쉬움
- 특성 중요도 제공 학습 과정에서 각 특성이 예측에 얼마나 기여했는지 평가 가능
랜덤포레스트의 장점은 다음과 같다. 랜덤포레스트는 높은 예측 정확도를 제공하며 과적합 문제를 효과적으로 방지하는 강력한 머신러닝 알고리즘이다. 여러 개의 결정 트리를 결합하여 데이터를 예측하기 때문에 단일 결정 트리에 비해 더 안정적이고 일반화된 성능을 제공한다. 분류와 회귀 문제에 모두 적용 가능하며, 데이터의 다양한 패턴을 학습하는 데 적합하다. 특성 중요도를 제공하는 기능이 있어 데이터의 중요한 변수를 파악하는 데 유용하다. 하이퍼파라미터가 비교적 직관적이고 적은 편이라 설정이 쉽고, 다양한 데이터셋에서 좋은 성능을 보이는 유연성을 가진다. 결과적으로, 랜덤포레스트는 높은 성능과 과적합 방지, 그리고 다양한 데이터 유형에 활용할 수 있는 장점을 가진 모델이다.
lstm과 같은 딥러닝 모델들은 블랙박스 모델이기 때문에, 어떻게 예측을 하여서 왜 이러한 결과가 도출되었는지 알기 어렵다. 그러나 랜덤포레스트를 사용함으로써, 각 특성이 예측에 어떻게 기여되었는지 알 수 있어 배우는 입장에서는 공부하고 사용하기 좋았던 것 같다.
기여도 그래프는 전 포스트에도 첨부되어있지만 다음과 같다.
랜덤포레스트의 Feature Importance
랜덤포레스트는 특징 중요도(Feature Importance)를 제공하여 데이터 분석의 해석 가능성을 높인다. 다음은 특정 금융 데이터를 기반으로 모델이 분석한 결과다:
- 가장 중요한 특징:
- Price(주가), Vol(거래량), Change(변화율)가 가장 중요한 변수로 나타난다. 이는 시장의 변동성과 투자 심리를 반영하는 주요 지표이다.
- 중간 중요도의 특징:
- Search(검색량)는 시장 관심도를 나타내며, positive_score와 negative_score는 감성 분석 점수로 투자 심리에 직접적인 영향을 미친다.
- 낮은 중요도의 특징:
- 감성 점수의 이동 평균 값(sentiment_ma3, sentiment_ma5)은 상대적으로 덜 중요하지만, 장기적인 심리 변화를 분석하는 데 유용하다.
이 결과를 통해 랜덤포레스트 모델이 데이터 기반으로 어떤 변수를 중점적으로 사용하는지 알 수 있다.