avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

만든 날짜: 2024-10-22 10:14:59, 업데이트 날짜: 2024-10-24 13:40:41
comments   0
hits   1334

이 글에서는 Ornstein-Uhlenbeck 과정을 개괄하고, 그 수학적 공식을 설명하고, Python을 사용하여 구현하고 모의하며, 양적 금융과 시스템 거래의 실제 응용에 대해 논의할 것입니다. 우리는 더 고급의 무작위 프로세스 모델을 사용하게 될 것입니다. Ornstein-Uhlenbeck (OU) 프로세스라고 불리는 이 모델은 평형값 회귀 행동을 나타내는 회귀 시간 순서를 모델링하는데 사용할 수 있습니다.

오른슈타인-우베크 프로세스란 무엇인가?

오른슈타인-울렌베크 과정은 연속 시간 무작위 과정으로 평균값 회귀 행동을 모델링한다. 즉, 무한히 떠다닐 수 있는 표준 무작위 이동이나 브라운 운동과 달리, OU 과정은 시간이 지남에 따라 장기 평균값으로 복귀하는 경향이 있다. 수학적으로 말하면, OU 과정은 이러한 평균값 회귀 행동을 제어하는 특정 무작위 미분방정식 (SDE) 의 해법이다. OU 과정의 SDE는 다음과 같은 공식으로 주어진다:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

그 중, Xt는 시간 t의 무작위 과정을 나타내며, μ는 장기 평균값, θ는 평균값 회귀율,δ는 변동성이며, dWt는 비에너 과정 또는 표준 브라운 운동이다.

역사적인 배경과 응용

1930년 레오나르드 오르너스타인 (Leonard Ornstein) 과 조지 유진 울렌베크 (George Eugene Uhlenbeck) 가 처음 제안한 오르너스타인-우벡 과정은 마찰이 있는 상태에서 브라운운운 운동을 하는 입자의 속도를 모방하기 위해 사용되었다. 시간이 지나면서, 그것의 실용성은 물리학을 훨씬 뛰어넘어 생물학, 화학, 경제학, 금융학 등 다양한 분야에서 적용되었다.

양적 금융에서 OU 과정은 평균값 회귀 행동을 나타내는 현상을 모델링하는데 특히 유용하다. 주목할 만한 예는 금리, 환율, 금융 시장의 변동성을 포함한다. 예를 들어, 유행한 금리 모델인 Vasicek 모델은 OU 과정으로부터 직접적으로 유도된다.

양자 금융의 중요성

오른슈타인-울렌베크 과정은 다음과 같은 이유로 양자금융에서 매우 중요합니다. 그 평균값 회귀 성질은 금융 변수를 모델링하는 데 자연스러운 선택이 됩니다. 금융 변수는 무작위적인 이동 행동을 나타내지 않고 안정적인 장기 평균값의 주위에서 변동합니다. 이 특성은 금리 모델링에 매우 중요합니다.

또한, OU 프로세스는 자산가치 모델 (다리비티 평가 포함) 과 위험관리 전략에 사용된다. 또한, Cox-Ingersoll-Ross (CIR) 모델과 같은 더 복잡한 모델의 구성 요소로도 사용될 수 있다. 이 모델은 OU 프로세스를 확장하여 부정적이지 않은 수익률을 모델링한다.

주요 특징과 직관

오른슈타인-우벡 과정의 주요 특징은 다음과 같다:

  • 평균 회귀:OU 과정은 장기간 평균값으로 돌아가는 경향이 있다. 이것은 브라운 운동과 같은 과정과 대조적으로 나타난다. 후자는 이러한 경향을 나타내지 않는다.
  • 변동성:매개 변수δ 제어 과정에서의 무작위성 또는 변동성의 수준. 변동성이 높을수록, 회귀하기 전에 과정이 평균에서 더 많이 이탈한다.
  • 회귀 속도:변수 θ는 프로세스 회귀 평균값의 속도를 결정한다. θ값이 높을수록 회귀 평균값의 속도가 빨라진다.
  • 안정성:OU 프로세스는 평평하다. 이는 OU의 통계적 특성이 시간이 지남에 따라 변하지 않는다는 것을 의미한다. 이것은 금융 분야에서 안정적인 시스템을 모델링하는 데 중요합니다.

직관적으로 말하자면, 당신은 Ornstein-Uhlenbeck 과정을 평균값을 둘러싸고 뻗어가는 경피의 행동을 모델링하는 것으로 볼 수 있다. 이 과정은 무작위적인 변동으로 인해 평균값에서 벗어날 수 있지만, 경피의 견인 은 ((평균값 회귀와 비슷하다) 그것이 결국 평균값으로 돌아오는 것을 보장한다.

다른 무작위 과정과 비교

OU 과정은 다양한 금융 현상의 모델링과 밀접하게 관련되어 있기 때문에, 종종 다른 무작위적인 과정 (Brown 운동과 Geometric Brown 운동 (GBM)) 과 비교된다. Brown 운동과 달리 (Brown 운동은 평균값으로 돌아가는 경향이 없다) OU 과정은 명백한 평균값으로 돌아가는 행동을 가지고 있다.

보통 주식 가격을 모델링하는 데 사용되는 지수 성장이 아닌 평균의 진동에 대한 OU 과정은 지수 성장이 나타나지 않으며, 주식 가격에 대한 이동과 변동 요소를 포함하는 GBM에 비해 OU 과정은 평균의 회귀 특성을 나타내는 변수를 모델링하는 데 적합합니다. GBM은 시간이 지남에 따라 증가하는 수를 모델링하는 데 적합하지만 OU 과정은 평균의 회귀 특성을 나타내는 변수를 모델링하는 데 적합합니다.

양자금융의 예

오른슈타인-우베크 과정은 금융 분야에서, 특히 평균값 회귀가 핵심 특성으로 되는 모델링 시나리오에서 광범위하게 응용된다. 아래에서는 가장 일반적인 사용 사례에 대해 논의할 것이다.

이자 모델링

OU 프로세스의 가장 대표적인 응용 분야 중 하나는 이자율을 모델링하는 것입니다. 특히 바시체크 모델의 프레임 워크에서 OU 프로세스를 따르고, 즉 시간이 지남에 따라 이자율이 장기 평균으로 돌아가는 것을 바시체크 모델은 가정합니다. 이자율은 무한히 변동하는 것이 아니라 경제 조건에 영향을 받는 평균 수준 근처에서 변동하기 때문에 이자율 행동을 정확하게 모의하는 데 중요한 특징입니다.

자산가격

자산 가격, 특히 고정 수익 증권에서 OU 과정은 일반적으로 채권 수익률의 진화를 모방하는 데 사용됩니다. OU 프로세스의 평균 회귀 성질은 수익률이 역사적 평균 값에서 너무 멀리 벗어나지 않도록 보장합니다. 이것은 관찰 된 시장 행동과 일치합니다. 이것은 OU 프로세스를 채권 및 기타 수익률 민감 도구의 가격에 귀중한 도구로 만듭니다.

쌍거래 전략

쌍거래는 시장중립적인 전략으로, 두 개의 관련 자산에 중점을 두는 것을 포함합니다. 이 경우 OU 과정은 특히 유용합니다. 왜냐하면 두 가지 자산 사이의 가격 차이를 모델링 할 수 있기 때문입니다. 가격 차이는 보통 평균 회귀입니다. OU 프로세스를 사용하여 가격 차이를 모델링함으로써 거래자는 가격이 평균에서 벗어나면 수익 입출소를 확인하고 평균 회귀를 예측하여 거래 신호를 생성 할 수 있습니다.

예를 들어, 두 종류의 선물 가격 간 차이가 어떤 하락점을 초과할 정도로 확대되면, 거래자는 우수한 성과를 낸 선물 상품을 사양하고, 좋지 않은 성과를 낸 선물 상품을 더 많이 구입하여, 가격 차이가 역사적 평균 수준으로 회복되기를 기대하여, 반전이 발생했을 때 수익을 올릴 수 있다.

오른슈타인-우베크 SDE 해법

Ornstein-Uhlenbeck 과정의 미분방정식 공식은 그 해결의 기초이다. 이 SDE를 해결하기 위해, 우리는 통합 인수법을 사용했다. SDE를 다시 쓰도록 하자:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

먼저, 우리는 양쪽을 /upload/asset/28dfe9abfb54772651590.png의 인수분수로 곱합니다:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

참고로, 양쪽에 /upload/asset/28dd9f7b41b5a6d244b0e.png를 더하면 왼쪽은 곱셈의 차원으로 나타낼 수 있습니다:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

양변을 0에서 t로 나누면

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

이것은 Ornstein-Uhlenbeck SDE의 일반적인 설명이다.

위의 추론된 명백한 해결책에는 몇 가지 중요한 의미가 있다. 첫 번째 /upload/asset/28e1d566f8ac15287edf3.png는 초기값이 시간이 지남에 따라 쇠퇴하고, 프로세스가 어떻게 점차적으로 시작 지점을 잊어 버렸는지 나타냅니다. 두 번째 /upload/asset/28df8a8a50df8d8362d7c.png는 프로세스가 시간이 지남에 따라 평균μ값으로 나아간다는 것을 나타냅니다.

이 솔루션은 확실성 평균값 회귀 행동과 브라운 운동에 의해 주도되는 무작위 분량 사이의 균형을 강조한다. 이 솔루션을 이해하는 것은 OU 과정을 효과적으로 시뮬레이션하는 데 중요합니다.

다른 무작위 과정과의 연결

오른슈타인-우벡 과정은 다른 유명한 무작위 과정 (Brown 운동과 바시체크 모델) 과 몇 가지 중요한 연관성을 가지고 있다.

브라운 운동과의 관계

Ornstein-Uhlenbeck 과정은 브라운 운동의 평균 회귀 버전으로 볼 수 있다. 브라운 운동은 독립적인 증가를 가지고 있고 평균 회귀가 없는 경향을 나타내는 과정이며, OU 과정은 브라운 운동을 변동한 변수 (drift) 를 사용하여 평균 회귀를 도입하여 과정을 중앙값으로 끌어당긴다. 수학적으로 말하자면, 우리가θ=0을 설정하면, OU 과정은 진동이 있는 표준 브라운 운동으로 간소화된다:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

따라서, 브라운 운동은 OU 과정의 특수한 예로서, 평균값 회귀의 부재에 대응한다.

바시체크 모델과의 관계

바시체크 모형은 이자 모델링에 널리 사용되며, 본질적으로 이자 진화의 오른슈타인-우베크 프로세스의 응용이다. 바시체크 모형은 이자율이 OU 프로세스를 따르고 있다고 가정하며, SDE는 다음과 같이 정의된다:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

그 중, rt는 단기 이자율을 나타내며, tham, μ,δ의 해석은 OU 과정에서의 해설과 유사하다. 와시케크 모델은 평균값 회귀 이자율 경로를 생성할 수 있어 금융 모델링에서 주요한 장점 중 하나이다.

이러한 관계를 이해하면 OU 프로세스가 다양한 환경에서, 특히 금융 분야에서 어떻게 사용되는지 더 넓게 이해할 수 있습니다. 우리는 응용 예제를 논의할 때 이러한 연결의 실제 의미를 탐구할 것입니다.

파이썬을 사용하여 Ornstein-Uhlenbeck 과정을 모의합니다.

이 섹션에서는 Python을 사용하여 Ornstein-Uhlenbeck (OU) 과정을 모의하는 방법을 살펴볼 것입니다. 이것은 OU 과정을 정의하는 무작위 미분방정식 (SDE) 을 분산화하기 위해 Euler-Maruyama 분산화를 사용하는 것을 포함합니다.

SDE의 분산

위의 SDE 수학적 공식들을 살펴보고 각각의 용어를 설명해 보겠습니다.

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

안에,

  • Xt는 t 시간에서의 과정의 값이다.
  • θ는 평균값 회귀 속도이다.
  • μ는 과정의 장기 평균이다.
  • δ은 변동률 변수이다.
  • dWt는 비에너 과정 ((표준 브라운 운동) 의 증가를 나타냅니다.

이 과정을 컴퓨터에서 모의하기 위해서는 연속 시간 SDE의 분산화가 필요하다. 흔히 사용되는 방법은 Euler-Maruyama 분산화이며, 작은 분산 시간 걸음을 고려하여 연속 과정을 근사한다. Ornstein-Uhlenbeck 과정의 분산 형태는 다음과 같다:

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

그 중, /upload/asset/28d3724600c509fb2d13f.png는 표준 정형 분포에서 추출된 무작위 변수 ((즉, 파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션)) 이다. 이러한 분산화는 우리가 시간에 따라 반복적으로 Xt의 값을 계산할 수 있게 하여 OU 과정의 행동을 모방한다.

파이썬 구현

이제 Ornstein-Uhlenbeck 프로세스를 Python으로 해체해 봅시다.

먼저, 우리는 NumPy와 Matplotlib을 표준 방식으로 가져옵니다. 그 다음, 우리는 OU 모델에 대한 모든 파라미터를 지정합니다. 그 다음, 우리는 OU 경로를 계산한 후 그것을 추가하기 위해 N의 길이의 NumPy 배열을 미리 할당합니다.

import numpy as np
import matplotlib.pyplot as plt

# Parameters for the OU process
theta = 0.7      # Speed of mean reversion
mu = 0.0         # Long-term mean
sigma = 0.3      # Volatility
X0 = 1.0         # Initial value
T = 10.0         # Total time
dt = 0.01        # Time step
N = int(T / dt)  # Number of time steps

# Pre-allocate array for efficiency
X = np.zeros(N)
X[0] = X0

# Generate the OU process
for t in range(1, N):
    dW = np.sqrt(dt) * np.random.normal(0, 1)
    X[t] = X[t-1] + theta * (mu - X[t-1]) * dt + sigma * dW

# Plot the result
plt.plot(np.linspace(0, T, N), X)
plt.title("Ornstein-Uhlenbeck Process Simulation")
plt.xlabel("Time")
plt.ylabel("X(t)")
plt.show()

도표의 결과는 다음과 같습니다.

파이썬을 이용한 Ornstein-Uhlenbeck 시뮬레이션

파이썬으로 그려진 Ornstein-Uhlenbeck 프로세스 시뮬레이션

이 과정이 초기 조건에서 X0=1을 평균값 μ=0으로 빠르게 어내고, 그 평균값에서 벗어나면 다시 그 평균값으로 돌아가는 경향을 나타낸다는 것을 주목하십시오.

결론과 후속 단계

이 글에서는 Ornstein-Uhlenbeck 과정을 개괄하고, 그 수학 공식을 설명하고, Python의 기본 구현을 제공하여 연속 시간 SDE의 해체 버전을 모의합니다. 후속 글에서는 OU 프로세스를 기반으로 구축된 더 복잡한 SDE를 연구하고, 어떻게 시스템 거래 및 파생물 가격 응용 프로그램에서 사용할 수 있는지 알아봅니다.

전체 코드

# OU process simulation

import numpy as np
import matplotlib.pyplot as plt

# Parameters for the OU process
theta = 0.7      # Speed of mean reversion
mu = 0.0         # Long-term mean
sigma = 0.3      # Volatility
X0 = 1.0         # Initial value
T = 30.0         # Total time
dt = 0.01        # Time step
N = int(T / dt)  # Number of time steps

# Pre-allocate array for efficiency
X = np.zeros(N)
X[0] = X0

# Generate the OU process
for t in range(1, N):
    dW = np.sqrt(dt) * np.random.normal(0, 1)
    X[t] = X[t-1] + theta * (mu - X[t-1]) * dt + sigma * dW

# Plot the result
plt.plot(np.linspace(0, T, N), X)
plt.title("Ornstein-Uhlenbeck Process Simulation")
plt.xlabel("Time")
plt.ylabel("X(t)")
plt.show()

원본 링크: https://www.quantstart.com/articles/ornstein-uhlenbeck-simulation-with-python/