(주사위, 동전을 이용한)투자 시뮬레이션

김민주·2025년 4월 14일

GK

목록 보기
12/15
import numpy as np
import matplotlib.pyplot as plt

def daily_return(scale):
    """
    하루 변동률을 계산하는 함수.
    """
    # 주사위 결과(1~6)
    dice = np.random.randint(1, 7)
    # 동전: +1 (앞) 또는 -1 (뒤)
    direction = np.random.choice([1, -1])
    
    # 일일 수익률: 1 ± (dice * scale)%를 적용
    return 1 + direction * (dice * scale) / 100.0

def simulate_investment(scale, days=3650, initial_value=100.0):
    """
    주어진 scale (variant)에 대해 지정일수 동안 매일 daily_return()을 적용한 최종 투자 가치를 계산.
    """
    value = initial_value
    for _ in range(days):
        value *= daily_return(scale)
    return value

def run_simulations(scale, simulations=1000, days=3650):
    """
    지정한 scale (variant)에 대해 여러 번 시뮬레이션한 최종 투자 가치 분포(배열)를 반환.
    """
    final_values = [simulate_investment(scale, days) for _ in range(simulations)]
    return np.array(final_values)


np.random.seed(150000)  
num_simulations = 1000
days = 3650  # 10년

# variant마다 적용할 scale (매일 변동 % 계산 시 곱할 값)
variants = {
    "6": 1,    # 1~6%
    "12": 2,   # 2~12%
    "30": 5,   # 5~30%
    "60": 10,  # 10~60%
}

results = {}
for name, scale in variants.items():
    results[name] = run_simulations(scale, num_simulations, days)
    mean_val = results[name].mean()
    std_val  = results[name].std()
    median_val = np.median(results[name])
    print(f"Variant '{name}': scale={scale} -> mean = {mean_val:.4f}, std = {std_val:.4f}, median = {median_val:.4f}")

# 그래프로 나타냄
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
axes = axes.flatten()

for ax, (name, final_values) in zip(axes, results.items()):
    ax.hist(final_values, bins=50, alpha=0.8, edgecolor='black', color='royalblue', density=True)
    ax.axvline(final_values.mean(), color='red', linestyle='--', label=f'Mean = {final_values.mean():.2f}')
    ax.axvline(np.median(final_values), color='green', linestyle='--', label=f'Median = {np.median(final_values):.2f}')
    ax.set_title(f"Variant '{name}' (scale = {variants[name]})")
    ax.set_xlabel('revenue')
    ax.set_ylabel('Density')
    ax.set_yscale('log') 
    ax.legend()

plt.tight_layout()
plt.show()


=> 변동성이 클수록(scale 값의 증가) -> 수익을 낼 수 있는 확률이 전반적으로 하락함

=> 경우의 분포와 극단적 값:
높은 변동성(예: scale 값이 큰 경우)은 투자 결과의 분포를 극단적으로 만듭니다. 대부분의 경우는 큰 손실로 인해 투자 가치가 매우 낮아지고, 소수의 “대박” 케이스만이 평균을 끌어올리게 됩니다. 이렇게 극단적인 분포에서는 수익을 내는 경로가 드물어지고, 대부분의 경우는 최종 결과가 낮거나 거의 0에 수렴합니다.


mean => 전체 평균
median => 몰려 있는 구간의 평균(중앙값임) / 전체의 평균보다 더 정확한 실제 평균값을 구할 수 있음

1. 곱셈 구조와 복리효과

  • 투자 시뮬레이터에서 매일의 투자 가치는 이전 날의 가치에 당일의 수익률(또는 손실률)을 곱하여 계산

곱셈 누적의 특징

  • 비선형적(지수적으로) 결과에 영향을 줌
  • 매일 매일의 변화가 단순히 더해지는 것 x -> 이전 결과에 비례하여 증폭되거나 축소됨
  • 작은 변화라도 시간이 지날수록 영향력이 기하급수적으로 커질 수 있음

복리효과

  • 복리효과란, 이자가 원금에 합산된 후 다음 기간에 다시 이자가 원금과 합쳐진 금액에 대해 계산되는 효과를 의미

지수적 성장 혹은 감소:

  • 매일 조금씩 증가하거나 감소하는 변화가 누적되면, 결과적으로 장기에는 투자 가치가 지수함수처럼 크게 변동하게 됩니다.
  • 이는 단순한 덧셈적 누적과 달리, 초기 조건과 매일의 변화 순서에 따라 최종 결과가 극단적으로 달라질 수 있음을 의미합니다.

변화의 민감성:

  • 작은 일일 변동이라도 매일 반복되면 전체 투자 결과에 큰 영향을 끼침 => 초기 몇 년의 성과가 매우 중요

투자 시뮬레이터에 미치는 곱셈구조와 복리의 영향

=> 곱셈구조는 양의 수 < 음의 수에 더 민감
ex) 첫째 날에 +10% , 둘째날 -10%
첫째 날 1 + 0.1 = 1.1
둘째 날 1 - 0.1 = 0.9
1.1 * 0.9 = 0.99 초기의 1보다 작아짐(음의 수에 더 민감)

=> 복리는 기하급수적으로 영향을 미칠가능성이 높음

  • 수익 누적 시 => 폭발적 성장이 가능
    ex) scale=1% 일때, 4000달러 이상의 수익이 나는 경우는 이런 복리의 특징 때문에 일어나는 거임(+ 작은 scale 덕분에 손실 가능성 하락)
  • 손실 누적 시 => 기하급수적으로 손실이 됨

2. 비대칭성

  • 투자에서 상승과 하락 확률이 50%로 같을지라도, 그 결과로 누적되는 투자 가치는 비대칭적인 특성을 보임
    ex) 손실 후 회복의 어려움
    가령, 50%의 손실이 발생하면, 투자 가치가 50% 줄어들어
    V×0.5가 됩니다. 이후에 50%의 상승이 발생한다고 해도, 상승률은 원래의 50%가 아니라 50% 증가한 값에 적용되므로 계산은

V×0.5×1.5=V×0.75

가 되어 원래 투자액을 완전히 회복하지 못합니다. 이를 통해 손실 후 회복이 상승보다 어려운 비대칭적 특성이 드러납니다.

곱셈 구조에서의 비대칭 효과

하락 누적 효과
: 하루의 손실은 다음 날의 투자 가치가 줄어든 상태에서 다시 적용되므로, 연속된 손실은 곱셈적으로 투자 가치를 급격히 낮춤

곱셈 구조 속에 발생하는 비대칭성의 예

볼라틸리티 드래그(Volatility Drag):

  • 변동성이 클 때는, 수익률이 플러스와 마이너스 모두 크게 나타나게 됩니다. 그러나 수익률이 큰 폭으로 오르더라도, 같은 비율의 손실 후에는 회복하기가 어렵습니다.
  • 50% 손실 후 50% 상승을 해도 원래 투자액에 도달하지 못하는 것처럼, 큰 변동성이 누적되면 기하 평균(복리 수익률)은 낮아집니다.

투자 결과 분포에서의 비대칭성

  • 극단적 결과 발생 가능성:
    복리 효과와 곱셈 구조로 인해, 초기의 몇 번의 큰 손실이 발생하면 그 후 아무리 좋은 수익률을 내더라도 투자 가치가 거의 0에 가까워지게 됩니다. 반면에, 몇몇 경우에는 여러 번의 작은 상승과 적은 손실이 이어지면서 투자 가치가 극단적으로 커지는 “대박” 케이스가 나타납니다.

  • 평균과 중앙값의 차이:
    대부분의 결과가 낮은 값(예를 들면 0에 가까운 값)으로 모이고, 극소수의 대박 케이스가 평균을 크게 왜곡하는 현상이 나타납니다. 따라서 통계적으로 볼 때 중앙값은 낮지만 평균은 상당히 높은 값을 보이는 경우가 발생합니다.


3. 확률 과정과 무작위성

확률적 과정

  • 시간에 따라 변화하는 변수들이 무작위성을 가지며 진화하는 과정
    ex) 주식 가격 or 환율은 매일 조금씩 변화함 -> 단순한 결정론적 패턴 x -> 여러 요인의 불확실성 때문에 무작위적임

경로 의존성 (Path Dependency)
개념 설명:

  • 경로 의존성이란, 최종 결과가 단순히 개별 사건들의 빈도나 평균이 아니라, 그 사건들이 발생한 순서와 시간에 크게 영향을 받는 현상을 말합니다. 즉, “어떤 순서로 일이 일어났느냐”가 결과에 결정적인 영향을 미칩니다.

투자에서의 영향:
예를 들어, 10년 동안의 투자 수익률이 모두 같더라도, 초기 몇 년간 큰 손실을 보였다면 그 후 아무리 좋은 수익률을 올리더라도 원금을 회복하기 어려울 수 있습니다.

모의실험에서의 경로 의존성:
시뮬레이터에서도 매일의 무작위 결과(확률적 사건)들이 순차적으로 곱해져서 최종 투자 가치가 결정되기 때문에, 각각의 시뮬레이션 경로가 서로 다르게 나타나며, 초기 몇 단계의 결과에 따라 전체 결과가 크게 달라집니다.


4. 분포의 형태와 통계적 특성

극단적 값 (Outliers)

  • 대부분 낮은값 (거의 :0)에 몰리지만, 소수의 경우에는 연속된 높은 수익률로 인해 엄청난 값이 기록될 수 있음
    => 소수의 높은 결과가 평균(mean)을 크게 왜곡하는 극단적인 값(outlier)임

스큐 (Skew) = 비대칭 분포

  • 분포가 완전한 대칭 x => 한쪽으로 치우쳐 있을 때

Q.시행 횟수가 늘어났을 때 무조건 수익이 올라가는지 ?

  • 복리 + 확률 + 분포의 특성이 얽힌 복합적인 현상

Q. “시행 횟수가 많을수록 scale=1%는 평균적으로 좋은 결과를 보장하나?”

✅ 1. 복리 + 저변동성 → 기하급수적 상승 기회
scale=1은 손실 위험이 낮고, 누적 상승 가능성은 있음

매일 +1% ~ +6% 중 선택될 확률이 50%, 그리고 -1% ~ -6%도 50%니까…

계속 "운 좋게 + 방향만 나오는 경우" → 복리라서 폭발적으로 커짐

위의 그래프에서의 예외적인 4000배, 6000배 수익이 나오는 경우

✅ 2. 시행 횟수와 분포의 법칙 (Large Numbers)
시행 횟수가 많아지면, 대부분의 시뮬레이션은 평균값 근처로 몰림 (중심극한정리)

하지만 복리는 특이하게 극소수의 대박 시뮬레이션이 전체 평균을 끌어올림

그래서 중앙값(median)은 낮고, 평균(mean)은 높게 나오는 것이 자주 발생함

✅ 3. 예외적으로 평균이 더 높게 나오는 경우가 있는 이유
ex) 100번 시행했을 때만 운 좋게 대박 시뮬레이션이 여러 번 생김

이건 순전히 난수(seed)에 따라 달라지는 운이지, “100번 시행이 항상 더 유리하다”는 뜻은 아님

<10회 시행>

<100회 시행>

<1000번 시행>

<5000번 시행>


Q.시간을 다르게 한 시뮬레이션은 큰 결과의 차이를 보이는지?

  • 1년, 2년 시뮬레이션은 비교적 좁은 결과 분포와 제한된 복리 누적 효과를 보여주어 큰 극단치는 드러나지 않을 수 있습니다.

  • 반면, 5년, 10년 시뮬레이션은 복리 효과로 인해 작은 일일 변동이 기하급수적으로 누적되어 전체 분포가 훨씬 확산되고, 극단적인 결과(매우 높은 수익 또는 큰 손실)가 나타날 확률이 높아집니다.

  • 단기 (1년, 2년):
    1년이나 2년과 같이 짧은 기간의 경우, 매일의 수익률 변동(1 ± (dice × scale)%)이 누적되지만, 복리 효과에 의한 곱셈이 상대적으로 적게 작용합니다. 이로 인해 최종 투자 가치의 분포는 초기 투자금(예제에서는 100) 주변에서 상대적으로 좁은 범위 내에서 변화할 가능성이 큽니다.

  • 장기 (5년, 10년):
    시간이 길어질수록(예를 들어 5년, 10년) 매일의 작은 변동이 계속해서 복리 효과로 누적됩니다. 이 경우 초기의 미세한 차이가 기하급수적으로 증폭되어, 최종 투자 가치의 분포가 훨씬 넓어지고 극단적인 값(매우 큰 이익 또는 큰 손실)을 보일 확률이 크게 증가합니다.
    - 이론적 근거 : 복리 곱셈 과정은 보통 로그 정규분포를 따름

<365일> = 1년

  • 1년으로 시간을 줄였더니, scale=1일때보다 scale =2일때 오히려 mean - 92.58로 평균은 늘어났음
  • 하지만, median = 77.68로 scale = 1일때 더 큼
  • scale = 5 일때 처음으로 0이 아닌 mean = 41.97이 나옴

<730일> = 2년

  • x의 값(= 수익) 이 1000, 1200, 1600으로 오르는 경우의 수도 간혹 보임
  • 10년일 때보다 2년으로 기간을 줄였을 때 곱셈구조의 복리로 인해 x값의 범위가 만(달러) 단위로 가장 넓은 높은 수치가 나옴

<1825일> = 5년

왜 2년,5년 시뮬레이션에서 30000~35000 정도의 극단적인 결과가 나왔는지?

  1. 곱셈적 복리 효과와 로그정규분포
    복리 효과의 누적:
    매일의 수익률이 곱셈적으로 누적되면서, 일시적인 큰 이익이 반복되어 발생하면 결과적으로 투자 금액이 기하급수적으로 커질 수 있습니다. SCALE=2의 경우, 일일 변동률이 1 ± (dice * 2)%가 되어, 특히 긍정적인 결과가 연속될 경우 복리 곱셈 효과에 의해 투자 가치가 폭발적으로 증가합니다.

로그정규분포 특성:
이와 같이 복리 효과를 받는 구조는 투자 결과가 로그정규분포(lognormal distribution)를 따르게 만듭니다. 로그정규분포는 상대적으로 낮은 확률로 매우 높은 값(오른쪽 꼬리, heavy tail)을 가질 수 있는데, 이 때문에 일부 시뮬레이션에서는 극단치가 나타납니다.

  1. 운 좋은 경로(outlier paths)의 누적 효과
    연속적 긍정 변동:
    단기간에도 우연히 일련의 높은 긍정적인 일일 수익률이 발생하면, 그 효과가 매일의 복리 계산에 의해 급격히 확대됩니다.
    예를 들어, 2년 또는 5년 사이에 이러한 '행운의 경로'가 형성되면, 최종 투자 금액이 30000에서 35000 정도의 극단적인 값에 도달할 수 있습니다.

비대칭 분포:
SCALE=2와 같은 중간 정도의 변동성은 지나치게 불안정한 경우보다 극단치가 나타날 확률을 높이는 경향이 있습니다. 너무 낮은 변동성은 극단치를 내기 어렵고, 너무 높은 변동성은 대부분 손실로 이어질 위험이 있지만, 적절한 수준의 변동성에서는 긍정적 일관성이 있을 경우 매우 높은 수익률이 나타날 확률이 커지게 됩니다.

  1. 이론적 배경 및 결론
    곱셈 구조의 본질:
    매일의 결과가 독립적이며 곱셈적으로 누적되는 경우, 일부 경로는 확률적으로 누적 효과에 의해 예상보다 훨씬 큰 수치를 보일 수 있습니다.
    이는 단순 덧셈과는 다르게, 작은 차이가 시간이 지남에 따라 지수 함수적으로 누적되는 복리 효과의 전형적인 특징입니다.

결론적으로:
2년 및 5년 시뮬레이션에서 SCALE=2의 경우 극단적 결과가 나타난 것은 바로 이러한 복리 효과와 곱셈 구조에 의한 누적 때문입니다.
이론적으로는 비선형 동역학 시스템과 로그정규분포의 특성이 이러한 결과를 설명해주며, 실제 투자 시뮬레이션에서도 종종 나타나는 현상입니다.

0개의 댓글