본문 바로가기
수학의 재미/확률분포

Log Normal Distribution

by hustler78 2022. 6. 20.
728x90
반응형

이번 글에서는 log normal distribution에 대해서 이야기해보겠습니다.

어떤 연속 확률변수 $X$가 lognormal을 따른다는 것은 기호로 

$$ X \sim \mathcal{LN}(\mu,\sigma^2) $$

라 쓰고, 정의는 아래와 같습니다.

$X\sim \mathcal{LN}(\mu,\sigma)^2$ 의 정의

$$ \ln(X) \sim \mathcal{N}(\mu,\sigma^2)$$

즉, 자연로그 $\ln(\cdot)$를 취한 것이 정규분포를 따를 때를 말합니다.

 

그러면 log normal 분포를 따르는 $X$의 cdf, pdf와 평균, 분산을 각각 구해보도록 하죠.

 


1. log normal 분포의 cdf(cumulative distribution function) 

$X\sim \mathcal{LN}(\mu,\sigma^2)$의 cdf를 $F$ 라 하면,

 

$$
\begin{align}
F(x) = \mathbb{P}(X\leq x) &= \mathbb{P}(\ln(X)\leq \ln x) \\
& = \Phi_{\mu,\sigma^2} (\ln x)
\end{align}
$$

입니다. 여기서 $\Phi_{\mu,\sigma^2}$는 $\mathcal{N}(\mu,\sigma^2)$ 의 cdf 입니다.

 

2. log normal 분포의 pdf(probability density function) 

$X$의 pdf를 $f$라 하면,

$$f(x) = F'(x) = \frac{1}{x} \phi_{\mu,\sigma^2}(\ln x) $$

입니다. 여기서 $\phi_{\mu,\sigma^2}$는 $\mathcal{N}(\mu,\sigma^2)$ 의 pdf 입니다.

 

이제 평균과 분산을 구하기 위해서 아래의 값을 계산해 보도록 합시다. 실수 $k$에 대해서,

 

$$
\begin{align}
e^{kt}\cdot \phi_{\mu,\sigma^2}(t) & = \frac1{\sqrt{2\pi}\sigma} \exp \left( -\frac{(t-\mu)^2}{2\sigma^2}+kt \right) \\
& = \frac1{\sqrt{2\pi}\sigma} \exp \left( -\frac{(t-\mu)^2-2k\sigma^2t}{2\sigma^2} \right)\\
& = \frac1{\sqrt{2\pi}\sigma} \exp \left( -\frac{t^2-2(\mu+k\sigma^2)t+\mu^2}{2\sigma^2} \right)\\
& = \frac1{\sqrt{2\pi}\sigma} \exp \left( -\frac{ (t-(\mu+k\sigma^2))^2 -(\mu+k\sigma^2)^2+\mu^2}{2\sigma^2} \right)\\
& = \frac1{\sqrt{2\pi}\sigma} \exp \left( -\frac{ (t-(\mu+k\sigma^2))^2 }{2\sigma^2} +\mu k +\frac12\sigma^2k^2 \right)\\
&=e^{\mu k +\frac12\sigma^2k^2}\cdot \phi_{\mu+k\sigma^2,\sigma^2}(t)\tag{1}
\end{align}
$$

가 성립합니다.

 

3. log normal 분포의 기댓값 

$$
\begin{align}
\mathbb{E}(X) &= \int_0^\infty x f(x) dx \\
       & = \int_0^\infty x \frac1x\phi_{\mu,\sigma^2}(\ln x) dx \\
                   & = \int_0^\infty \phi_{\mu,\sigma^2}(\ln x) dx \\ 
       & = \int_{-\infty}^\infty \phi_{\mu,\sigma^2}(t) e^t dt~~(\ln x= t) \\
                   & = e^{\mu+\frac12\sigma^2} \int_{-\infty}^\infty \phi_{\mu+\sigma^2,\sigma^2}(t)~~(k=1 {\rm{~in~ (1)}}) \\
       & = e^{\mu+\frac12\sigma^2} \tag{2}
\end{align}
$$

마지막 등호는 어쨌든 어떤 정규분포 pdf를 실수 전체에서 적분한 값이므로 적분 값이 1이 됩니다.

 

4. log normal 분포의 분산 

먼저 $\mathbb{E}(X^2)$의 값을 구합니다.

$$
\begin{align}
\mathbb{E}(X^2) &= \int_0^\infty x^2 f(x) dx \\
       & = \int_0^\infty x^2 \frac1x\phi_{\mu,\sigma^2}(\ln x) dx \\
                   & = \int_0^\infty x\phi_{\mu,\sigma^2}(\ln x) dx \\ 
       & = \int_{-\infty}^\infty \phi_{\mu,\sigma^2}(t) e^{2t} dt~~(\ln x= t) \\
                   & = e^{2\mu+2\sigma^2} \int_{-\infty}^\infty \phi_{\mu+2\sigma^2,\sigma^2}(t)~~(k=2 {\rm{~in~ (1)}}) \\
       & = e^{2\mu+2\sigma^2} \tag{3}
\end{align}
$$

따라서 분산은

$$\mathbb{V}(X) = \mathbb{E}(X^2) -(\mathbb{E}(X))^2 = e^{2\mu+2\sigma^2} -e^{2\mu+\sigma^2} = e^{2\mu+\sigma^2}(e^{\sigma^2}-1) $$

입니다.

 


예제. Geometric Brownian Motion

log normal 분포를 따르는 가장 유명한 모델 중 하나가 바로 Geometric Browinian Motion(GBM)입니다. GBM에 대해서는

2022.06.19 - [금융공학] - GBM 주가패스 만들기 #1: 만기시점 주가만

 

GBM 주가패스 만들기 #1: 만기시점 주가만

이 글은 2022.06.07 - [금융공학] - 주식의 수학적 모델 #3 : GBM모델 주식의 수학적 모델 #3 : GBM모델 이 글은 2022.05.27 - [금융공학] - 주식의 수학적 모델 #1 주식의 수학적 모델 #1 이 글은 2022.05.25 - [..

sine-qua-none.tistory.com

에서 다룬 적이 있습니다. 다시 써 보면 시점 $t$에서의 주식의 가격 $S_t$는

$$ \frac{dS_t}{S_t} = \mu dt + \sigma dW_t,$$

더 풀어쓰면, 만기시점 $T$의 예상 주가는

$$ S_T = S_0 \exp\left( \left(\mu-\frac12\sigma^2\right)T+\sigma W_T \right) \tag{4}$$

입니다. 그럼 $S_T$의 기댓값을 구해볼까요? 식(4)의 $\exp(\cdot)$안이 정규분포입니다. 따라서 $S_T$에 $\ln(\cdot)$를 취하면 정규분포입니다. 구체적으로 말해서,

 

$$\ln(S_T) = \ln(S_0)+\left(\mu-\frac12\sigma^2\right)T+\sigma W_T ~,~ W_T \sim \mathcal{N}(0,\sqrt{T})$$

입니다. 즉!

$$\ln(S_T) \sim \mathcal{N} \left( \left(\mu-\frac12\sigma^2\right)T, (\sigma\sqrt{T})^2 \right) $$

이죠. 따라서 공식(2)에 의하여,

 

$$\mathbb{E}(S_T) = \exp \left( \left(\mu-\frac12\sigma^2\right)T+\frac12 \sigma^2 T  \right) = e^{\mu T} $$

가 됩니다. 

$S_t$의  drift term의 연간수익률을 $\mu$라 두었더니, $S_T$의 기댓값 또한 $\mu$만큼 할증한 양이 나오네요.

 


python에서도 lognormal 난수를 제공하고 있습니다. 물론 lognormal의 pdf, cdf 등도 제공을 하고 있죠.

random.lognormal(mean=0.0, sigma=1.0, size=None)

Parameters
mean : float or array_like of floats, optional
sigma: float or array_like of floats, optional
size: int or tuple of ints, optional

Returns out: ndarray or scalar

입니다. mean과 sigma가 생략되면 각각 0, 1 즉 표준 정규분포로 지정됩니다.

 

 

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy.stats import lognorm

def lognormal_distribution():
    nSize = 10000
    mu =0
    sigma = 1/2
    rand = np.random.lognormal(mean=mu, sigma=sigma, size=nSize)
    count, bins, ignored = plt.hist(rand, bins=50, density=True, label='histogram of lognormal')
    plt.plot(bins, lognorm.pdf(bins, s=sigma), label ='pdf of lognormal')
    plt.legend()
    plt.show()

if __name__ == '__main__':
    lognormal_distribution()

결과는 다음과 같습니다.

 

log normal 분포

728x90
반응형

댓글