
한 종목에 '몰빵' 투자하는 것이 위험하다는 말, 많이 들어보셨을 겁니다. 분산투자가 중요하다는 데에는 거의 이견이 없습니다. 그런데 현실은 어떨까요? 20년 전이나 지금이나, 많은 투자자들의 계좌에는 한두 개 종목만 담겨 있습니다.
시장이 좋아 보이면 가진 자금을 가장 관심 가는 종목에 몰아넣고, 주가가 오르는 것을 보며 흐뭇해합니다. 하지만 조정이 오면 당황하고, 가장 수익률이 높던 종목을 생각하며 쉽게 팔지 못합니다. 이후 주가는 더 하락하고, 어느새 수익은 손실로 전환됩니다. 이제는 본전만이라도 건지기를 바라지만, 주가는 오르락내리락하며 투자자의 인내심을 시험합니다. 지친 끝에 손실을 감수하고 매도하면, 아이러니하게도 그제서야 주가가 다시 오르기 시작합니다. 이 경험을 반복하며 우리는 주식시장이 얼마나 냉혹한지를 체감하게 됩니다.
그렇다면, 한 종목에 집중 투자하는 것이 위험하다면 도대체 ‘적정한 종목 수’는 몇 개일까요? 경험 많은 투자자들은 10개 이내를 권하기도 하고, 20~30개도 괜찮다고 말합니다. 정답은 없지만, 이 문제를 수학적으로 분석해볼 수 있는 방법이 있습니다. 바로 '켈리 공식(Kelly Criterion)'입니다.
켈리 공식이란?
켈리 공식은 본래 도박에서 승률, 베팅금액, 이익금의 관계를 토대로 얼마를 걸어야 파산하지 않고 장기적으로 수익을 극대화할 수 있는가를 계산하는 공식입니다. 도박과 투자는 다르다고 느낄 수도 있지만, 법적 관점에서는 모두 ‘불확실한 결과에 금전을 거는 행위’라는 점에서 본질적으로 유사하게 취급됩니다.
누군가 “도박에서 이기는 법”을 알려준다며 돈을 받아갔지만 실제로 반복적으로 졌다고 해도, 그것만으로 사기죄로 처벌할 수 없습니다. 투자 자문도 마찬가지입니다. 수익을 약속한다고 해서 그것이 법적 보장을 받는 것은 아닙니다. 결국 투자란 확률과 리스크를 이해하고 스스로 판단을 내리는 게임입니다. 이 점에서 도박과 투자의 책임 구조는 유사합니다.
켈리 공식의 적용: 몰빵의 위험을 수치로 보여준다
켈리 공식을 적용하려면 다음 요소가 필요합니다:
- 승률: 내가 투자해서 수익을 낼 확률
- 손절률: 실패했을 때의 손실 비율
- 목표 수익률: 성공했을 때의 수익 비율
예를 들어, 승률을 40%로 고정한다고 가정해봅시다. 이는 10번 투자 중 4번은 수익을 낸다는 의미입니다. 그리고 손절은 -6%, 목표 수익은 +16%로 설정합니다. 이 수치를 바탕으로 켈리 공식에 따라 얼마나 자금을 베팅해야 적절한가를 계산하면, 해당 종목에 투자 가능한 비중은 전체 자금의 약 18% 이내가 됩니다. 18%를 넘지 말라는 의미이기 때문에 이 조차 부담스러우면 절반 값을 쓰기도 합니다.
재미있는 점은 손절을 매우 짧게, 수익률은 아주 높게 잡더라도, 승률이 낮으면 절대 몰빵이 허용되지 않는다는 것입니다. 만약 승률이 100%라면, 이런 계산은 필요 없습니다. 문제는 대부분의 개인 투자자는 이 수준의 승률을 가질 수 없다는 데 있습니다.
켈리 공식의 통찰: 손절, 손익비, 종목 수
켈리 공식은 단순히 수익을 극대화하기 위한 도구가 아닙니다. 같은 기대값이라면 파산 가능성을 최소화하는 ‘최적의 투자 비중’을 알려주는 도구입니다.
예를 들어, 1천만 원을 가지고 100번에 걸쳐 10만 원씩 투자하거나, 10번에 걸쳐 100만 원씩 투자한다면 이론적으로 기대수익은 동일합니다. 하지만 후자의 경우, 초반에 몇 번 실패하면 자금이 고갈되어 더 이상 투자 자체가 불가능해질 수 있습니다. 바로 이 파산 리스크를 고려하는 것이 켈리 공식의 핵심입니다.
또한, 손절 비율이 50%를 넘으면 아무리 높은 수익률을 기대해도 켈리 공식은 투자를 권장하지 않습니다. 이는 손절이 ‘베팅 금액’ 그 자체이기 때문입니다. 손절이 클수록 베팅금이 커지고, 파산 리스크도 높아집니다.
손익비로 보면, 2.5:1 이상일 때부터 켈리 공식에 따라 의미 있는 투자 비중이 도출됩니다. 손익비 2.5:1일 때, 자산 중 5~10%를 투자할 수 있다는 계산이 나오고, 이는 10~20종목 이상으로 분산 투자해야 한다는 결론에 이릅니다.
아래에 손절률과 이익률에 따른 켈리 비율과 최소 투자종목 숫자를 히트맵으로 정리했으니 참고하시기 바랍니다.
“그럴 바엔 ETF가 낫지 않나?”에 대한 반론
많은 분들이 “종목을 그렇게 많이 나눌 바에야 ETF가 낫다”고 말합니다. 그러나 ETF, 특히 KOSPI200 ETF는 사실상 200개의 종목을 추종합니다. 이를 완전히 추종하는 데는 고도화된 금융공학이 동원됩니다. 개별 종목을 다수 보유한다고 해서 ETF처럼 움직이지는 않지만, ETF도 개별 기업의 주가 변동을 그대로 담지는 못합니다.
더 중요한 점은, ETF가 대표하는 지수조차 수백 종목의 통계를 기반으로 만들어졌다는 사실입니다. 개별 종목 간의 상관관계는 생각보다 약하며, 겉보기와 달리 서로 다른 흐름을 보이기도 합니다. 따라서 진정한 의미의 분산투자란 최소 20~30개 이상의 다양한 종목을 보유하는 것에서 시작된다고 볼 수 있습니다.
결론: 수학은 통찰을 도와줄 뿐, 해답이 전부는 아니다
개별 종목의 주가를 예측하는 것은 어렵습니다. 하지만 자신의 행동을 수학적으로 분석하는 것은 가능합니다. 그 결과는 종종 우리가 경험적으로 알고 있던 투자 격언과 일치합니다.
켈리 공식, 손익비, 승률, 손절률 등의 개념은 단순히 수학적 도구가 아니라 투자의 리스크를 인식하고 의사결정에 근거를 부여하는 강력한 프레임워크입니다.
물론, 어떤 투자자들은 이론 없이도 훌륭한 감각으로 자산을 불려갑니다. 그러나 숫자를 통해 자신을 점검하고 선택지를 확장하는 것, 그 자체만으로도 충분히 값진 투자입니다. 수학적 분석은 결국 더 나은 질문을 던지고, 더 깊은 통찰을 얻게 하는 도구일 뿐입니다.
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
# 고정된 승률
p = 0.4
# 손절률과 이익률: 1% ~ 100%, 5% 단위
loss_rates = np.arange(1, 101, 5)
gain_rates = np.arange(1, 101, 5)
# 켈리 비율 계산
kelly_matrix = np.zeros((len(loss_rates), len(gain_rates)))
for i, loss in enumerate(loss_rates):
for j, gain in enumerate(gain_rates):
b = gain / loss
f = (p * (b + 1) - 1) / b
kelly_matrix[i, j] = max(f, 0)
# 나눔고딕 폰트 설정 (설치된 경우)
font_paths = fm.findSystemFonts(fontpaths=None, fontext='ttf')
nanum_font = [fp for fp in font_paths if 'NanumGothic' in fp]
if nanum_font:
plt.rcParams['font.family'] = fm.FontProperties(fname=nanum_font[0]).get_name()
# 히트맵 그리기
plt.figure(figsize=(12, 8))
sns.heatmap(kelly_matrix, xticklabels=gain_rates, yticklabels=loss_rates,
cmap="YlGnBu", annot=True, fmt=".2f", cbar_kws={'label': '켈리 비율'})
plt.xlabel("이익률 (%)")
plt.ylabel("손절률 (%)")
plt.title("승률 40%일 때 손절률과 이익률에 따른 켈리 비율 히트맵")
plt.tight_layout()
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 고정된 승률
p = 0.4
# 손절률과 이익률: 1% ~ 100%, 5% 단위
loss_rates = np.arange(1, 101, 5)
gain_rates = np.arange(1, 101, 5)
# 켈리 비율 계산 및 최대 투자 종목 수
investment_slots = np.zeros((len(loss_rates), len(gain_rates)))
for i, loss in enumerate(loss_rates):
for j, gain in enumerate(gain_rates):
b = gain / loss
f = (p * (b + 1) - 1) / b
f = max(f, 0)
investment_slots[i, j] = np.floor(1 / f) if f > 0 else 0
# 히트맵 그리기
plt.figure(figsize=(12, 8))
sns.heatmap(investment_slots, xticklabels=gain_rates, yticklabels=loss_rates,
cmap="YlOrBr", annot=True, fmt=".0f", cbar_kws={'label': '최소 분산 투자 종목 수'})
plt.xlabel("이익률 (%)")
plt.ylabel("손절률 (%)")
plt.title("승률 40%일 때 켈리비율 기반 최소 분산 투자 종목 수")
plt.tight_layout()
plt.show()
'경제현상' 카테고리의 다른 글
다이소에 미국 물건이 들어온다면? (1) | 2025.05.18 |
---|---|
코리아 디스카운트, 구조의 문제일까요? 선택의 결과일까요? (0) | 2025.04.21 |
관세 전쟁에서 트럼프가, 미국이 원하는 것 (1) | 2025.04.08 |
스마트워치 사용 경험: 레드미워치 4와 갤럭시 워치 7 (0) | 2025.03.31 |
동네 상가의 2층 이상이 모두 없어진다면? (0) | 2025.03.13 |
한의사입니다. 근데 그냥 침만 놓는 사람 아닙니다. 한의학부터 사회 꼬집기, 경제·경영 및 기술까지— 세상이 던지는 말들에 한 마디씩 반사해봅니다. 오신 모든 분들, 환영합니다.