Probability calibration (Platt scaling) fits a sigmoid mapping
p_cal = sigmoid(a ร logit(p_raw) + b) to past (predicted, actual) pairs. The global Calibrator averages this fit across every market condition.
The problem: a model that's well-calibrated in calm markets is often
overconfident in high-vol markets. The same raw 70% might really win 70% in chop but only 55% when VIX is 25+. Averaging hides this.
The fix: maintain a separate Platt scaler per regime:
- bull โ SPY day chg > +0.5%, VIX < 18
- bear โ SPY day chg < -0.5%, VIX < 25
- chop โ |SPY| < 0.5%, VIX < 22
- high-vol โ VIX โฅ 22 OR |SPY| > 1.5%
- mixed โ everything else
At predict time, the Unified Predictor picks the right calibrator based on current SPY/VIX. Falls back to the global Calibrator (or raw) if the current regime has fewer than 30 resolved samples.