Why this matters: The raw logistic-regression probability is usually OFF. A model trained on imbalanced data or with regularization tends to be either overconfident (says 70% but actually wins 50%) or underconfident (says 55% but actually wins 70%). Every downstream decision (Trade of the Day score, position sizing, alert threshold) reads probability as if it were accurate โ so if the raw prob is wrong, every decision is wrong.
How Platt scaling fixes it: We fit a sigmoid mapping P_cal = sigmoid(a ร logit(P_raw) + b) to the observed (predicted, won?) pairs from every resolved prediction. The two parameters a (slope) and b (intercept) get fit by gradient descent on log-loss. After enough pairs (~30+), Calibrator.calibrate(rawProb) returns a honest probability that matches the realized win rate within sample noise.
Auto-update: Calibrator re-fits every 50 new resolved predictions or every hour, whichever comes first. No manual intervention needed.
You can prove calibration is working by:
1. After 30+ resolved predictions, click "Force re-fit" to compute initial parameters.
2. Watch Brier (calibrated) drop below Brier (raw) โ that's the model becoming more accurate.
3. The reliability diagram dots should pull closer to the diagonal after re-fits.
4. Brain Monitor and TOTD pages can opt into calibrated probabilities by calling Calibrator.calibrate(rawProb).