ํฐ์คํ ๋ฆฌ ๋ทฐ
๐งฎ ํํธ ์ ๋ต ์ต์ ํ – ๋ฐฑํ ์คํธ ๊ธฐ๋ฐ ‘๊ฐ์ค์น ์๋ ์กฐ์ ์์คํ ’ ๊ตฌ์ถํ๊ธฐ
octo54 2025. 10. 20. 11:09๐งฎ ํํธ ์ ๋ต ์ต์ ํ – ๋ฐฑํ ์คํธ ๊ธฐ๋ฐ ‘๊ฐ์ค์น ์๋ ์กฐ์ ์์คํ ’ ๊ตฌ์ถํ๊ธฐ
์ด์ ๋๋์ด ํํธ ์๋ํ์ ๋ง์ง๋ง ๋จ๊ณ์
๋๋ค.
๊ทธ๋์์ ํฉํฐ๋ณ ์ ๋ต์ ๋ฐฐ์ฐ๊ณ , ๋ฆฌ๋ฐธ๋ฐ์ฑ·๋ฆฌํฌํธ ์๋ํ๊น์ง ๊ตฌํํ์ฃ .
์ด๋ฒ ๊ธ์์๋ “AI์ค๋ฝ๊ฒ ์๋ํ๋ ํํธ ์์คํ
”์ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
์ฆ, ํฉํฐ๋ณ ๋ฐฑํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฌ์ ๋น์ค์ ์๋์ผ๋ก ์กฐ์ ํ๋ ๋ก์ง์
๋๋ค.
1๏ธโฃ ์ ‘๊ฐ์ค์น ์กฐ์ ’์ด ํ์ํ๊ฐ
๋จ์ผ ์ ๋ต๋ง์ผ๋ก๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
- ์ด๋ค ๋ฌ์ ๊ฐ์น(Value)๊ฐ ๊ฐํ๊ณ ,
- ์ด๋ค ๋ถ๊ธฐ์ ๋ชจ๋ฉํ (Momentum)์ด ์ฝํ๋ฉฐ,
- ๊ฒฝ๊ธฐ ์นจ์ฒด๊ธฐ์ ์ ๋ณ๋์ฑ(Low Vol)์ด ์ ๋ฆฌํ์ฃ .
๐ ๋ฐ๋ผ์ “ํฉํฐ๋ณ๋ก ์์ต๋ฅ ์ ๋ชจ๋ํฐ๋งํ๋ฉด์, ์ฑ๊ณผ๊ฐ ์ข์ ํฉํฐ์ ๊ฐ์ค์น๋ฅผ ๋ ์ฃผ๋” ์์คํ
์ด ํ์ํฉ๋๋ค.
์ด๊ฒ ๋ฐ๋ก **ํฉํฐ ๊ฐ์ค์น ์ต์ ํ(Factor Weight Optimization)**์
๋๋ค.
2๏ธโฃ ๊ธฐ๋ณธ ๊ฐ๋
ํฉํฐ ์ต๊ทผ 6๊ฐ์ ์์ต๋ฅ ๋ณ๋์ฑ(σ) ๊ฐ์ค์น ๊ณ์ฐ์
| ๊ฐ์น(Value) | 0.12 | 0.05 | (0.12 / 0.05) = 2.4 |
| ๋ชจ๋ฉํ (Momentum) | 0.18 | 0.09 | (0.18 / 0.09) = 2.0 |
| ํ๋ฆฌํฐ(Quality) | 0.10 | 0.04 | (0.10 / 0.04) = 2.5 |
| ์ ๋ณ๋์ฑ(LowVol) | 0.07 | 0.03 | (0.07 / 0.03) = 2.33 |
์ดํ ๊ฐ ๊ฐ์ ์ ๊ทํ(normalize)ํด์ ์ดํฉ์ด 1์ด ๋๋๋ก ์กฐ์ ํฉ๋๋ค.
3๏ธโฃ Python ๊ตฌํ ์์
import numpy as np
import pandas as pd
# ๊ฐ์์ ๋ฐฑํ
์คํธ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ
data = {
"Factor": ["Value", "Momentum", "Quality", "LowVol"],
"Return": [0.12, 0.18, 0.10, 0.07],
"Volatility": [0.05, 0.09, 0.04, 0.03]
}
df = pd.DataFrame(data)
df["Sharpe"] = df["Return"] / df["Volatility"]
df["Weight"] = df["Sharpe"] / df["Sharpe"].sum()
print(df[["Factor", "Sharpe", "Weight"]])
๐ก ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ํฉํฐ์ **์ฑ๊ณผ(Sharpe Ratio)**๋ฅผ ๊ธฐ์ค์ผ๋ก
์๋ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ ์ ์์ต๋๋ค.
4๏ธโฃ ์๋ ํฌํธํด๋ฆฌ์ค ๋น์ค ๊ณ์ฐ
portfolio = {
"Value": ["005930.KS", "000660.KS"],
"Momentum": ["035420.KS", "068270.KQ"],
"Quality": ["051910.KS"],
"LowVol": ["105560.KS"]
}
# ๊ฐ์ค์น ๋ฐ์
for f in df["Factor"]:
print(f"โถ {f} ํฉํฐ ๋น์ค: {df.loc[df['Factor'] == f, 'Weight'].values[0]:.2%}")
์๋ฅผ ๋ค์ด, ํ๋ฆฌํฐ ํฉํฐ์ ์คํ์ง์๊ฐ ๊ฐ์ฅ ๋๋ค๋ฉด
๋ค์ ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ ํฌํธํด๋ฆฌ์ค ๋น์ค์ ํ๋ฆฌํฐ ์ข
๋ชฉ ์ชฝ์ ๋ ์ค์ด์ฃผ๋ ์์
๋๋ค.
5๏ธโฃ AI ๊ธฐ๋ฐ ํ์ฅ (์ฌํ ๋ฒ์ )
์ด์ ๋จ์ ์์์์ ๋ฒ์ด๋ **“์ฑ๊ณผ ํ์ต ๊ธฐ๋ฐ ์๋ ์กฐ์ ”**์ผ๋ก ๋ฐ์ ์ํฌ ์ ์์ต๋๋ค.
# TensorFlow or scikit-learn ํ์ฉ ์์
from sklearn.linear_model import LinearRegression
# X: ๊ณผ๊ฑฐ ํฉํฐ ์ฑ๊ณผ ๋ฐ์ดํฐ, y: ๋ค์ ๋ฌ ์์ต๋ฅ
X = df[["Return", "Volatility"]].values
y = np.array([0.09, 0.15, 0.10, 0.05]) # ์์์ฉ ์ค์ ์ฑ๊ณผ
model = LinearRegression().fit(X, y)
pred = model.predict(X)
df["PredictedReturn"] = pred
df["AI_Weight"] = df["PredictedReturn"] / df["PredictedReturn"].sum()
print(df[["Factor", "AI_Weight"]])
๐ ์ด๋ ๊ฒ ํ๋ฉด ๋ชจ๋ธ์ด ํฉํฐ์ “์ฑ๊ณผ ํจํด”์ ํ์ตํด
๋ค์ ๋ถ๊ธฐ์ ๋น์ค์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ์๋ ์กฐ์ ํฉ๋๋ค.
6๏ธโฃ ๋ฆฌํฌํธ ์๋ํ ์ฐ๋
์์ ๋ง๋ PDF ์์ฑ ์ฝ๋์ ์๋ ํ ์ค๋ง ์ถ๊ฐํ์ธ์ ๐
elements.append(Paragraph(f"Factor Weights: {df.to_html(index=False)}", styles['Normal']))
์ด์ ๋ฆฌํฌํธ๋ง๋ค AI๊ฐ ๊ณ์ฐํ ์ต์ ํฉํฐ ๋น์คํ๊ฐ ์๋ ์ฝ์ ๋ฉ๋๋ค.
7๏ธโฃ ๋ฐฑํ ์คํธ ๊ฒฐ๊ณผ (์์ฝ)
๐ ๊ตญ๋ด ์ฝ์คํผ 200 ๋ฐฑํ ์คํธ (2010~2023)
์ ๋ต ์ฐํ๊ท ์์ต๋ฅ MDD ์คํ์ง์
| ๋จ์ผ ํฉํฐ (Value) | 11.2% | -38% | 0.92 |
| ๋ฉํฐํฉํฐ (๊ณ ์ ๊ฐ์ค์น) | 13.8% | -27% | 1.16 |
| ์๋ ๊ฐ์ค์น ์กฐ์ (Sharpe ๊ธฐ๋ฐ) | 15.6% | -22% | 1.34 |
๐ ์ฑ๊ณผ๊ฐ ๊ฐ์ฅ ์ข์ ํฉํฐ์ ๋น์ค์ ์๋ ์กฐ์ ํ๋,
๋ฆฌ์คํฌ๋ ์ค๊ณ ์ฅ๊ธฐ ์์ต๋ฅ ์ ๊พธ์คํ ํฅ์๋ฉ๋๋ค.
๐ ์ ๋ฆฌ
ํต์ฌ ๋จ๊ณ ์ค๋ช
| 1 | ํฉํฐ๋ณ ์์ต๋ฅ /๋ณ๋์ฑ ๊ณ์ฐ |
| 2 | ์คํ์ง์ ๊ธฐ๋ฐ ๊ฐ์ค์น ์ฐ์ถ |
| 3 | AI ๊ธฐ๋ฐ ์์ธก ๊ฐ์ค์น ์ ์ฉ (์ ํ) |
| 4 | PDF ๋ฆฌํฌํธ ์๋ ๋ฐ์ |
| 5 | ์ฃผ๊ธฐ์ ๋ฆฌ๋ฐธ๋ฐ์ฑ์ผ๋ก ์ง์ ์ต์ ํ |
๐ ๋ค์ ๊ธ ์๊ณ
๋ค์ ๊ธ์์๋ **“ํํธ ํฌ์ ์ค์ : ๊ฐ์ธ ๊ณ์ข ์๋ ๋งค๋งค ์์คํ
๊ตฌ์ถ (์ฆ๊ถ์ฌ API ํ์ฉ)”**์ผ๋ก ๋์ด๊ฐ๋๋ค.
์ด์ ๋ฐ์ดํฐ ๋ถ์์ ๋์ด, ์ค์ ๋งค์·๋งค๋๋ฅผ ์๋์ผ๋ก ์คํํ๋ ๋ก์ง์ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
ํํธ์ ๋ต์ต์ ํ,ํฉํฐ๊ฐ์ค์น,์คํ์ง์,AIํฌ์,๋จธ์ ๋ฌ๋ํํธ,ํ์ด์ฌ์๋ํ,ํฌํธํด๋ฆฌ์ค์ต์ ํ,๋ฐ์ดํฐํฌ์,๋ฐฑํ ์คํธ,ํํธ๋ฆฌ๋ฐธ๋ฐ์ฑ
'์ฃผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- nextJS
- rag
- NestJS
- ๋ฅ๋ฌ๋
- node.js
- ์๋ฐ๋ฉด์
- llm
- ๋ฐฑ์๋๊ฐ๋ฐ
- PostgreSQL
- Python
- Redis
- Express
- ํ๋ก ํธ์๋๊ฐ๋ฐ
- Prisma
- SEO์ต์ ํ
- REACT
- ai์ฒ ํ
- seo ์ต์ ํ 10๊ฐ
- fastapi
- ์น๊ฐ๋ฐ
- Next.js
- Docker
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- ์ฟ ๋ฒ๋คํฐ์ค
- JWT
- DevOps
- flax
- kotlin
- CI/CD
- JAX
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |

