본문 바로가기

Study Information Technology

금융 예측 모델을 위한 피처 엔지니어링 파이프라인 구축

728x90
반응형

금융 예측 모델을 위한 피처 엔지니어링 파이프라인 구축

Overview

금융 데이터 분석에서 피처 엔지니어링은 예측 모델의 성능을 결정짓는 중요한 과정입니다. 이 과정에서는 원시 데이터에서 유의미한 특성(피처)을 추출하고, 이를 모델 학습에 적합하게 변환하는 일련의 작업을 수행합니다. 특히 금융 예측 모델에서는 다양한 지표와 데이터 포인트를 추출하여 모델의 예측력을 향상시킬 수 있습니다. 이번 글에서는 금융 데이터에서 피처를 추출하고 변환하는 과정을 자세히 설명하겠습니다.

1. 데이터 수집

1.1 원시 데이터 소스

금융 데이터는 여러 출처에서 수집할 수 있습니다. 대표적으로는 다음과 같은 소스가 있습니다:

  • 주식 가격 데이터: Yahoo Finance, Alpha Vantage, Quandl 등의 API를 통해 실시간 또는 역사적인 주식 가격 데이터를 수집할 수 있습니다.
  • 재무 제표 데이터: EDGAR, Yahoo Finance, FRED 등의 출처에서 기업의 재무 제표 데이터를 다운로드할 수 있습니다.
  • 경제 지표: GDP, 실업률 등의 경제 지표는 중앙은행이나 통계청에서 제공하는 API를 통해 수집할 수 있습니다.

1.2 예시 코드

Python을 사용하여 Yahoo Finance에서 주식 데이터를 가져오는 코드 예시입니다.

import yfinance as yf

# 특정 주식의 데이터 다운로드
ticker = 'AAPL'
data = yf.download(ticker, start='2020-01-01', end='2023-01-01')
print(data.head())

2. 데이터 전처리

2.1 결측치 처리

금융 데이터는 종종 결측치가 발생합니다. 결측치를 처리하는 방법에는 여러 가지가 있으며, 그 중 몇 가지는 다음과 같습니다:

  • 삭제: 결측치가 포함된 행을 삭제합니다. 하지만 데이터 손실이 발생할 수 있습니다.
  • 대체: 평균값, 중간값, 또는 이전 값을 사용하여 결측치를 대체합니다.

2.2 예시 코드

결측치를 평균값으로 대체하는 예시입니다.

data.fillna(data.mean(), inplace=True)

2.3 데이터 정규화

데이터의 스케일을 맞추기 위해 정규화가 필요합니다. Min-Max 정규화나 Z-score 정규화 등을 사용할 수 있습니다.

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
data[['Open', 'Close', 'Volume']] = scaler.fit_transform(data[['Open', 'Close', 'Volume']])

3. 피처 생성

3.1 기본 지표

금융 데이터에서 기본적인 지표를 생성하는 것이 첫 번째 단계입니다. 여기에는 다음과 같은 지표가 포함됩니다:

  • 수익률 (Return): 특정 기간 동안의 주가 변화율을 계산합니다.

[
\text{Return} = \frac{P_t - P_{t-1}}{P_{t-1}}
]

  • 이동 평균 (Moving Average): 주가의 평균을 구해 추세를 파악합니다.

3.2 기술적 지표

기술적 분석을 위한 지표들도 유용합니다. 몇 가지 예시는 다음과 같습니다:

  • 상대 강도 지수 (RSI): 주가의 과매수 및 과매도 상태를 나타냅니다.
  • 이동 평균 수렴 확산 지수 (MACD): 두 개의 이동 평균 간의 차이를 보여주는 지표입니다.

3.3 예시 코드

수익률과 이동 평균을 생성하는 코드 예시입니다.

# 수익률 계산
data['Return'] = data['Close'].pct_change()

# 20일 이동 평균 계산
data['MA20'] = data['Close'].rolling(window=20).mean()

4. 피처 선택

모델의 성능을 극대화하기 위해서는 유의미한 피처를 선택하는 과정이 필요합니다. 이 과정에서 다음의 방법을 사용할 수 있습니다:

4.1 상관계수 분석

각 피처와 목표 변수 간의 상관관계를 분석하여 유의미한 피처를 선택합니다.

correlation_matrix = data.corr()
print(correlation_matrix['Return'].sort_values(ascending=False))

4.2 피처 중요도

랜덤 포레스트와 같은 모델을 사용하여 각 피처의 중요도를 평가할 수 있습니다.

from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor()
model.fit(X_train, y_train)
importance = model.feature_importances_

5. 모델 학습 및 평가

피처 엔지니어링이 완료되면, 모델을 학습시키고 성능을 평가할 차례입니다. 여러 가지 모델을 시도하여 최적의 성능을 찾는 것이 중요합니다.

5.1 예시 모델

  • 선형 회귀: 간단한 모델이지만 기초적인 예측에 유용합니다.
  • 랜덤 포레스트: 복잡한 관계를 모델링하는 데 효과적입니다.
  • LSTM: 시계열 데이터 예측에 적합한 신경망입니다.

5.2 모델 평가 지표

  • MAE (Mean Absolute Error): 예측값과 실제값 간의 평균 절대 오차를 측정합니다.
  • RMSE (Root Mean Squared Error): 예측 오차의 제곱 평균을 측정합니다.

5.3 예시 코드

랜덤 포레스트 모델을 학습하고 평가하는 예시입니다.

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error

# 데이터 분할
X = data[['Return', 'MA20']]
y = data['Close']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 학습
model = RandomForestRegressor()
model.fit(X_train, y_train)

# 예측 및 평가
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f'Mean Absolute Error: {mae}')

6. 에러 처리

코드 실행 중 에러가 발생할 수 있습니다. 예를 들어, ValueError: could not convert string to float 같은 에러는 데이터 유형 문제에서 발생할 수 있습니다. 이 경우, 데이터 유형을 확인하고 숫자가 아닌 값을 제거해야 합니다.

6.1 해결책

데이터의 타입을 확인하고, 필요한 경우 변환합니다.

data['Close'] = pd.to_numeric(data['Close'], errors='coerce')

참고문서

이 과정을 통해 금융 예측 모델을 위한 피처 엔지니어링 파이프라인을 구축하고, 모델 성능을 극대화할 수 있습니다.

728x90
반응형