11.7 확률과정 기초

실습 · 연습문제 2개

Euler–Maruyama로 OU 과정 시뮬레이션하기 euler-maruyama-ou

Ornstein–Uhlenbeck(OU) 과정은 평균 μ\mu로 되돌아가는 힘과 잡음을 함께 받는 확률과정이다.

dXt=θ(μ−Xt) dt+σ dWtdX_t = \theta(\mu - X_t)\,dt + \sigma\,dW_t

Euler–Maruyama 방법은 시간 간격 Δt\Delta t마다

Xk+1=Xk+θ(μ−Xk) Δt+σΔt  ξk,ξk∼N(0,1)X_{k+1} = X_k + \theta(\mu - X_k)\,\Delta t + \sigma\sqrt{\Delta t}\;\xi_k, \qquad \xi_k \sim \mathcal{N}(0, 1)

로 갱신한다. 함수 simulate_ou(x0, theta, mu, sigma, dt, n_steps, n_paths, rng)를 완성해 shape (n_steps + 1, n_paths)인 배열을 반환한다. 0번째 행은 모든 경로에서 x0이고, k번째 행은 시각 k Δtk\,\Delta t의 값이다. 난수는 인자로 받은 rng만 쓴다.

테스트는 다음을 확인한다.

  • shape과 초기값
  • 잡음이 없으면(σ=0\sigma = 0) 결정론적 갱신 Xk=μ+(x0−μ)(1−θΔt)kX_k = \mu + (x_0 - \mu)(1 - \theta\Delta t)^k
  • 한 step 뒤의 분산이 σ2Δt\sigma^2 \Delta t (잡음의 크기가 Δt\Delta t가 아니라 Δt\sqrt{\Delta t}에 비례한다)
  • 평균이 μ+(x0−μ)e−θt\mu + (x_0 - \mu)e^{-\theta t}에 가깝고, 오래 지나면 분산이 정상 분산에 가까운지

힌트: 경로 방향으로는 벡터화하고, 시간 방향으로는 반복문을 쓴다.

전이행렬의 정상분포 구하기 stationary-distribution

상태가 KK개인 Markov chain의 전이행렬 P\mathbf{P}는 Pij=Pr⁡(Xt+1=j∣Xt=i)P_{ij} = \Pr(X_{t+1} = j \mid X_t = i)이고, 각 행의 합이 1이다. 정상분포 π\boldsymbol{\pi}는 행벡터로서

πP=π,∑iπi=1,πi≥0\boldsymbol{\pi}\mathbf{P} = \boldsymbol{\pi}, \qquad \sum_i \pi_i = 1, \qquad \pi_i \ge 0

을 만족한다. 함수 stationary_distribution(P)를 완성해 shape (K,)인 π\boldsymbol{\pi}를 반환한다. 체인은 기약(irreducible)이라고 가정해도 된다. 즉 정상분포는 하나뿐이다.

테스트는 두 상태 체인의 공식 π=(b,a)/(a+b)\boldsymbol{\pi} = \big(b, a\big)/(a + b)(여기서 a=P12a = P_{12}, b=P21b = P_{21}), 각 열의 합도 1인 이중 확률행렬(정상분포가 균등), 그리고 무작위 전이행렬에서 πP=π\boldsymbol{\pi}\mathbf{P} = \boldsymbol{\pi}를 확인한다.

힌트: πP=π\boldsymbol{\pi}\mathbf{P} = \boldsymbol{\pi}를 전치하면 P⊤π⊤=π⊤\mathbf{P}^\top \boldsymbol{\pi}^\top = \boldsymbol{\pi}^\top, 즉 P⊤\mathbf{P}^\top의 고윳값 1에 대한 고유벡터다. P\mathbf{P}의 고유벡터를 쓰면 모든 성분이 같은 벡터가 나온다(왜 그런지 생각해 본다). 고유벡터 대신 (P⊤−I)π⊤=0(\mathbf{P}^\top - \mathbf{I})\boldsymbol{\pi}^\top = \mathbf{0}에 ∑iπi=1\sum_i \pi_i = 1을 한 줄 더 붙여 최소제곱으로 풀어도 된다.