May 2025 – Oct 2026
Honors thesis: Bayesian sequential decision-making under regime switches
My honors thesis built a regime detector for a simulated market that switches from a calm bull regime to a heavy-tailed bear regime: a hidden Markov model (HMM) with a rolling-volatility feature and a CUSUM change-point trigger, driving Kelly bet sizing under a drawdown floor. Afterwards I re-ran the core question as a pre-registered ablation: does each added piece make detection faster once every detector is held to the same false-alarm rate? Any detector can look faster by raising more false alarms, so speed only means something at a matched rate.

How I tested it
Everything is simulated. Each path has 250 steps, with the break from bull to bear at step 125. I compared a return-only HMM, the thesis's volatility HMM, the same model with the CUSUM trigger, and two standard change-point methods (BOCPD and a statistical jump model) as benchmarks. I tuned every alarm threshold on 1,000 exploratory paths, froze the specification, then ran the confirmatory test once on 2,000 fresh paths per setting.
What I found
At the thesis's persistence setting (A_ii = 0.95) and a matched rate of 5 false alarms per 1,000 pre-break steps, neither addition sped detection. The return-only HMM flagged the break 0.14 steps sooner than the volatility HMM on average (95% CI 0.09 to 0.20), with 87% of paths tied, and adding the CUSUM trigger did not speed it up either. At A_ii = 0.99 the difference vanishes or reverses. Across all 81 matched settings, the volatility feature was significantly faster in 21 and significantly slower in 37: a mixed result, not a clean null.
The feature's clear benefit is fewer false alarms. At the thesis's own threshold (alarm when P(bear) > 0.5, no tuning), it cut false alarms from 26.4 to 2.1 per 1,000 pre-break steps, at the cost of a longer mean delay (2.7 vs 1.5 steps). The benchmark methods, with model settings fixed in advance rather than tuned, were slower, mostly through missed breaks; that is not a ranking after tuning.
On the sizing side, most of the CPPI strategy's floor breaches came from a coded minimum leverage of 0.01: setting it to zero on the same paths removed 86% of breaches (99.7% at 50 rebalances per step). With the floor in place, detection added no median wealth for a lasting shock, because the floor already cuts exposure; without the floor, the HMM detectors ended with 8 to 9 times the median wealth of staying invested.
Limits
These results are synthetic only: one break time with stylized shocks, per-step moves far larger than daily equity returns, and HMMs given the true regime parameters, a best case for them. Matched false-alarm rates are approximate. I changed how the gap-risk analysis tracks the running peak after the exploratory run, before the freeze; the repository reports both versions.
The original thesis script never passed the current wealth to the CPPI strategy, so its floor never moved. That is fixed on the branch, but the thesis's original numbers remain unverified, so I quote none of them here; the thesis PDF reports them as defended.
Reproduce it
The re-run's specification, code and results are on branch ext2-ablation under final_thesis_work/ext2/. Everything is simulated, so no outside data is needed.