728x90
반응형
금값 예측을 위한 함수는 다양한 거시경제 변수, 금융 시장 지표, 수요와 공급 요인 등을 고려해야 합니다. 다음과 같은 변수들이 금값과 높은 상관관계를 가질 수 있습니다.
금값 예측을 위한 주요 변수:
- 미국 달러 인덱스 (DXY): 금값과 역상관 관계
- 미국 국채 금리 (10년물, 2년물): 금값과 대체적으로 역상관 관계
- 실물 인플레이션 지표 (CPI, PPI): 인플레이션이 오르면 금값 상승 가능성
- 금 선물 가격 (COMEX Gold Futures): 시장 기대 반영
- 주식 시장 변동성 지수 (VIX): 경제 불확실성이 높을 때 금값 상승 가능성
- 중앙은행 금 보유량: 각국의 금 보유 정책 변화
- 금 ETF 보유량 (SPDR Gold Trust - GLD): 투자 수요 반영
- 원자재 가격 (은, 구리, 원유): 원자재 시장의 전반적인 흐름 반영
- 외환시장 (특히 USD/CNY, EUR/USD 등): 글로벌 통화 흐름과 관련
- 경기 침체 지표 (PMI, GDP 성장률, 소비심리지수): 경제 불확실성이 커지면 금 수요 증가
금값 예측 함수 (Python)
이제 위 변수들을 활용해 금값을 예측하는 함수를 만들어 보겠습니다. 주요 단계는 다음과 같습니다:
- 최신 데이터를 웹에서 가져오기
- 데이터를 전처리하여 모델 학습에 적합하게 변환
- 머신러닝 모델 (Random Forest, LSTM 등) 학습
- 실시간 입력값으로 금값 예측
우선, RandomForestRegressor를 사용한 기본 모델을 만들어 보겠습니다.
1. 필요한 라이브러리 설치 및 불러오기
python
복사편집
import numpy as np
import pandas as pd
import yfinance as yf
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
import matplotlib.pyplot as plt
import pandas as pd
import yfinance as yf
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
import matplotlib.pyplot as plt
2. 데이터 수집
python
복사편집
# 금 가격 (Gold Futures)
gold_data = yf.download('GC=F', start='2010-01-01', end='2025-01-01')
# 미국 달러 인덱스 (DXY)
dxy_data = yf.download('DX-Y.NYB', start='2010-01-01', end='2025-01-01')
# 미국 10년물 국채 금리
us10y_data = yf.download('^TNX', start='2010-01-01', end='2025-01-01')
# S&P 500 지수 (주식시장 영향 분석)
sp500_data = yf.download('^GSPC', start='2010-01-01', end='2025-01-01')
# VIX 지수 (시장 변동성)
vix_data = yf.download('^VIX', start='2010-01-01', end='2025-01-01')
gold_data = yf.download('GC=F', start='2010-01-01', end='2025-01-01')
# 미국 달러 인덱스 (DXY)
dxy_data = yf.download('DX-Y.NYB', start='2010-01-01', end='2025-01-01')
# 미국 10년물 국채 금리
us10y_data = yf.download('^TNX', start='2010-01-01', end='2025-01-01')
# S&P 500 지수 (주식시장 영향 분석)
sp500_data = yf.download('^GSPC', start='2010-01-01', end='2025-01-01')
# VIX 지수 (시장 변동성)
vix_data = yf.download('^VIX', start='2010-01-01', end='2025-01-01')
3. 데이터 전처리
python
복사편집
# 날짜 기준으로 데이터 병합
df = gold_data[['Adj Close']].rename(columns={'Adj Close': 'Gold_Price'})
df['DXY'] = dxy_data['Adj Close']
df['US10Y'] = us10y_data['Adj Close']
df['SP500'] = sp500_data['Adj Close']
df['VIX'] = vix_data['Adj Close']
# 결측치 제거
df = df.dropna()
df = gold_data[['Adj Close']].rename(columns={'Adj Close': 'Gold_Price'})
df['DXY'] = dxy_data['Adj Close']
df['US10Y'] = us10y_data['Adj Close']
df['SP500'] = sp500_data['Adj Close']
df['VIX'] = vix_data['Adj Close']
# 결측치 제거
df = df.dropna()
4. 머신러닝 모델 학습
python
복사편집
# Feature & Target 설정
X = df.drop(columns=['Gold_Price'])
y = df['Gold_Price']
# 데이터 분할 (80% 학습, 20% 테스트)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 랜덤 포레스트 회귀 모델 학습
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f'테스트 데이터 MAE: {mae:.2f}')
X = df.drop(columns=['Gold_Price'])
y = df['Gold_Price']
# 데이터 분할 (80% 학습, 20% 테스트)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 랜덤 포레스트 회귀 모델 학습
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
print(f'테스트 데이터 MAE: {mae:.2f}')
5. 예측 함수
python
복사편집
def predict_gold_price(dxy, us10y, sp500, vix):
"""
입력된 경제 변수 값들을 기반으로 금값을 예측하는 함수
"""
input_data = np.array([[dxy, us10y, sp500, vix]])
predicted_price = model.predict(input_data)[0]
return predicted_price
# 예제 사용
predicted_price = predict_gold_price(104.5, 4.2, 4800, 18.5)
print(f'예측된 금 가격: {predicted_price:.2f}')
"""
입력된 경제 변수 값들을 기반으로 금값을 예측하는 함수
"""
input_data = np.array([[dxy, us10y, sp500, vix]])
predicted_price = model.predict(input_data)[0]
return predicted_price
# 예제 사용
predicted_price = predict_gold_price(104.5, 4.2, 4800, 18.5)
print(f'예측된 금 가격: {predicted_price:.2f}')
결과 및 개선 방향
- 위 모델은 RandomForestRegressor를 활용하여 주요 거시경제 지표를 바탕으로 금값을 예측합니다.
- 더 높은 예측력을 위해 LSTM, XGBoost, ARIMA 같은 모델을 추가로 적용할 수 있습니다.
- 외부 데이터를 추가 (중앙은행 금 보유량, ETF 보유량 등)하면 더 정밀한 모델을 만들 수 있습니다.
필요하면 추가적인 변수를 반영한 모델도 구현해 줄 수 있습니다!
728x90
반응형
'투자정보' 카테고리의 다른 글
지오폴리머관련,국내외 주요 기업 (1) | 2025.03.31 |
---|---|
금융 관련 영화를 장르별로 10편씩 추천,넷플릭스 (0) | 2025.03.16 |
선물 옵션가격을 예측하는 각종지표를 활용하여 변수로 사용하는 함수 (1) | 2025.03.16 |
전 세계 상속세 제도 (0) | 2025.03.16 |
금융거래 플랫폼 Fed 에서 주가현황을 모니터링하는 코드 (0) | 2025.03.16 |