Skip to content

feat: stochastic-process discrimination + process→regime→option→archetype crosswalk - #52

Merged
mdheller merged 1 commit into
mainfrom
feat/process-family-crosswalk
Aug 3, 2026
Merged

feat: stochastic-process discrimination + process→regime→option→archetype crosswalk#52
mdheller merged 1 commit into
mainfrom
feat/process-family-crosswalk

Conversation

@mdheller

@mdheller mdheller commented Aug 3, 2026

Copy link
Copy Markdown
Member

Follow-on to #50. Builds on the merged MemoryRegimeCharacterization and reuses its estimators — scripts/memory_regime_estimators.py is unchanged (pure reuse of Hurst / Lyapunov / kurtosis / receipt). Adds stochastic-process discrimination and a total process↔regime↔option-family↔archetype crosswalk.

OU vs traditional Markov

New Ornstein-Uhlenbeck estimator: dX=θ(μ−X)dt+σdW → estimate θ, long-run μ, and half-life = ln2/θ. OU autocorrelation decays exponentially (e^{−θτ}) with a finite timescale, so OU is the canonical short_decaying / mean-reverting regime and is anti-persistent — its variance-time (aggregated-variance) Hurst is < 0.5 because k-step-move variance saturates instead of growing like a random walk. Distinguished from discrete-state Markov regime-switching (Hamilton): both are "Markov", but OU is a continuous mean-reverting diffusion with a timescale; regime-switching is memoryless jumps between discrete states (regime memoryless/state-only). Fractional-OU (OU driven by fBm) is provided as the hybrid = mean-reversion + long memory.

Process-family discriminator

Classifies a process path/observable among {brownian_gbm, markov_regime_switching, ornstein_uhlenbeck, fractional_brownian_motion, hawkes, jump_levy}, reusing the Hurst/Lyapunov estimators and adding the OU fit, a variance-time diffusion Hurst, and a jump/heavy-tail test.

VERIFIES (seeded, deterministic, robust across seeds): OU(θ∈{0.7,0.3,1.0}) → ornstein_uhlenbeck/short_decaying with θ̂>0, finite half-life (θ=0.7 → θ̂≈0.74, half-life≈0.93), anti-persistent variance-time H≈0.05 (<0.5); fBm(H=0.7) → fractional_brownian_motion/long_memory; GBM/Hawkes/jump-Lévy paths → their families. REJECTS: OU mislabeled long_memory; θ≤0 called mean_reverting; fBm mislabeled memoryless; OU missing ou_params.

The crosswalk (reference doc + typed mapping with teeth)

process family memory regime kernel option-model family (anchor) archetype
brownian_gbm memoryless delta Black-Scholes efficient-market / no-edge
markov_regime_switching memoryless (state) delta regime-switching models greed/fear & bull/bear shift
ornstein_uhlenbeck short_decaying exponential Vasicek/Hull-White/CIR/Heston/Stein-Stein contrarian / value / market-maker (fade extremes)
fractional_brownian_motion long_memory power_law rough volatility (GJR) / rBergomi / MMAR trend-follower / momentum / Elliott
hawkes short_decaying (self-exciting) exponential Hawkes / jump-clustering / contagion herd / FOMO / reflexive
jump_levy memoryless (fat-tail jumps) delta Merton-jump / variance-gamma / CGMY / smile-tail shock / crash / tail-hunter

Crosswalk teeth: the mapping is asserted total (every process family present) and coherent (each entry's regime matches the canonical process→regime map); the anchor option families are checked (OU→Vasicek/Heston, fBm→rough-vol). REJECTS a crosswalk mapping OU↔long_memory or fBm↔memoryless, and a non-total crosswalk (a family missing).

Rough-vol → vol surface

The fractional_brownian_motionrough volatility tie makes the Hurst axis govern volatility itself (Gatheral-Jaisson-Rosenbaum, vol is fractional H≈0.1), unifying the long-memory work with the vol surface (economic-prophet #44) by reference; the fBm risk_distribution_F carries the Hurst H a rough-vol calibration / the RAROC risk(F, reference, kernel, horizon) interface consumes.

Files

scripts/process_family_estimators.py, schemas/process-family-characterization.schema.json, schemas/process-regime-crosswalk.schema.json, examples/process-family/ (5 valid + 4 invalid), examples/process-regime-crosswalk/ (1 valid + 3 invalid), scripts/validate_process_family_crosswalk.py, docs/architecture/process-regime-crosswalk.md, workflow + Makefile + README.

Local: make validate-process-family-crosswalk → VERIFIES (9 seeded paths) + REJECTS (7 fixtures) + crosswalk totality/coherence + receipt teeth all green. Deterministic, stdlib-only. Records carry proof-artifact-spine SHA-256 receipts (FIPS-180-4 algorithm; not a FIPS-140 module).

…e->option->archetype crosswalk

Builds on the merged MemoryRegimeCharacterization (#50); reuses its Hurst /
Lyapunov / kurtosis / receipt estimators (memory_regime_estimators unchanged).

- process_family_estimators.py: Ornstein-Uhlenbeck generator + estimator
  (theta, long-run mu, half-life = ln2/theta; OU autocorr decays exponentially
  => canonical short_decaying / mean-reverting, anti-persistent H<0.5),
  fractional-OU (mean-reversion + long memory), a variance-time diffusion Hurst,
  seeded GBM / regime-switching / Hawkes / jump-Levy generators, and a
  six-family discriminator (brownian_gbm, markov_regime_switching,
  ornstein_uhlenbeck, fractional_brownian_motion, hawkes, jump_levy).
- ProcessFamilyCharacterization schema + ProcessRegimeCrosswalk schema (the
  total process<->regime<->option-family<->archetype mapping), fixtures, and one
  validator with teeth both ways:
  VERIFIES seeded OU -> theta>0/finite half-life/anti-persistent, fBm -> stays
  long_memory, GBM/Hawkes/jump-Levy -> their families;
  REJECTS OU-as-long_memory, theta<=0 called mean-reverting, fBm-as-memoryless,
  OU missing ou_params, crosswalk OU<->long_memory / fBm<->memoryless, non-total
  crosswalk; option-family anchors (OU->Vasicek/Heston, fBm->rough-vol) asserted.
- rough-vol tie makes the Hurst axis govern volatility itself, unifying the
  long-memory work with the vol surface (economic-prophet #44) by reference.
- Makefile target + aggregate validate, CI workflow, README + arch doc.
- proof-artifact-spine SHA-256 receipts (FIPS-180-4 algorithm; not FIPS-140).
@mdheller
mdheller merged commit bb8279c into main Aug 3, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant