Project

56. ~ 60. Project_3 - FinanceDataReader 사용, 주식예측 모델 개발

장수우 2024. 4. 16. 20:22
주제
  • FinanceDataReader (주가 데이터 수집을 위해 사용된 Python 라이브러리) 를 가지고 삼성전자 주식 예측
    기계학습 접근
진행과정
  1. 결측치 처리
  2. 퍼센트 변화 계산
  3. 특성 공학 및 추가 데이터
  4. 스케일링
  5. 학습 및 테스트 데이터 분할
도출과정
  1. 특성 선택
    • 기초 특성 설정
      - Open, High, Low, Close, Volume, Change 등의 기본적인 주가 정보가 포함됩니다.
       이외에도 KS11 (KOSPI 지수), KQ11 (KOSDAQ 지수), USD/KRW (원/달러 환율) 등의 추가적인 시장 데이터를 
       수집했습니다.
    • 기술적 지표 추가
      - 이동 평균, MACD, RSI, OBV, CMF, ATR, 볼린저 밴드, VWAP 등
      - 주가의 추세, 모멘텀, 변동성, 거래량 등 다양한 측면을 분석하여 더 정교한 예측을 가능하게 합니다
    • 상관계수를 통한 특성 선택
      - 종가(Close)와의 상관계수를 계산하여, 이 값이 특정 임계값(예: 0.5) 이상인 특성들만을 선택합니다.
      - 주가 예측과 가장 관련이 깊은 특성들을 식별하는 데 도움을 줍니다
  2. 특성 준비
    • 스케일링
      - MinMaxScaler를 사용하여 특성 데이터의 스케일을 조정합니다. 
      - 든 특성 값이 0과 1 사이의 범위에 있도록 변환하는 과정으로, 모델의 학습 효율성을 높이고, 수치적 안정성을
        개선하는 데 도움을 줍니다.
    • 학습 및 테스트 데이터 분할
      - 전처리된 데이터를 학습 데이터와 테스트 데이터로 분할합니다. 일반적으로 데이터의 80%를 학습용으로,
        나머지 20%를 테스트용으로 분할하는 비율을 사용합니다. 
      - 분할은 모델이 과거 데이터를 학습하고, 학습된 모델의 성능을 미래 데이터에 대해 평가하는 데 사용됩니다.
    • 입력 및 목표 변수 분리
      - Close 열(목표 변수)을 제외한 나머지 열을 입력 변수로 사용합니다.
      - Close 열은 모델이 예측하려는 종가 값입니다.
  3. 모델 선택
    • 선형 회귀(Linear Regression)
      - 기본적인 회귀 분석 모델로, 독립 변수의 선형 조합을 사용하여 종속 변수를 예측합니다.
    • 릿지 회귀(Ridge Regression)
      - 회귀 계수에 대한 L2 패널티를 적용하여 과적합을 방지합니다.
    • 라쏘 회귀(Lasso Regression)
      - 회귀 계수에 대한 L1 패널티를 적용하여 불필요한 특성의 계수를 0으로 만듭니다.
    • 랜덤 포레스트(Random Forest Regressor)
      - 여러 결정 트리를 결합하여 예측 성능을 향상시키는 앙상블 방법입니다.
    • Prophet
      - 시계열 데이터에 대한 예측을 위해 설계된 모델로, 계절성과 트렌드 변화를 고려합니다.
  4. 파라미터 튜닝 및 교차 검증
    • 그리드 서치(GridSearchCV)
      - 모델의 하이퍼파라미터를 최적화하기 위해 사용됩니다. 예를 들어, 릿지와 라쏘 회귀에서는 alpha 값을,
        랜덤 포레스트에서는 n_estimators와 max_depth 값을 조정합니다.
    • 교차 검증
      - 데이터를 여러 부분으로 나누어, 일부는학습에 일부는 검증에 사용함으로써 모델의 일반화 성능을 평가합니다.
  5. 성능 지표
    • 평균 제곱 오차(MSE)
      - 정의 : 실제 값과 예측 값의 차이를 제곱한 후 평균을 낸 값입니다.
      - 사용 이유
        : MSE는 오차의 크기를 제곱하기 때문에, 큰 오차에 대해 더 큰 패널티를 부여합니다.
         모델이 큰 오차를 만들어내는 것을 강하게 처벌하여, 큰 예측 실수를 줄이는 데 도움이 됩니다.
         MSE는 오차의 크기와 방향을 모두 고려하여, 모델이 데이터에 얼마나 잘 적합하는지를 정량적으로 평가
         할 수 있게 해줍니다.
    • 결정 계수(R²)
      - 정의 : 데이터의 분산 중 모델이 설명할 수 있는 분산의 비율을 나타냅니다.
      - 사용 이유
         : R²는 모델이 데이터의 변동성을 얼마나 잘 포착하는지를 나타내며, 모델의 설명력을 평가하는 데 사용
          값이 1에 가까울수록 모델이 데이터를 더 잘 설명한다고 할 수 있습니다. R²는 모델의 성능을 직관적으로
          이해할 수 있게 해주며, 다른 모델들 간의 성능 비교에 유용하게 사용됩니다.
    • 평균 절대 오차(MAE)
      - 정의 : 실제 값과 예측 값의 차이의 절대값의 평균입니다.
      - 사용 이유
        : MAE는 오차의 절대값을 사용하기 때문에, MSE에 비해 이상치에 덜 민감합니다. 
         모델이 평균적으로 얼마나 많은 오차를 만들어내는지를 보여주며, 예측 오차의 실제 크기를 
         이해하는 데 유용합니다. MAE는 모델의 예측이 실제 값에서 평균적으로 얼마나 떨어져 있는지를 
         직관적으로 파악할 수 있게 해줍니다.
  6. 모델별 성능 평가 결과
    • 선형 회귀 (Linear Regression)
      - MSE : 1.0998663033629005e-31
      - R² : 1.0
      - MAE : 2.865716617314058e-16
      - 해석
        : 선형 회귀 모델은 완벽한 R² 점수를 달성했다. 이는 모델이 데이터를 완벽하게 예측했음을 의미하지만,
         실제 상황에서 이러한 결과는 과적합을 의심할 필요가 있다.
    • Ridge 회귀
      - MSE: 2.9852146670771345e-05
      - R²: 0.8293449690216336
      - MAE: 0.0042518866158621086
      - 해석
        : Ridge 회귀 모델은 상대적으로 높은 R² 점수를 보여준다.
         모델이 데이터의 변동성을 상당 부분 설명할 수 있음을 나타낸다.
         그러나, 모델의 행렬이 잘 조건화되지 않았다는 경고는 수치적 안정성 문제를 시사한다.
    • Lasso 회귀
      - MSE: 0.00016209095546287263
      - R²: 0.07337863065930073
      - MAE: 0.009703396776462042
      - 해석
        : Lasso 회귀의 성능은 상대적으로 낮은 R² 점수를 보여준다.
         모델이 데이터의 변동성을 충분히 설명하지 못함을 의미한다. 또한, 목적 함수가 수렴하지 않았다는 경고는
         최적화 과정에서의 문제를 나타낸다.
    • 랜덤 포레스트 (Random Forest Regressor)
      - MSE: 8.099796714724595e-10
      - R²: 0.9999953696091791
      - MAE: 1.2047888389628065e-05
      - 해석
        : 랜덤 포레스트 모델은 매우 낮은 MSE와 높은 R² 점수를 달성하여, 모든 모델 중 최상의 성능을 보여준다.
         이는 복잡한 비선형 관계와 데이터 내의 상호작용을 효과적으로 포착할 수 있음을 시사한다.
    • Prophet
      - MSE: 0.00023598461613838902
      - R²: -0.3490474377491095
      - MAE: 0.011630655948358713
      - 해석
        : Prophet 모델은 음의 R² 점수를 기록했다. 이는 모델의 예측이 실제 데이터의 변동성을설명하지 못하며,
         평균값을 사용하는 단순 모델보다도 나쁜 성능을 보여준다는 것을 의미한다
  7. 모델별 예측 성능 비교
    • 선형 회귀 (Linear Regression) 모델은 완벽한 R² 점수(1.0)를 달성하여 데이터를 완벽하게 예측했다고
      보고하였지만, 이는 과적합을 의심할 수 있는 결과이다.
    • Ridge 회귀 모델은 R² 점수가 0.8293로 나타나, 상당한 예측 성능을 보였으나, 이상적인 조건에서 벗어난 수치적
      문제에 대한 경고가 있었다.
    • Lasso 회귀 모델의 성능은 R² 점수가 0.0734로 상대적으로 낮게 나타났으며, 수렴 문제에 대한 경고가 발생.
    • 랜덤 포레스트 (Random Forest Regressor) 모델은 모든 모델 중 최고의 성능을 보였으며, R² 점수가 0.999995로
      거의 완벽한 예측을 보여주었다.
    • Prophet 모델은 R² 점수가 -0.3490으로, 예측 성능이 가장 낮았으며 실제 데이터의 변동성을 설명하지 못하는
      것으로 나타났다.
  8. 종합적 해석 및 논의
    • 랜덤 포레스트 모델이 복잡한 주식 시장 데이터의 패턴과 변동성을 가장 잘 포착하고 예측하는 것으로 나타났다.
      이 모델의 우수한 성능은 다수의 결정 트리를 조합하여 데이터 내의 복잡한 상호작용과 비선형 관계를 효과적으로 모델링할 수 있기 때문이다.
    • 선형 회귀 모델의 완벽한 성능은 과적합의 가능성을 시사한다. 모델이 훈련 데이터에 지나치게 최적화되어 
      실제 시장 조건에서의 일반화 성능이 떨어질 수 있음을 의미한다.
    • Ridge와 Lasso 회귀의 낮은 성능과 수렴 문제는 금융 데이터의 복잡성과 변수 간의 상호작용을 적절히
      반영하기 위한 모델 구조의 한계를 드러낸다.
    • Prophet 모델의 부정적인 R² 점수는 주식 시장 데이터 예측에 있어 시즌성과 트렌드를 모델링하는 방식이 이번
      데이터에서 적합하지 않음을 나타낸다.

Project_3.pdf
3.00MB

 

프로젝트 후기
  • 생각보다 예측모델을 만드는게 어려웠고 만들어도 최적화를 잘 해야 좋은 결과를 얻을 수 있다고 생각했다.
반응형