본문 바로가기
금융공학

GBM 모델로 생성된 주가의 누적분포함수, 확률밀도함수

by hustler78 2023. 8. 8.
728x90
반응형

 

 

이번 글에서는 시점 $t$에서 주식의 가격이 $S_t$인 상황에서 $S_t$가 GBM(Geometric Brownian Motion)을 따를 때, 특정 만기 시점 $T$에 생성된 

$$S_T$$

의 누적분포함수(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

에서 다룬바 있습니다. 수식으로 쓰면


$$ dS_t/S_t= (r-q) dt +\sigma dW_t$$

 

입니다. 여기서 $r$는 무위험 이자율, $q$는 연속배당률,  $\sigma$는 변동성(volatility), 그리고 $W_t$는 위너프로세스입니다(위너프로세스에 대한 설명은 여기를 참고해 보세요.)

 

이 식을 (Ito lemma 등을 통해) 풀어써보면

$$ S_T = S_0 \exp \left( (r-q-\frac12\sigma^2)T +\sigma W_T  \right) $$

라 쓸 수 있습니다. 즉, 
$$ \ln(S_T/S_0) = (r-q-\frac12\sigma^2)T +\sigma W_T $$이고

$$W_T \sim \mathcal{N}(0,\sqrt{T}^2)$$ 이므로

 

$ \ln(S_T/S_0)$ 는 평균이 $(r-q-\frac12\sigma^2)T$ 이고 표준편차가 $\sigma\sqrt{T}$인 정규분포

임을 알 수 있습니다.  따라서 Z-score 정규화(이글 참고)를 해보면 

$$ z= \frac{\ln(S_T/S_0) -(r-q-\frac12\sigma^2)T } {\sigma \sqrt{T}}\tag{1}$$
는 표준정규분포임을 알 수 있습니다.

 

 

$S_T$의 누적분포함수(cdf)와 확률밀도함수(pdf)


이제 식(1)을 이용하여 미래 특정시점 $T$에서의 주가 예상치 $S_T$의 cdf와 pdf를 구해보겠습니다.

 

1. 누적분포함수


$S_T$의 cdf를 $F(x)$라고 하면,

$$
\begin{align}
 F(x) & = \mathbb{P}(S_T \leq x) \\
      & = \mathbb{P} \left( \frac{\ln(S_T/S_0)-(r-q-\frac12\sigma^2)T}{\sigma\sqrt{T}} \leq \frac{\ln(x/S_0)-(r-q-\frac12\sigma^2)T}{\sigma\sqrt{T}} \right) \\
       & = \mathbb{P} \left( z \leq \frac{\ln(x/S_0)-(r-q-\frac12\sigma^2)T}{\sigma\sqrt{T}} \right) \\
      & = \Phi \left( d(x)  \right)
\end{align}
$$
입니다. 그런데 $S_T$는 항상 양수이므로(why?)   $x\leq 0$ 일 때는 의미가 없습니다.  즉, $x>0$입니다.
위 식에서  $\Phi(\cdot)$이고
$$ d(x) = \frac{\ln(x/S_0)-(r-q-\frac12\sigma^2)T}{\sigma\sqrt{T}} $$
입니다. 

 

2. 확률밀도함수

 

$S_T$의 확률밀도함수를 구해보겠습니다. 확률밀도함수를 $g(x)$라 하면
$$g(x) \frac{dF(x)}{dx} = d'(x) \phi(d(x)) = \frac{1}{x\sigma\sqrt{T}} \phi(d(x)) ~~,~~ x>0$$
입니다.

 

 

그럼 간단하게 Python code를 통하여  $S_T$의 cdf와 pdf의 모양새를 알아보겠습니다.

 

 


Python Code : $S_T$의 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 그래프는 $S_0 = 100$ 근처에서 가장 높은 밀도를 가지는 함수로 그려집니다. 엄밀히 말해서,

 

 

$S_T$는 로그노말(log normal) 분포를 따릅니다.

 

$\log(S_T)$가 정규분포의 일종이라는 얘기죠. 이와 관련해서는 예전 글  Log Normal Distribution

 

Log Normal Distribution

이번 글에서는 log normal distribution에 대해서 이야기해보겠습니다. 어떤 연속 확률변수 $X$가 lognormal을 따른다는 것은 기호로 $$ X \sim \mathcal{LN}(\mu,\sigma^2) $$ 라 쓰고, 정의는 아래와 같습니다. $X\sim

sine-qua-none.tistory.com

에서 다룬 바 있으니 비교해서 보시면 좋을 것 같습니다.

 

 

 

뜬금없이, 왜 GBM 모델로 생성된 $S_T$의 분포를 다루느냐 하면

 

$S_T$의 확률밀도를 이용하여 파생상품의 델타, 감마, 베가 등의 민감도를 구할 수 있기 때문입니다. 이는 다음 글에서 설명해 보도록 하겠습니다.

 

728x90
반응형

댓글