작성자: admin 작성일시: 2016-08-11 17:31:09 조회수: 166 다운로드: 23
카테고리: 금융 공학 태그목록:

확률 과정 시뮬레이션

몬테카를로 시뮬레이션(Monte Carlo simulation) 등의 분석을 위해서는 확률 과정이 가질 수 있는 경로의 샘플을 찾아내는 확률 과정 시뮬레이션(stochastic process simulation)이 필요하다.

이산화

확률 과정 시뮬레이션을 위해서는 연속 시간(continuous time)으로 정의된 확률 미분 방정식을 이산 시간(discrete time)에서 정의된 확률 차분 방정식(stochastic difference equation)으로 변환해야 한다. 이러한 변환을 이산화(discretization)이라고 한다.

오일러 이산화

오일러 이산화(Euler discretization)는 다음과 같이 미세 시간 구간 $dt$내에서 Ito 적분의 대상 값이 크게 바뀌지 않는다는 가정하에 이산화하는 방법이다.

$$ \int_{t}^{t+\Delta t} f(u,S(u))\;du \approx f(t,S(t)) \int_{t}^{t+\Delta t}dt = f(t,S(t)) \Delta t $$

$$ dx = f(t,S(t))\;dt \;\;\;\rightarrow \;\;\; \Delta x = f(t,S(t)) \Delta t $$

Ito 적분항의 경우에는 브라운 운동의 정의에 의해 다음과 같이 이산화 할 수 있다.

$$ \int_{t}^{t+\Delta t} f(u,S(u))\;du \approx f(t,S(t)) \sqrt{\Delta t} \; Z $$

여기에서 $Z$는 표준 정규 분포인 확률 변수이다.

기하 브라운 운동 모형의 오일러 이산화

기하 브라운 운동(geometric Brownian motion) 모형의 경우에는 다음과 같이 주가의 로그 변환 값을 사용하는 것이 더 정확하다.

$\log S(t)$도 Ito 과정이므로 Ito 과정에 대한 Ito-Doeblin 공식에 의하면 $\log S(t)$의 미분은 다음과 같다.

$$ dS(t) = \alpha(t) S(t)\;dt + \sigma(t) S(t)\; dW(t) $$
$$ \dfrac{\partial}{\partial t} \log S(t) = 0 $$$$ \dfrac{\partial}{\partial x} \log S(t) = \dfrac{1}{S(t)} $$$$ \dfrac{\partial^2}{\partial x^2} \log S(t) = -\dfrac{1}{S^2(t)} $$$$ \begin{eqnarray} df(t,S(t)) = d\log S(t) &=& \Big( \dfrac{\partial}{\partial t}f(t, X(t)) + \dfrac{\partial}{\partial x} f(t, X(t))\alpha(t) S(t) + \dfrac{1}{2}\dfrac{\partial^2}{\partial x^2} f(t, X(t)) \sigma^2(t) S^2(t) \Big) \;dt + \dfrac{\partial}{\partial x} f(t, X(t))\sigma(t) S(t) \;dW(t) \\ &=& \Big( 0 + \dfrac{1}{S(t)} \alpha(t) S(t) - \dfrac{1}{2} \dfrac{1}{S^2(t)}\sigma^2(t) S^2(t) \Big) \;dt + \dfrac{1}{S(t)} \sigma(t) S(t) \;dW(t) \\ &=& \Big( \alpha(t) - \dfrac{1}{2} \sigma^2(t) \Big) \;dt + \sigma(t)\;dW(t) \end{eqnarray} $$

이를 오일러 이산화 하면 다음과 같다.

$$ \dfrac{S(t+\Delta t)}{S(t)} \approx \exp \left\{ \left( \alpha(t) - \dfrac{1}{2} \sigma^2(t) \right) \Delta t + \sigma(t) \sqrt{\Delta t} \; Z \right\} $$$$ S(t+\Delta t) \approx S(t) \exp \left\{ \left( \alpha(t) - \dfrac{1}{2} \sigma^2(t) \right) \Delta t + \sigma(t) \sqrt{\Delta t} \; Z \right\} $$
In [8]:
S0 = 100  # initial value
r = 0.05  # constant short rate
sigma = 0.25  # constant volatility
T = 2.0  # in years
I = 10000  # number of random draws
In [9]:
I = 10000
M = 50
dt = T / M
S = np.zeros((M + 1, I))
S[0] = S0
for t in range(1, M + 1):
    S[t] = S[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt 
            + sigma * np.sqrt(dt) * np.random.standard_normal(I))
In [10]:
plt.hist(S[-1], bins=50)
plt.xlabel('index level')
plt.ylabel('frequency')
plt.grid(True)
plt.show()
In [11]:
plt.plot(S[:, :10], lw=1.5)
plt.xlabel('time')
plt.ylabel('index level')
plt.grid(True)
plt.show()

이산화 방식에는 오일러 이산화 이외에도 더 정확성을 높인 Milstein 이산화나 정확한(exact) 이산화 방식도 존재한다.

분산 감소

몬테카를로 시뮬레이션 등을 위해 확률 과정의 경로 시뮬레이션을 하는 경우 시뮬레이션으로 만들어진 경로 샘플의 수가 적으면 원래의 확률 과정의 특성을 묘사하지 못하는 경우가 발생한다. 특히 기댓값, 분산 등의 모멘트(moment) 값이 원래 모형과 달라지면 몬테카를로 시뮬레이션의 정확도가 떨어지므노 여러가지 방법으로 모멘트를 보정하거나 시드(seed)값을 고정하여 안정성을 증가시키는 분산 감소 테크닉(variance reduction technique)을 사용하게 된다.

모멘트 보정

표준 정규 분포를 따르는 확률 변수를 생성할 때 일반적인 표본 생성법을 사용하여 기댓값과 표준 편차가 0, 1에 가까운 값이 나오기 위해서는 많은 수의 표본의 필요하다.

In [20]:
np.random.seed(0)
x = np.random.standard_normal(10000)
sp.stats.describe(x)
Out[20]:
DescribeResult(nobs=10000, minmax=(-3.7401006379517789, 3.8016602149671153), mean=-0.018433720158265818, variance=0.97536551189898701, skewness=0.026634616738395577, kurtosis=-0.03095451095565238)

만약 생성된 표본의 부호를 바꾼 새로운 표본을 추가하고 실제 샘플 표준 편차값으로 스케일링(scaling)을 하면 보다 표준 정규 분포에 가까운 분포가 생성된다.

In [25]:
np.random.seed(0)
x = np.random.standard_normal(10000//2)
x = np.concatenate((x, -x))
x /= x.std()
sp.stats.describe(x)
Out[25]:
DescribeResult(nobs=10000, minmax=(-3.8578033853589475, 3.8578033853589475), mean=2.8421709430404009e-18, variance=1.000100010001, skewness=0.0, kurtosis=-0.05829332806060883)

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!