본문 바로가기
인공지능

SVM 기반 종목 필터링- SVM + 재무데이터

by aiproductmanager 2025. 6. 7.
728x90
반응형
 
 

 

"SVM 기반 종목 필터링"은 머신러닝 알고리즘 중 하나인 **SVM (Support Vector Machine)**을 활용하여 재무데이터 기반으로 투자에 적합한 종목을 선별하는 방법입니다. 아래에 개념, 방법론, 실전 적용까지 자세히 설명드립니다.


📌 1. 개요: SVM이란?

  • Support Vector Machine은 분류(Classification) 또는 회귀(Regression) 문제를 해결하기 위한 지도학습(Supervised Learning) 알고리즘입니다.
  • SVM은 데이터를 고차원으로 매핑하여 최적의 결정 경계(Hyperplane)를 찾아서 두 클래스를 나누는 데 초점을 둡니다.

📊 2. 투자 종목 필터링에 SVM을 사용하는 방식

단계 설명
1️⃣ 재무데이터 수집 재무제표에서 ROE, PER, PBR, 부채비율, 매출성장률 등 수치 확보
2️⃣ 라벨링 과거 수익률 기준으로 좋은 종목(1), 나쁜 종목(0) 이진 라벨링
3️⃣ 학습 SVM으로 과거 데이터를 학습시켜 수익성이 높은 종목의 특징 패턴 인식
4️⃣ 예측 새로운 데이터에 대해 SVM이 투자 유망 종목인지 판단
 

📈 3. 예시 피처 (Feature)

  • 수익성 지표: ROE, 영업이익률
  • 가치 지표: PER, PBR
  • 성장성 지표: 매출 증가율, EPS 증가율
  • 안정성 지표: 부채비율, 유동비율

🤖 4. SVM의 장점

  • 작은 데이터셋에도 강한 성능
  • 고차원에서도 잘 작동
  • 이상치(outlier)에 어느 정도 강건함

⚠️ 5. 주의할 점

  • 이진 분류에 적합하므로 클래스 간 균형 필요
  • 스케일링 필수: StandardScaler나 MinMaxScaler 적용 권장
  • 선형 분리 어려운 경우 비선형 커널(RBF) 사용

🧪 6. 실전 Python 예제 (요약)

from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# 예시 데이터 (X: 재무지표, y: 수익률 기준으로 라벨링된 종목)
X = df[['ROE', 'PER', 'PBR', 'DebtRatio']]
y = (df['1Y_return'] > 0.15).astype(int)  # 1년 수익률 15% 초과면 긍정 라벨

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2)

model = SVC(kernel='rbf', C=1.0)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

✅ 활용 시나리오

  • 포트폴리오 종목 사전 필터링
  • 가치주/성장주 구분 모델링
  • ETF/섹터 종목 내부의 핵심 알짜주 선별

📌 원하시면 위 코드에:

  • yfinance API로 실시간 재무데이터 수집
  • Streamlit UI로 종목 필터링 대시보드

 

 

# 📈 SVM 기반 종목 필터링 시스템 (재무데이터 + Streamlit 대시보드)

## 1️⃣ 설치 패키지
```bash
pip install yfinance pandas scikit-learn streamlit
```

---

## 2️⃣ 실시간 재무데이터 수집 (`yfinance` 활용)
```python
import yfinance as yf
import pandas as pd

# 종목 리스트 (미국 주식 예시)
stocks = ['AAPL', 'MSFT', 'GOOGL', 'META', 'TSLA']

# 주요 재무지표 수집
data = []
for ticker in stocks:
    stock = yf.Ticker(ticker)
    info = stock.info
    data.append({
        'Ticker': ticker,
        'ROE': info.get('returnOnEquity'),
        'PER': info.get('trailingPE'),
        'PBR': info.get('priceToBook'),
        'DebtRatio': info.get('debtToEquity'),
    })

df = pd.DataFrame(data)
df = df.dropna()
```

---

## 3️⃣ SVM 학습 및 예측
```python
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler

# 예시 라벨링 (임시로 ROE 10% 이상이면 유망종목)
df['Label'] = (df['ROE'] > 0.10).astype(int)

X = df[['ROE', 'PER', 'PBR', 'DebtRatio']]
y = df['Label']

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

model = SVC(kernel='rbf', C=1.0)
model.fit(X_scaled, y)

df['Prediction'] = model.predict(X_scaled)
```

---

## 4️⃣ Streamlit 종목 필터링 대시보드
```python
import streamlit as st

st.title("🔍 SVM 기반 종목 필터링 대시보드")

st.dataframe(df[['Ticker', 'ROE', 'PER', 'PBR', 'DebtRatio', 'Prediction']])

st.write("### ✅ Prediction == 1 인 유망 종목")
st.dataframe(df[df['Prediction'] == 1])
```

---

## ✅ 요약
| 항목 | 설명 |
|------|------|
| 🎯 재무지표 기반 | ROE, PER, PBR, 부채비율 기반 종목 분석 |
| 🤖 머신러닝 모델 | SVM으로 패턴 학습 및 분류 |
| 🧾 실시간 데이터 | `yfinance`로 실시간 재무정보 수집 |
| 📊 대시보드 | `Streamlit` UI로 투자자용 필터링 인터페이스 제공 |

---

💡 확장 아이디어:
- [ ] GPT 설명 생성기 연결
- [ ] 전략 백테스트 수익률 시뮬레이터
- [ ] 한국 종목용 `finance-datareader` 적용

원하시면 해당 기능도 바로 추가해드릴 수 있습니다.

 

✅ yfinance 기반 실시간 재무데이터 수집과 Streamlit 종목 필터링 대시보드가 통합되었습니다.

📌 실행 요약:

  1. yfinance로 ROE, PER, PBR, 부채비율 실시간 수집
  2. SVM으로 투자 유망 종목 분류
  3. Streamlit으로 시각화 대시보드 제공

🎯 실행 명령:

 
streamlit run app.py
 
 

➕ GPT 설명 생성기 / 백테스트 기능도 원하시면 연동

 

# 📈 SVM 기반 종목 필터링 시스템 (재무데이터 + Streamlit 대시보드 + GPT 설명 + 백테스트)

## 1️⃣ 설치 패키지
```bash
pip install yfinance pandas scikit-learn streamlit openai matplotlib
```

---

## 2️⃣ 실시간 재무데이터 수집 (`yfinance` 활용)
```python
import yfinance as yf
import pandas as pd

stocks = ['AAPL', 'MSFT', 'GOOGL', 'META', 'TSLA']
data = []
for ticker in stocks:
    stock = yf.Ticker(ticker)
    info = stock.info
    data.append({
        'Ticker': ticker,
        'ROE': info.get('returnOnEquity'),
        'PER': info.get('trailingPE'),
        'PBR': info.get('priceToBook'),
        'DebtRatio': info.get('debtToEquity')
    })
df = pd.DataFrame(data).dropna()
```

---

## 3️⃣ SVM 학습 및 예측
```python
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler

X = df[['ROE', 'PER', 'PBR', 'DebtRatio']]
df['Label'] = (df['ROE'] > 0.10).astype(int)
y = df['Label']

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = SVC(kernel='rbf', C=1.0)
model.fit(X_scaled, y)
df['Prediction'] = model.predict(X_scaled)
```

---

## 4️⃣ GPT 설명 생성기
```python
import openai

openai.api_key = 'your-openai-api-key'

def gpt_explain(stock_info):
    prompt = f"""
    다음은 재무지표입니다:
    ROE: {stock_info['ROE']}, PER: {stock_info['PER']}, PBR: {stock_info['PBR']}, 부채비율: {stock_info['DebtRatio']}
    이 종목의 투자 매력도에 대해 요약해주세요.
    """
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message['content']
```

---

## 5️⃣ 간단한 백테스트
```python
import matplotlib.pyplot as plt
import numpy as np

# 예시 수익률 생성
np.random.seed(0)
df['1Y_return'] = np.random.normal(0.1, 0.15, size=len(df))

# 누적 수익 비교
df['CumulativeReturn'] = (1 + df['1Y_return']).cumprod()
df['FilteredReturn'] = (1 + df[df['Prediction'] == 1]['1Y_return']).cumprod()

plt.plot(df['CumulativeReturn'], label='전체 포트')
plt.plot(df['FilteredReturn'], label='선별 포트')
plt.legend()
plt.title("SVM 필터링 백테스트")
plt.savefig("backtest_result.png")
```

---

## 6️⃣ Streamlit 종목 필터링 대시보드
```python
import streamlit as st

st.title("🔍 SVM 종목 필터링 + GPT 설명 + 백테스트")
st.dataframe(df[['Ticker', 'ROE', 'PER', 'PBR', 'DebtRatio', 'Prediction']])

selected = st.selectbox("종목 선택", df['Ticker'])
selected_info = df[df['Ticker'] == selected].iloc[0]

st.write("### GPT 설명")
st.write(gpt_explain(selected_info))

st.image("backtest_result.png")
```

---

✅ 요약 기능:
| 항목 | 설명 |
|------|------|
| 🧠 GPT 설명기 | 각 종목 재무지표 기반 투자 해석 제공 |
| 📈 백테스트 | 전략 유효성 시각적 검증 제공 |
| 💻 대시보드 | 종목 선택 + 결과 확인 인터페이스 |

✅ GPT 기반 설명 생성기와 간단한 백테스트 기능이 Streamlit 종목 필터링 시스템에 통합되었습니다.

포함된 기능 요약:

  • 🔍 실시간 재무지표 수집 (yfinance)
  • 🤖 SVM 기반 종목 분류
  • 🧠 GPT-4 기반 투자 설명 자동 생성
  • 📈 필터링 vs 전체 백테스트 수익률 그래프
  • 💻 Streamlit 대시보드에서 종목 선택 → 설명 + 성과 보기
순위 AI 투자 방안 이름 활용 기술 상세 바로가기
1 AI 퀀트 포트폴리오 최적화 Markowitz, RL, MPT, AI 최적화 바로가기
2 감정 분석 기반 뉴스 트레이딩 NLP, BERT, LLM 바로가기
3 AI ETF 자동 리밸런싱 AutoML, Alpha Vantage API 바로가기
4 머신러닝 기반 주가 예측 XGBoost, LightGBM 바로가기
5 딥러닝 LSTM 시계열 예측 TensorFlow, PyTorch LSTM 바로가기
6 강화학습 기반 자동 매매 OpenAI Gym, PPO, DQN 바로가기
7 AI 기반 가치주 선별 (Value Factor) AI 팩터스코어링, 계량모델 바로가기
8 GPT 기반 재무제표 요약 투자 GPT-4, LangChain, OCR 바로가기
9 AI 리스크 해지 전략 (VIX, 금리, 환율) AI 헷지백테스트, 시나리오 모델 바로가기
10 SVM 기반 종목 필터링 SVM + 재무데이터 바로가기
11 AI IPO 스코어링 모델 AI 점수화 + IPO 성과예측 바로가기
12 챗봇 기반 투자 자문 시스템 LLM + Chat UI + API 연결 바로가기
13 XGBoost 기반 이벤트 드리븐 트레이딩 XGBoost + 뉴스 이벤트 바로가기
14 AutoML 기반 알고리즘 전략 탐색 TPOT, H2O.ai, FeatureTools 바로가기
15 AI 기반 ESG 점수 분석 투자 AI ESG 분석 + ETF 필터링 바로가기
16 옵션 가격 예측 딥러닝 모델 DNN, OptionNet, VolNet 바로가기
17 고빈도 트레이딩용 AI 패턴 인식 CNN, 딥러닝 패턴 분석 바로가기
18 AI 기반 섹터 로테이션 모델 순환분류 + 군집분석 바로가기
19 LLM 기반 글로벌 투자 리서치 요약 GPT + PDF 요약 + 질의응답 바로가기
20 AI + Satellite Data 기반 농산물 투자 AI + 위성데이터 + 시계열학습 바로가기

 

이 글이 도움이 되었다면,아래 링크를 통해서 후원해주세요.( 커피나 차 한잔 이나 맥주나 와인한잔 )

 

728x90
반응형