ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿงช ํ€€ํŠธ ํˆฌ์ž ๋ฐฑํ…Œ์ŠคํŠธ ์‹ฌํ™” – ๊ณผ์ตœ์ ํ™”(Overfitting) ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ฐฑํ…Œ์ŠคํŠธ๋ฅผ ๋Œ๋ ค๋ณด๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ•ฉ๋‹ˆ๋‹ค.
“์™€… ์กฐ๊ฑด ์กฐ๊ธˆ ๋ฐ”๊ฟจ๋”๋‹ˆ ์—ฐํ‰๊ท  ์ˆ˜์ต๋ฅ  40% ๋‚˜์˜ค๋„ค! ์ด๊ฑฐ ๋Œ€๋ฐ•์ด๋‹ค!”
→ ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ „์—์„œ๋Š” ๊ณ„์ขŒ๊ฐ€ ๋งˆ์ด๋„ˆ์Šค ์ฐ์Šต๋‹ˆ๋‹ค.

์ด๊ฒŒ ๋ฐ”๋กœ **๊ณผ์ตœ์ ํ™”(Overfitting)**์˜ ํ•จ์ •์ž…๋‹ˆ๋‹ค.
์˜ค๋Š˜์€ ์™œ ๊ณผ์ตœ์ ํ™”๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด ๋“œ๋ฆด๊ฒŒ์š”.


1. ๊ณผ์ตœ์ ํ™”๋ž€?

๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์—๋งŒ ๋”ฑ ๋งž๊ฒŒ ์กฐ๊ฑด์„ ์ตœ์ ํ™”ํ•œ ์ƒํƒœ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ๋ฐฑํ…Œ์ŠคํŠธ๋Š” ํ™”๋ คํ•œ๋ฐ → ์‹ค์ œ ๋ฏธ๋ž˜์—์„œ๋Š” ์„ฑ๊ณผ๊ฐ€ ์žฌํ˜„๋˜์ง€ ์•Š์Œ.

์˜ˆ)

  • PER < 7, ROE > 13.5%, ๋ถ€์ฑ„๋น„์œจ < 87%, ๋ฐฐ๋‹น๋ฅ  > 2.4%
    → ์กฐ๊ฑด์„ ์„ธ์„ธํ•˜๊ฒŒ ์ชผ๊ฐค์ˆ˜๋ก ๊ณผ๊ฑฐ ํŠน์ • ์ƒํ™ฉ์—๋Š” ๋”ฑ ๋งž์ง€๋งŒ, ๋ฏธ๋ž˜ ์ผ๋ฐ˜ํ™”๋Š” ๋ถˆ๊ฐ€๋Šฅ

2. ์™œ ๋ฐœ์ƒํ• ๊นŒ?

  1. ์กฐ๊ฑด์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋„ฃ์Œ
    • ์ง€ํ‘œ 10๊ฐœ ์ด์ƒ ์กฐํ•ฉ → ๋ฐฑํ…Œ์ŠคํŠธ ์Šน๋ฅ  ๋†’์•„์ง
    • ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ํŠน์ • ์‹œ๊ธฐ ๋ฐ์ดํ„ฐ์—๋งŒ ๋งž์Œ
  2. ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๊ฐ€ ์งง์Œ
    • ์ตœ๊ทผ 2~3๋…„๋งŒ ํ…Œ์ŠคํŠธ → ์‹œ์žฅ ์‚ฌ์ดํด ๋ฐ˜์˜ ์•ˆ ๋จ
  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
๋งํฌ
ยซ   2026/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•