💡 비트코인(BTC) 가격을 머신러닝을 활용해 예측해봅시다!
1️⃣ 비트코인 가격 예측이 가능한가요?
📌 비트코인(BTC)은 변동성이 매우 크지만, 과거 데이터를 분석하여 예측할 수 있습니다.
✔ LSTM(Long Short-Term Memory) 모델을 활용하면 시계열 데이터(과거 가격)를 기반으로 미래 가격을 예측할 수 있음
✔ 하지만 시장 뉴스, 규제, 글로벌 경제 상황 등 외부 변수 때문에 100% 정확한 예측은 어려움
🎯 오늘은 LSTM을 사용해 비트코인 가격을 예측하는 머신러닝 모델을 만들어보겠습니다!
2️⃣ 사용 도구 & 라이브러리
비트코인 가격 데이터를 가져오고 머신러닝 모델을 학습하기 위해 Python 라이브러리를 사용합니다.
🔹 필수 라이브러리 설치
!pip install pandas numpy matplotlib tensorflow scikit-learn pandas-datareader
🔹 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pandas_datareader as web
import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
3️⃣ 비트코인 가격 데이터 가져오기
📌 야후 파이낸스(Yahoo Finance)에서 비트코인(BTC-USD) 데이터를 가져옵니다.
# 비트코인(BTC) 가격 데이터 불러오기
df = web.DataReader('BTC-USD', data_source='yahoo', start='2014-01-01', end='2025-01-01')
# 데이터 확인
print(df.head())
# 종가(Close) 시각화
plt.figure(figsize=(12, 6))
plt.plot(df['Close'], label='Bitcoin Price')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.legend()
plt.show()
4️⃣ 데이터 전처리
📌 LSTM 모델을 위해 데이터 정규화 및 훈련/테스트 데이터 분할이 필요합니다.
✔ MinMaxScaler를 사용하여 데이터 정규화
✔ 훈련 데이터(Training Set)와 테스트 데이터(Test Set) 분리
# 종가(Close) 데이터만 사용
data = df.filter(['Close'])
# numpy 배열로 변환
dataset = data.values
# 데이터 정규화 (0~1 사이 값으로 변환)
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(dataset)
# 훈련 데이터 80%, 테스트 데이터 20%로 분할
training_data_len = int(len(scaled_data) * 0.8)
train_data = scaled_data[:training_data_len]
test_data = scaled_data[training_data_len:]
5️⃣ LSTM 모델을 위한 데이터 준비
📌 LSTM 모델은 일정 기간(예: 60일) 동안의 데이터를 학습하여 다음 날의 가격을 예측합니다.
# 훈련 데이터셋 만들기 (과거 60일 데이터를 사용하여 다음 날 가격 예측)
x_train, y_train = [], []
for i in range(60, len(train_data)):
x_train.append(train_data[i-60:i, 0])
y_train.append(train_data[i, 0])
# numpy 배열로 변환
x_train, y_train = np.array(x_train), np.array(y_train)
# LSTM 입력 형태에 맞게 데이터 reshape (samples, time steps, features)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
6️⃣ LSTM 모델 만들기 & 학습
📌 LSTM 모델 구조
✔ 2개의 LSTM 레이어
✔ 1개의 Dense(출력) 레이어
✔ 손실 함수: mean_squared_error (MSE)
# LSTM 모델 생성
model = Sequential([
LSTM(50, return_sequences=True, input_shape=(x_train.shape[1], 1)),
LSTM(50, return_sequences=False),
Dense(25),
Dense(1)
])
# 모델 컴파일
model.compile(optimizer='adam', loss='mean_squared_error')
# 모델 학습
model.fit(x_train, y_train, batch_size=16, epochs=50)
7️⃣ 모델 테스트 & 예측
📌 테스트 데이터로 예측해보기
# 테스트 데이터 준비
x_test, y_test = [], test_data[60:]
for i in range(60, len(test_data)):
x_test.append(test_data[i-60:i, 0])
x_test = np.array(x_test)
x_test = np.reshape(x_test, (x_test.shape[0], x_test.shape[1], 1))
# 예측 수행
predictions = model.predict(x_test)
# 데이터 원래 값으로 변환 (정규화 복원)
predictions = scaler.inverse_transform(predictions)
8️⃣ 예측 결과 시각화
📌 실제 종가와 예측값을 비교하는 그래프 그리기
# 실제 값과 예측 값 비교
train = data[:training_data_len]
valid = data[training_data_len:].copy()
valid['Predictions'] = predictions
# 그래프 그리기
plt.figure(figsize=(14, 6))
plt.plot(train['Close'], label='Train')
plt.plot(valid['Close'], label='Actual Price')
plt.plot(valid['Predictions'], label='Predicted Price')
plt.xlabel('Date')
plt.ylabel('Price (USD)')
plt.legend()
plt.show()
9️⃣ 모델 성능 평가 (RMSE)
📌 **RMSE(Root Mean Squared Error)**를 사용하여 모델 정확도를 측정
from sklearn.metrics import mean_squared_error
rmse = np.sqrt(mean_squared_error(valid['Close'], valid['Predictions']))
print(f'📊 모델 RMSE: {rmse:.2f}')
✔ RMSE 값이 낮을수록 모델이 더 정확합니다!
🎯 마무리
오늘은 LSTM을 활용한 비트코인 가격 예측 모델을 만들었습니다!
✅ Yahoo Finance에서 비트코인 가격 데이터 가져오기
✅ 데이터 전처리 & 정규화
✅ LSTM 모델 설계 & 학습
✅ 실제 데이터와 예측값 비교
✅ 모델 성능 평가
💡 더 높은 정확도를 원한다면 더 많은 데이터, 하이퍼파라미터 튜닝, 추가적인 피처 엔지니어링이 필요합니다! 🚀
'[🖥️] IT > {🚀} AI' 카테고리의 다른 글
🚀 LSTM(Long Short-Term Memory) 완벽 가이드 (0) | 2025.02.09 |
---|---|
🚀 머신러닝으로 테슬라 주가 예측하기 (LSTM) (0) | 2025.02.09 |
🚀 Kaggle 완벽 가이드: 데이터 분석 실습까지! (0) | 2025.02.09 |
🚀 머신러닝 완벽 가이드: 개념부터 실습까지! (4) | 2025.02.09 |
🚀 Google Colab 완벽 가이드: 무료로 Python과 머신러닝을 배우자! (0) | 2025.02.09 |