이번 글에서는 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: 만기시점 주가만
에서 다룬 적이 있습니다. 다시 써 보면 시점 $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()
결과는 다음과 같습니다.
'수학의 재미 > 확률분포' 카테고리의 다른 글
조건부 기댓값과 마팅게일(martingale) #1 (0) | 2022.06.23 |
---|---|
확률공간과 조건부기댓값 (3) | 2022.06.22 |
무엇이 더 정규분포인가? Jarque-Bera Test (0) | 2022.06.17 |
정균분포 난수를 만들어 주세요 #6 : random.normal (0) | 2022.06.17 |
정균분포 난수를 만들어 주세요 #5 : Marsaglia-Bray method (0) | 2022.06.15 |
댓글