SDE-распределения методом Монте-Карло#

Этот учебник показывает практический рабочий процесс SDE в pyna:

  1. определить модель Ито с BrownianMotion, GeometricBrownianMotion или ItoSDE;

  2. сгенерировать воспроизводимый выборочный путь как Trajectory;

  3. запустить векторизованный ансамбль Монте-Карло для оценки распределений;

  4. сравнить эмпирические среднее, дисперсию и квантили с аналитическими формулами, когда они доступны.

Используйте SDE-классы pyna для описания модели и геометрии одиночного пути. Используйте векторизованные массивы NumPy для больших ансамблей, пока в pyna не появится выделенный класс геометрии ансамбля. Так математическая объектная модель остается честной: одна реализация - это выборочная траектория, а облако реализаций - статистический оцениватель.

Note

Исполняемый ноутбук ниже сохранён в репозитории с готовыми выводами, а выполнение nbsphinx отключено. Перезапускайте его локально при изменении численных параметров; сборка документации отрендерит сохраненные выводы на GitHub Pages.

Исполняемый ноутбук:

Шаблон для копирования#

import numpy as np
from pyna.dynamics import GeometricBrownianMotion

gbm = GeometricBrownianMotion(mu=[0.08], sigma=[0.20])
one_path = gbm.euler_maruyama([100.0], (0.0, 1.0), dt=1/252, rng=7)
print(one_path.final)  # TimeSeriesSolution is a pyna Trajectory

n_paths = 200_000
rng = np.random.default_rng(20260701)
z = rng.normal(size=n_paths)
log_terminal = (
    np.log(100.0)
    + gbm.expected_log_growth()[0] * 1.0
    + gbm.sigma[0] * np.sqrt(1.0) * z
)
terminal = np.exp(log_terminal)
print(np.mean(terminal), np.quantile(terminal, [0.05, 0.5, 0.95]))

Заметки по расширению#

  • ItoSDE.diffusion_matrix принимает скалярную, векторную или матричную диффузию.

  • ItoSDE.euler_maruyama принимает внешне предоставленные приращения dW, поэтому эксперименты с common-random-number и регрессионные тесты могут быть детерминированными.

  • Повышайте один выборочный путь через топологические объекты только тогда, когда геометрическое утверждение имеет смысл. Выборки Монте-Карло оценивают распределения; они не становятся автоматически инвариантными множествами.