Stochastic Processes

Table of Contents

This is the hub note for stochastic processes as a modelling tool. Each linked note is a single focused concept; start here and follow the links.

Summary

A stochastic process is a random variable that evolves over time according to a rule combining a deterministic drift with a random shock. Two pieces of stochastic calculus underpin every process in this cluster: the Wiener process (the continuous-time random walk supplying that shock) and Ito's lemma (the chain rule that lets you change variables — e.g. from a rate to a bond price — without leaving continuous time). Everything else in this cluster is one of six concrete processes built on those two foundations, split into two families: price processes, which model a quantity that can wander without bound, and mean-reverting processes, which model a quantity that is pulled back toward a long-run level. The first place these processes are put to use in ORE Studio is ores.analytics.quant's synthetic market data generators (FX spot, equity, and short-rate paths) — but that is one consumer of a general-purpose toolkit, not what this cluster is fundamentally about.

Detail

Foundations

  • Random Walk — the discrete-time process of summing independent steps; the Wiener process is its continuous-time limit.
  • Markov Property — the "no memory" property every process in this cluster has: the next state depends only on the current one.
  • Wiener Process — continuous-time Brownian motion, \(dW\), the source of randomness every process below is driven by.
  • Ito's Lemma — the stochastic chain rule, needed to derive e.g. a bond-price SDE from a short-rate SDE.

Price processes (unbounded)

  • Arithmetic Brownian Motion — additive increments (price + increment=); implemented by arithmetic_gaussian_mixture_model_process.
  • Geometric Brownian Motion — multiplicative, log-normal increments (price * exp(log_return)=); implemented by gaussian_mixture_model_process. Both generalise their single-Gaussian textbook form to a K-component Gaussian mixture, reproducing fat tails and volatility clustering a single Normal shock cannot — see Volatility clustering and GARCH models for the companion discrete-time picture of that same fat-tail problem. Currently consumed for FX spot and equity price generation.

Mean-reverting processes

Mean reversion is the opposite behaviour to the unbounded wandering of the price processes above: instead of a random shock accumulating without limit, a mean-reverting process has a built-in pull back toward a long-run level whenever it drifts away — the further it strays, the harder it gets pulled back. Nothing stops it wandering away again on the very next tick, so the path still looks jittery moment to moment; what mean reversion changes is the long-run behaviour, not the short-run randomness — a mean-reverting path keeps circling back toward its target level instead of drifting off to arbitrarily large or small values the way an unbounded price process can. This is the natural shape for quantities that are anchored by some external equilibrium force (a central bank's policy target for an interest rate, for instance), whereas a price process is the natural shape for quantities with no such anchor at all.

  • Ornstein-Uhlenbeck Process — the general mean-reverting building block, \(dX = \kappa(\theta-X)\,dt + \sigma\, dW\); implemented by ornstein_uhlenbeck_process.
  • Vasicek Process — the OU process applied to a short rate with a constant long-run level; implemented by vasicek_process, a thin wrapper composing hull_white_process.
  • Hull-White Process — Vasicek generalised to a piecewise-constant, time-varying mean-reversion level \(\theta(t)\), letting the process fit an observed initial term structure exactly; implemented by hull_white_process.
  • Cox-Ingersoll-Ross (CIR) Process — Vasicek with a \(\sigma\sqrt{r}\) volatility term that keeps the rate non-negative, at the cost of a non-Gaussian (non-central chi-squared) transition density; implemented by cox_ingersoll_ross_process.

Currently all four are consumed as short-rate models; the underlying maths applies to any quantity that reverts to a long-run level, not just a rate.

How the mean-reverting family relates

Vasicek, Hull-White, and CIR are not three independent models — they are three points on one design axis, all sharing the OU drift shape \(\kappa(\text{target} - X)\):

Process Volatility term Mean-reversion target Can go negative?
OU \(\sigma\) (const.) constant \(\theta\) yes
Vasicek \(\sigma\) (const.) constant \(\theta\) yes
Hull-White \(\sigma\) (const.) time-varying \(\theta(t)\) yes
CIR \(\sigma\sqrt{r}\) constant \(\theta\) no

Vasicek is literally the \(\theta(t) = \text{const}\) special case of Hull-White — vasicek_process composes hull_white_process rather than reimplementing it. CIR cannot be reached from Hull-White by any parameter substitution: its non-negativity comes from a genuinely different volatility term, which is also why its exact transition requires the Poisson-mixture-of-central-chi-squared construction described in its own atomic doc, rather than the closed-form Gaussian update the other three share.

Current consumer: synthetic data generation

ores::analytics::quant::service::process_factory constructs the concrete process an ir_curve_generation_config or market_data_generation_config names, behind the common IStochasticProcess interface every process implements — the generation loop that drives next() on whichever process was configured does not need to know which one it got. This is the first, not the only, place these processes are expected to be used in ORE Studio.

See also

Further reading

Emacs 29.3 (Org mode 9.6.15)