이번 글에서는 시점 t에서 주식의 가격이 St인 상황에서 St가 GBM(Geometric Brownian Motion)을 따를 때, 특정 만기 시점 T에 생성된
ST
의 누적분포함수(cumulative distribution function) 과 확률밀도함수(probability density function)를 구해보겠습니다.
GBM 복습
GBM은 예전글 GBM 은 어떤 모델일까?
GBM 은 어떤 모델일까?
이번 글은 2022.06.19 - [금융공학] - GBM 주가패스 만들기 #2: EveryDay 주가까지! GBM 주가패스 만들기 #2: EveryDay 주가까지! 이 글은 2022.06.19 - [금융공학] - GBM 주가패스 만들기 #1: 만기시점 주가만 GBM 주
sine-qua-none.tistory.com
에서 다룬바 있습니다. 수식으로 쓰면
dSt/St=(r−q)dt+σdWt
입니다. 여기서 r는 무위험 이자율, q는 연속배당률, σ는 변동성(volatility), 그리고 Wt는 위너프로세스입니다(위너프로세스에 대한 설명은 여기를 참고해 보세요.)
이 식을 (Ito lemma 등을 통해) 풀어써보면
ST=S0exp((r−q−12σ2)T+σWT)
라 쓸 수 있습니다. 즉,
ln(ST/S0)=(r−q−12σ2)T+σWT이고
WT∼N(0,√T2) 이므로
ln(ST/S0) 는 평균이 (r−q−12σ2)T 이고 표준편차가 σ√T인 정규분포
임을 알 수 있습니다. 따라서 Z-score 정규화(이글 참고)를 해보면
z=ln(ST/S0)−(r−q−12σ2)Tσ√T
는 표준정규분포임을 알 수 있습니다.
ST의 누적분포함수(cdf)와 확률밀도함수(pdf)
이제 식(1)을 이용하여 미래 특정시점 T에서의 주가 예상치 ST의 cdf와 pdf를 구해보겠습니다.
1. 누적분포함수
ST의 cdf를 F(x)라고 하면,
F(x)=P(ST≤x)=P(ln(ST/S0)−(r−q−12σ2)Tσ√T≤ln(x/S0)−(r−q−12σ2)Tσ√T)=P(z≤ln(x/S0)−(r−q−12σ2)Tσ√T)=Φ(d(x))
입니다. 그런데 ST는 항상 양수이므로(why?) x≤0 일 때는 의미가 없습니다. 즉, x>0입니다.
위 식에서 Φ(⋅)이고
d(x)=ln(x/S0)−(r−q−12σ2)Tσ√T
입니다.
2. 확률밀도함수
ST의 확률밀도함수를 구해보겠습니다. 확률밀도함수를 g(x)라 하면
g(x)dF(x)dx=d′(x)ϕ(d(x))=1xσ√Tϕ(d(x)) , x>0
입니다.
그럼 간단하게 Python code를 통하여 ST의 cdf와 pdf의 모양새를 알아보겠습니다.
Python Code : ST의 cdf, pdf
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import pandas as pd
def cdf_pdf_of_smat(x, s0, rfr, div, vol, maturity):
Ncdf = norm.cdf # standard normal distribution의 cdf
npdf = norm.pdf # pdf
drift = (rfr - div - 0.5 * vol ** 2) * maturity
diffusion = vol * np.sqrt(maturity)
# S_T = S0 exp( drift + diffusion *z ), z ~ N(0,1)
if x > 0: # 위의 수식 F(x) 와 g(x)
dx = (np.log(x / s0) - drift) / diffusion
cdf_value = Ncdf(dx)
pdf_value = 1 / (x * vol * np.sqrt(maturity)) * npdf(dx)
else:
cdf_value = 0
pdf_value = 0
return cdf_value, pdf_value
def test_of_pdf_cdf_Smaturity():
s0 = 100
rfr = 0.02
div = 0.01
vol = 0.2
maturity = 1
x_vec = np.arange(1, 300, 1) # 1~300 까지 각 x 에 대해
pdf_vec, cdf_vec = [], []
for x in x_vec:
tempvalue = cdf_pdf_of_smat(x, s0, rfr, div, vol, maturity) # 특정 x값에서의 cdf, pdf
cdf_vec.append(tempvalue[0]) # cdf list
pdf_vec.append(tempvalue[1]) # pdf list
from matplotlib import gridspec # gridspec을 사용하여 plot 구성
fig = plt.figure(figsize=(20, 20))
gs = gridspec.GridSpec(nrows=1, ncols=2, width_ratios=[1, 1])
ax = [fig.add_subplot(gs[0]), fig.add_subplot(gs[1])]
ax[0].plot(x_vec, cdf_vec, label='cdf of S_T') # cdf graph
ax[1].plot(x_vec, pdf_vec, label='pdf od S_T') # pdf graph
ax[0].set_title('ST cdf')
ax[1].set_title('ST pdf')
ax[0].legend()
ax[1].legend()
plt.show()
if __name__ == '__main__':
test_of_pdf_cdf_Smaturity()
그래프 결과는 아래와 같습니다.

cdf는 여느 다른 확률분포의 cdf와 마찬가지로 0 값에서 출발하여 1 값에 도착하는 증가수열처럼 그려집니다.
pdf 그래프는 S0=100 근처에서 가장 높은 밀도를 가지는 함수로 그려집니다. 엄밀히 말해서,
ST는 로그노말(log normal) 분포를 따릅니다.
log(ST)가 정규분포의 일종이라는 얘기죠. 이와 관련해서는 예전 글 Log Normal Distribution
Log Normal Distribution
이번 글에서는 log normal distribution에 대해서 이야기해보겠습니다. 어떤 연속 확률변수 X가 lognormal을 따른다는 것은 기호로 X∼LN(μ,σ2) 라 쓰고, 정의는 아래와 같습니다. $X\sim
sine-qua-none.tistory.com
에서 다룬 바 있으니 비교해서 보시면 좋을 것 같습니다.
뜬금없이, 왜 GBM 모델로 생성된 ST의 분포를 다루느냐 하면
ST의 확률밀도를 이용하여 파생상품의 델타, 감마, 베가 등의 민감도를 구할 수 있기 때문입니다. 이는 다음 글에서 설명해 보도록 하겠습니다.
'금융공학' 카테고리의 다른 글
미래주가의 분포를 활용하여 콜옵션 델타 구하기 (0) | 2023.08.21 |
---|---|
GBM모델로 생성된 미래 주가는 어떻게 분포할까? 변동성이 커지면 분포는? (0) | 2023.08.11 |
MC로 콜옵션 델타 구하기: likelihood 방법 (0) | 2023.07.14 |
몬테카를로 시뮬레이션과 그릭의 안정성 #2 : 시드 고정 (0) | 2023.07.12 |
몬테카를로 시뮬레이션과 그릭의 안정성 #1 (0) | 2023.07.07 |
댓글