[투자] 상관관계로 ETF 포트폴리오 자동 추천

 

📊 FinanceDataReader 기반: 상관관계로 ETF 포트폴리오 자동 추천하기

분산 투자의 핵심은 "서로 다른 방향으로 움직이는 자산"을 고르는 것입니다.
이 글에서는 상관관계가 낮은 ETF 조합을 자동으로 선택하는 파이썬 코드를 소개합니다.

복잡한 모델 대신, 다음의 흐름으로 단순하고 강력한 로직을 구현합니다:


✅ 분석 목표

  • ETF들의 과거 수익률 기반 상관관계 분석

  • 상관관계가 가장 낮은 ETF 조합 자동 선택

  • 시각화로 직관적으로 이해


📦 1. 설치 및 준비

pip install FinanceDataReader pandas numpy seaborn matplotlib
import FinanceDataReader as fdr import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from itertools import combinations

🗂️ 2. 분석할 ETF 리스트 (예: 미국 상장 ETF)

# 미국 상장 ETF (FDR에서 지원하는 티커) etfs = [ 'SPY', # 미국 S&P500 ETF 'QQQ', # 나스닥100 ETF 'TLT', # 미국 장기채 'IEF', # 미국 중기채 'GLD', # 금 'VNQ', # 미국 리츠 'EEM', # 신흥국 주식 'EFA', # 선진국 주식 'LQD', # 회사채 'DBC', # 원자재 ETF ]

📅 3. 과거 가격 데이터 수집

# 데이터프레임에 종가만 저장 price_df = pd.DataFrame() start_date = '2022-01-01' for etf in etfs: try: data = fdr.DataReader(etf, start=start_date) price_df[etf] = data['Close'] except Exception as e: print(f"❌ {etf} 데이터 수집 실패:", e)

📈 4. 수익률 및 상관관계 계산

# 수익률 계산: 일간 수익률 returns = price_df.pct_change().dropna() # 상관관계 행렬 corr_matrix = returns.corr() # 히트맵 시각화 plt.figure(figsize=(10, 8)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', fmt=".2f") plt.title("ETF 간 수익률 상관관계") plt.tight_layout() plt.show()

🧠 5. 상관관계 낮은 조합 자동 탐색

def average_correlation(etf_group, corr_matrix): """선택된 ETF 조합의 평균 상관관계 계산""" pairs = list(combinations(etf_group, 2)) corrs = [corr_matrix.loc[a, b] for a, b in pairs] return np.mean(corrs) def find_least_correlated_combo(etfs, k=4): """ETF 리스트 중 상관관계 평균이 가장 낮은 k개 조합 반환""" min_corr = 1 best_combo = None for combo in combinations(etfs, k): avg_corr = average_correlation(combo, corr_matrix) if avg_corr < min_corr: min_corr = avg_corr best_combo = combo return best_combo, min_corr

✅ 6. 실행 결과 보기

best_etfs, best_corr = find_least_correlated_combo(etfs, k=4) print("✅ 상관관계 가장 낮은 ETF 조합:", best_etfs) print(f"👉 평균 상관관계: {best_corr:.2f}")

📌 예시 결과

✅ 상관관계 가장 낮은 ETF 조합: ('GLD', 'TLT', 'VNQ', 'EEM') 👉 평균 상관관계: 0.18

이 결과는 GLD(금), TLT(채권), VNQ(부동산), EEM(신흥국 주식) 등이 서로 다르게 움직인다는 뜻입니다.
따라서 분산 효과가 우수한 조합이라고 볼 수 있죠.



🔁 응용 확장 아이디어

  • k=5 이상 조합 테스트

  • ETF 수익률 상위 필터 추가 (예: 최근 6개월 수익률 상위 N개만 분석)

  • 변동성, 샤프 지수, 최대 낙폭 등 리스크 지표 반영

  • 리밸런싱 주기별 반복 분석 (월별, 분기별 등)


🔚 정리

항목설명
라이브러리FinanceDataReader로 안정적 호출
분석 대상미국 ETF (수정 가능)
분석 방식수익률 → 상관관계 → 평균값으로 조합 평가
핵심 목적분산 효과가 높은 ETF 자동 추천
장점단순하고 실전 활용 가능


댓글

이 블로그의 인기 게시물

[PLC] PLC 아날로그 입출력 기본

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

공압 속도 제어: 미터인 vs 미터아웃

제너 다이오드에 저항을 연결하는 이유

[주식] 한국거래소(KRX) 데이터 API 입문 가이드

[농사] 식물의 광합성과 호흡

NPN, PNP 트랜지스터 차이점

[PLC] 절연 변압기 (Isolation Transformer)

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

[수학] 정규분포 식은 어떻게 유도된 걸까?