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 => 몰려 있는 구간의 평균(중앙값임) / 전체의 평균보다 더 정확한 실제 평균값을 구할 수 있음


=> 곱셈구조는 양의 수 < 음의 수에 더 민감
ex) 첫째 날에 +10% , 둘째날 -10%
첫째 날 1 + 0.1 = 1.1
둘째 날 1 - 0.1 = 0.9
1.1 * 0.9 = 0.99 초기의 1보다 작아짐(음의 수에 더 민감)
=> 복리는 기하급수적으로 영향을 미칠가능성이 높음
V×0.5×1.5=V×0.75
가 되어 원래 투자액을 완전히 회복하지 못합니다. 이를 통해 손실 후 회복이 상승보다 어려운 비대칭적 특성이 드러납니다.
하락 누적 효과
: 하루의 손실은 다음 날의 투자 가치가 줄어든 상태에서 다시 적용되므로, 연속된 손실은 곱셈적으로 투자 가치를 급격히 낮춤
볼라틸리티 드래그(Volatility Drag):
극단적 결과 발생 가능성:
복리 효과와 곱셈 구조로 인해, 초기의 몇 번의 큰 손실이 발생하면 그 후 아무리 좋은 수익률을 내더라도 투자 가치가 거의 0에 가까워지게 됩니다. 반면에, 몇몇 경우에는 여러 번의 작은 상승과 적은 손실이 이어지면서 투자 가치가 극단적으로 커지는 “대박” 케이스가 나타납니다.
평균과 중앙값의 차이:
대부분의 결과가 낮은 값(예를 들면 0에 가까운 값)으로 모이고, 극소수의 대박 케이스가 평균을 크게 왜곡하는 현상이 나타납니다. 따라서 통계적으로 볼 때 중앙값은 낮지만 평균은 상당히 높은 값을 보이는 경우가 발생합니다.
확률적 과정

경로 의존성 (Path Dependency)
개념 설명:
투자에서의 영향:
예를 들어, 10년 동안의 투자 수익률이 모두 같더라도, 초기 몇 년간 큰 손실을 보였다면 그 후 아무리 좋은 수익률을 올리더라도 원금을 회복하기 어려울 수 있습니다.
모의실험에서의 경로 의존성:
시뮬레이터에서도 매일의 무작위 결과(확률적 사건)들이 순차적으로 곱해져서 최종 투자 가치가 결정되기 때문에, 각각의 시뮬레이션 경로가 서로 다르게 나타나며, 초기 몇 단계의 결과에 따라 전체 결과가 크게 달라집니다.
극단적 값 (Outliers)
스큐 (Skew) = 비대칭 분포
✅ 1. 복리 + 저변동성 → 기하급수적 상승 기회
scale=1은 손실 위험이 낮고, 누적 상승 가능성은 있음
매일 +1% ~ +6% 중 선택될 확률이 50%, 그리고 -1% ~ -6%도 50%니까…
계속 "운 좋게 + 방향만 나오는 경우" → 복리라서 폭발적으로 커짐
위의 그래프에서의 예외적인 4000배, 6000배 수익이 나오는 경우
✅ 2. 시행 횟수와 분포의 법칙 (Large Numbers)
시행 횟수가 많아지면, 대부분의 시뮬레이션은 평균값 근처로 몰림 (중심극한정리)
하지만 복리는 특이하게 극소수의 대박 시뮬레이션이 전체 평균을 끌어올림
그래서 중앙값(median)은 낮고, 평균(mean)은 높게 나오는 것이 자주 발생함
✅ 3. 예외적으로 평균이 더 높게 나오는 경우가 있는 이유
ex) 100번 시행했을 때만 운 좋게 대박 시뮬레이션이 여러 번 생김
이건 순전히 난수(seed)에 따라 달라지는 운이지, “100번 시행이 항상 더 유리하다”는 뜻은 아님




1년, 2년 시뮬레이션은 비교적 좁은 결과 분포와 제한된 복리 누적 효과를 보여주어 큰 극단치는 드러나지 않을 수 있습니다.
반면, 5년, 10년 시뮬레이션은 복리 효과로 인해 작은 일일 변동이 기하급수적으로 누적되어 전체 분포가 훨씬 확산되고, 극단적인 결과(매우 높은 수익 또는 큰 손실)가 나타날 확률이 높아집니다.
단기 (1년, 2년):
1년이나 2년과 같이 짧은 기간의 경우, 매일의 수익률 변동(1 ± (dice × scale)%)이 누적되지만, 복리 효과에 의한 곱셈이 상대적으로 적게 작용합니다. 이로 인해 최종 투자 가치의 분포는 초기 투자금(예제에서는 100) 주변에서 상대적으로 좁은 범위 내에서 변화할 가능성이 큽니다.
장기 (5년, 10년):
시간이 길어질수록(예를 들어 5년, 10년) 매일의 작은 변동이 계속해서 복리 효과로 누적됩니다. 이 경우 초기의 미세한 차이가 기하급수적으로 증폭되어, 최종 투자 가치의 분포가 훨씬 넓어지고 극단적인 값(매우 큰 이익 또는 큰 손실)을 보일 확률이 크게 증가합니다.
- 이론적 근거 : 복리 곱셈 과정은 보통 로그 정규분포를 따름



로그정규분포 특성:
이와 같이 복리 효과를 받는 구조는 투자 결과가 로그정규분포(lognormal distribution)를 따르게 만듭니다. 로그정규분포는 상대적으로 낮은 확률로 매우 높은 값(오른쪽 꼬리, heavy tail)을 가질 수 있는데, 이 때문에 일부 시뮬레이션에서는 극단치가 나타납니다.
비대칭 분포:
SCALE=2와 같은 중간 정도의 변동성은 지나치게 불안정한 경우보다 극단치가 나타날 확률을 높이는 경향이 있습니다. 너무 낮은 변동성은 극단치를 내기 어렵고, 너무 높은 변동성은 대부분 손실로 이어질 위험이 있지만, 적절한 수준의 변동성에서는 긍정적 일관성이 있을 경우 매우 높은 수익률이 나타날 확률이 커지게 됩니다.
결론적으로:
2년 및 5년 시뮬레이션에서 SCALE=2의 경우 극단적 결과가 나타난 것은 바로 이러한 복리 효과와 곱셈 구조에 의한 누적 때문입니다.
이론적으로는 비선형 동역학 시스템과 로그정규분포의 특성이 이러한 결과를 설명해주며, 실제 투자 시뮬레이션에서도 종종 나타나는 현상입니다.