ํฐ์คํ ๋ฆฌ ๋ทฐ
๐งช ํํธ ํฌ์ ๋ฐฑํ ์คํธ ์ฌํ – ๊ณผ์ต์ ํ(Overfitting) ํผํ๋ ๋ฐฉ๋ฒ
octo54 2025. 8. 25. 10:48๐งช ํํธ ํฌ์ ๋ฐฑํ ์คํธ ์ฌํ – ๊ณผ์ต์ ํ(Overfitting) ํผํ๋ ๋ฐฉ๋ฒ
๋ฐฑํ
์คํธ๋ฅผ ๋๋ ค๋ณด๋ฉด ๋๊ตฌ๋ ์ด๋ฐ ๊ฒฝํ์ ํฉ๋๋ค.
“์… ์กฐ๊ฑด ์กฐ๊ธ ๋ฐ๊ฟจ๋๋ ์ฐํ๊ท ์์ต๋ฅ 40% ๋์ค๋ค! ์ด๊ฑฐ ๋๋ฐ์ด๋ค!”
→ ๊ทธ๋ฐ๋ฐ ์ค์ ์์๋ ๊ณ์ข๊ฐ ๋ง์ด๋์ค ์ฐ์ต๋๋ค.
์ด๊ฒ ๋ฐ๋ก **๊ณผ์ต์ ํ(Overfitting)**์ ํจ์ ์
๋๋ค.
์ค๋์ ์ ๊ณผ์ต์ ํ๊ฐ ์๊ธฐ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ํผํ ์ ์๋์ง ์ ๋ฆฌํด ๋๋ฆด๊ฒ์.
1. ๊ณผ์ต์ ํ๋?
๊ณผ๊ฑฐ ๋ฐ์ดํฐ์๋ง ๋ฑ ๋ง๊ฒ ์กฐ๊ฑด์ ์ต์ ํํ ์ํ๋ฅผ ๋งํฉ๋๋ค.
์ฆ, ๋ฐฑํ
์คํธ๋ ํ๋ คํ๋ฐ → ์ค์ ๋ฏธ๋์์๋ ์ฑ๊ณผ๊ฐ ์ฌํ๋์ง ์์.
์)
- PER < 7, ROE > 13.5%, ๋ถ์ฑ๋น์จ < 87%, ๋ฐฐ๋น๋ฅ > 2.4%
→ ์กฐ๊ฑด์ ์ธ์ธํ๊ฒ ์ชผ๊ฐค์๋ก ๊ณผ๊ฑฐ ํน์ ์ํฉ์๋ ๋ฑ ๋ง์ง๋ง, ๋ฏธ๋ ์ผ๋ฐํ๋ ๋ถ๊ฐ๋ฅ
2. ์ ๋ฐ์ํ ๊น?
- ์กฐ๊ฑด์ ๋๋ฌด ๋ง์ด ๋ฃ์
- ์งํ 10๊ฐ ์ด์ ์กฐํฉ → ๋ฐฑํ ์คํธ ์น๋ฅ ๋์์ง
- ํ์ง๋ง ์ค์ ๋ก๋ ํน์ ์๊ธฐ ๋ฐ์ดํฐ์๋ง ๋ง์
- ๋ฐ์ดํฐ ๋ฒ์๊ฐ ์งง์
- ์ต๊ทผ 2~3๋ ๋ง ํ ์คํธ → ์์ฅ ์ฌ์ดํด ๋ฐ์ ์ ๋จ
- ๊ฒ์ฆ ๋ฐ์ดํฐ ๋ฏธ์ฌ์ฉ
- ๋ฐฑํ ์คํธ์ ์ค์ ๊ฒ์ฆ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ์ง ์์
3. ๊ณผ์ต์ ํ ๋ฐฉ์ง ๋ฐฉ๋ฒ
โ โ ๋จ์ํ ์กฐ๊ฑด ์ ์ง
- ์ ๋ต์ 3~4๊ฐ ์กฐ๊ฑด์ผ๋ก ์ถฉ๋ถ
- ๋ณต์กํ ์๋ก ์ค์ ์ ํฉ์ฑ↓
โ โก ์ธ์ํ / ์์์ํ ๋ถ๋ฆฌ
- ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋ ๊ตฌ๊ฐ์ผ๋ก ๋๋
- ์ธ์ํ: ์ ๋ต ์ค๊ณ์ฉ (์: 2010~2018๋ )
- ์์์ํ: ๊ฒ์ฆ์ฉ (์: 2019~2024๋ )
- ๋ ๊ตฌ๊ฐ ๋ชจ๋ ์ฑ๊ณผ๊ฐ ๋์ค๋ฉด ์ ๋ขฐ๋ ↑
โ โข ๋กค๋ง ์๋์ฐ ๊ฒ์ฆ
- 2010~2015๋ → ํ ์คํธ
- 2016~2021๋ → ๋ค์ ํ ์คํธ
- ์ฌ๋ฌ ๊ธฐ๊ฐ์ผ๋ก ๊ตด๋ ค์ ์ผ๊ด์ฑ ํ์ธ
โ โฃ ํ์ค์ ์ธ ๋น์ฉ ๋ฐ์
- ๋งค๋งค ์์๋ฃ, ์ธ๊ธ ๋ฐ๋์ ๋ฐ์
- ์ค์ ๊ณ์ข ์์ต๋ฅ ๊ณผ ๋ฐฑํ ์คํธ ์ฐจ์ด๋ฅผ ์ค์
โ โค ์คํ์ง์·MDD ๊ฐ์ด ๋ฆฌ์คํฌ ์งํ๋ ํ์ธ
- ๋จ์ ๋์ ์์ต๋ฅ ์ด ์๋๋ผ,
- ๋ณ๋์ฑ๊ณผ ์ต๋ ์์ค๊น์ง ํจ๊ป ๊ฒ์ฆํด์ผ ํจ
4. ํ์ด์ฌ ๊ฐ๋จ ์์ – ์ธ์ํ/์์์ํ
import pandas as pd
import yfinance as yf
# ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ (์ผ์ฑ์ ์ ์์)
data = yf.download("005930.KQ", start="2010-01-01", end="2024-01-01")
# ์ธ์ํ / ์์์ํ ๋ถ๋ฆฌ
in_sample = data[:'2018']
out_sample = data['2019':]
# ๊ฐ๋จ ์ ๋ต: 20์ผ ์ดํ ์์์ ๋งค์
in_sample['MA20'] = in_sample['Close'].rolling(20).mean()
out_sample['MA20'] = out_sample['Close'].rolling(20).mean()
in_sample['Signal'] = in_sample['Close'] > in_sample['MA20']
out_sample['Signal'] = out_sample['Close'] > out_sample['MA20']
print("In-sample ์์ต๋ฅ :", (in_sample['Close'].pct_change() * in_sample['Signal'].shift(1)).sum())
print("Out-sample ์์ต๋ฅ :", (out_sample['Close'].pct_change() * out_sample['Signal'].shift(1)).sum())
๐ ์ด๋ ๊ฒ ํ๋ฉด **ํ๋ จ(์ธ์ํ)**๊ณผ **๊ฒ์ฆ(์์์ํ)**์ ๋๋ ์ ๋ต์ ์ผ๊ด์ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
5. ์ ๋ฆฌ
- ๋ฐฑํ ์คํธ๊ฐ ํ๋ คํ๋ค๊ณ ๋ค ๋ฏฟ์ผ๋ฉด ์ ๋๋ค
- ๋จ์ํจ + ์ฅ๊ธฐ๊ฐ ๋ฐ์ดํฐ + ์ธ/์์์ํ ๋ถ๋ฆฌ๊ฐ ํต์ฌ
- ์ ๋ต์ ์ฌํ ๊ฐ๋ฅํด์ผ ๊ฐ์น๊ฐ ์๋ค
๐ ๋ค์ ๊ธ์์๋ **“ํํธ ํฌ์์์ ํ์ ์งํ – ์คํ์ง์, MDD, ๋ณ๋์ฑ ํด์๋ฒ”**์ ๋ค๋ฃน๋๋ค.
๋จ์ํ ์์ต๋ฅ ๋ง ๋ณด๋ ๊ฒ ์๋๋ผ, ๋ฆฌ์คํฌ ๋๋น ์ฑ๊ณผ๋ฅผ ํด์ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
ํํธ๋ฐฑํ ์คํธ,๊ณผ์ต์ ํ,ํํธ์ ๋ต๊ฒ์ฆ,์ฃผ์๋ฐฑํ ์คํธ,์ธ์ํ์์์ํ,๋กค๋ง์๋์ฐ,์คํ์ง์,MDD,ํฌ์๋ฆฌ์คํฌ,ํํธ์ค์
'์ฃผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- NestJS
- Python
- CI/CD
- DevOps
- Docker
- ๋ฐฑ์๋๊ฐ๋ฐ
- flax
- Prisma
- seo ์ต์ ํ 10๊ฐ
- ai์ฒ ํ
- REACT
- LangChain
- PostgreSQL
- nextJS
- node.js
- llm
- Express
- JWT
- nodejs
- ์์ฑํAI
- rag
- JAX
- ์น๊ฐ๋ฐ
- SEO์ต์ ํ
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- ์ฟ ๋ฒ๋คํฐ์ค
- Next.js
- ๋ฅ๋ฌ๋
- fastapi
- kotlin
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 | 29 | 30 |
| 31 |
