Feature Engineering: 거래량, 이동평균, RSI 등 여러 지표를 특징으로 추출하고 머신러닝 모델에 적용
최근 몇 년간 암호화폐 시장은 급격하게 성장하고 있으며, 그 중에서 비트코인은 가장 널리 알려진 디지털 자산입니다. 이와 같은 자산의 자동매매는 많은 투자자들에게 매력적인 선택이 되었습니다. 본 글에서는 머신러닝과 딥러닝을 활용하여 비트코인 거래 시 사용 가능한 다양한 피쳐를 추출하고, 이를 기반으로 한 모델의 구축과 평가 방법에 대해 설명하겠습니다.
1. 비트코인 데이터 이해하기
자동매매를 위한 첫 단계는 데이터 수집입니다. 비트코인 시장의 데이터를 수집하기 위해서는 다음과 같은 여러 요소를 포함해야 합니다:
- 시가 (Open Price)
- 종가 (Close Price)
- 최고가 (High Price)
- 최저가 (Low Price)
- 거래량 (Volume)
이 데이터는 시간에 따라 변화하므로, 시간에 따라 정렬된 형태로 데이터를 저장해야 합니다.
2. Feature Engineering의 중요성
Feature Engineering은 모델 학습의 성능을 좌우하는 매우 중요한 과정입니다. 비트코인과 같은 시계열 데이터에서 유용한 정보를 추출하고, 이를 학습 모델에 전달할 수 있도록 가공해야 합니다. 여기서는 거래량, 이동평균, 상대강도지수(RSI) 등의 지표를 사용하여 특징을 추출하는 방법을 살펴보겠습니다.
2.1 거래량 (Volume)
거래량은 시장의 활성도를 나타내는 지표로, 높은 거래량은 강한 매수세 또는 매도세를 의미할 수 있습니다. 따라서 거래량을 피쳐로 추가해주는 것은 모델의 예측력을 높일 수 있습니다.
2.2 이동평균 (Moving Average)
이동평균은 주어진 기간 동안의 가격 평균을 계산하여 가격의 움직임을 부드럽게 만들어줍니다. 일반적으로 사용되는 이동평균에는 단기 이동평균과 장기 이동평균이 있습니다. 예를 들어, 5일 및 20일 이동평균을 계산하여 그 교차점을 분석하면 매매 신호를 생성할 수 있습니다.
2.3 상대강도지수 (RSI)
RSI는 주어진 기간 동안의 가격의 상승과 하락 비율을 계산하여 0에서 100 사이의 값으로 나타냅니다. 70 이상은 과매수, 30 이하의 값은 과매도로 해석되어 매매 신호로 활용될 수 있습니다.
3. Python을 이용한 데이터 수집 및 Feature Engineering
이제 실제로 비트코인 데이터를 수집하고, 위에서 설명한 지표를 통해 특징을 추출해 보겠습니다. 아래 코드는 Python의 pandas와 numpy 라이브러리를 활용하여 비트코인 데이터를 처리하는 예제입니다.
import pandas as pd
import numpy as np
import pandas_datareader.data as web
import datetime
# 데이터 수집
start = datetime.datetime(2020, 1, 1)
end = datetime.datetime.now()
btc_data = web.DataReader('BTC-USD', 'yahoo', start, end)
# 이동평균 계산
btc_data['MA5'] = btc_data['Close'].rolling(window=5).mean()
btc_data['MA20'] = btc_data['Close'].rolling(window=20).mean()
# RSI 계산
def compute_rsi(data, window):
delta = data['Close'].diff(1)
gain = (delta.where(delta > 0, 0)).rolling(window=window).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=window).mean()
rs = gain / loss
rsi = 100 - (100 / (1 + rs))
return rsi
btc_data['RSI'] = compute_rsi(btc_data, 14)
# 거래량 추가
btc_data['Volume'] = btc_data['Volume']
# 최종 데이터 확인
print(btc_data.tail())
4. 머신러닝 모델 구축 및 예측
특징이 준비되면, 이제 머신러닝 모델을 구축하여 비트코인 가격이 상승할지 하락할지를 예측해 볼 수 있습니다. 아래에는 scikit-learn 라이브러리를 사용한 예제 코드를 제공합니다.
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, accuracy_score
# 결측값 처리
btc_data.dropna(inplace=True)
# 특성과 레이블 설정
features = btc_data[['MA5', 'MA20', 'RSI', 'Volume']]
labels = (btc_data['Close'].shift(-1) > btc_data['Close']).astype(int) # 다음 날 종가 상승 여부
# 학습 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
# 모델 학습
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 예측 및 평가
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
print('Accuracy:', accuracy_score(y_test, predictions))
5. 추가 고려사항
자동매매 시스템을 운영하기 위해서는 다음과 같은 추가적인 고려사항이 필요합니다:
- 리스크 관리: 투자 금액 및 손실 한도를 설정하여 리스크를 관리해야 합니다.
- 데이터 접근성: 데이터의 질과 양이 모델의 성능에 큰 영향을 미치므로, 신뢰할 수 있는 데이터 소스를 확보해야 합니다.
- 모델 지속적 개선: 새로운 데이터를 통해 모델을 주기적으로 재학습하여 성능을 개선할 필요가 있습니다.
6. 결론
딥러닝과 머신러닝을 활용한 비트코인 자동매매 시스템의 구축은 데이터를 이해하고 유용한 지표를 추출하는 것에서 시작됩니다. 이 과정은 거래의 효율성을 극대화하고, 잘 설계된 모델이 지속적으로 진화할 수 있도록 해줍니다. 본 글에서 제시한 과정을 통해 독자 여러분이 자신의 자동매매 시스템을 구축하는 데 도움이 되기를 바랍니다.
앞으로도 다양한 기법을 써보며 시장의 변화에 부응하는 능동적인 자동매매 시스템을 개발해 나가길 바랍니다.