The last post was about making a number trustworthy.
Leakage geometry, purge widths, de-overlap, a baseline that could not cheat.
It ended with a minute-scale ceiling that held at 52% across seven configurations and a model family swap.
This one is about what happens after you trust the number.
Because a probability you are going to bet on is a different object from a probability you are going to report.
The probabilities are not decorative The path-passage classifier is a three-class LightGBM.
It returns , , .
Those go straight into the expected-value score that decides whether to take a trade and how big: is the barrier, the cost.
Read the arithmetic.
Every term is linear in a probability.
Scale by 1.2 and you scale the long score by very nearly 1.2.
So miscalibration does not stay in the model.
It becomes a bet-sizing error, in proportion, in the bins where the gate actually fires.
A classifier that is right 70% of the time while claiming 90% is not 20 points wrong.
It is sizing every position in that bin as though the edge were far larger than it is.
Boosted trees are known for uncalibrated softmax output.
I had been consuming it as if it were a probability.
The audit Seven live assets.
For each one, fit an Inductive Venn-Abers wrapper on the time-ordered older 80% of that model's training data, 6,988 rows, and evaluate against a 500-row uniform-random sample of the newer 20%, seed
42.
The LightGBM models are reloaded from disk and left alone.
Only the wrapper is fit.
Measure Expected Calibration Error and log-loss, before and after.
Asset ECE before → after ECE Δ Log-loss Δ BTC 0.1272 → 0.0621 -51.2% -5.5% ETH 0.1795 → 0.0298 -83.4% -11.5% SOL 0.1680 → 0.0386 -77.0% -10.6% XRP 0.2219 → 0.0645 -70.9% -17.7% ADA 0.1419 → 0.0369 -74.0% -8.0% LINK 0.1260 → 0.0737 -41.5% -1.2% LTC 0.1508 → 0.0603 -60.0% -14.1% Every asset has a real gap.
That settles the first question, which was whether this was one bad model or a property of the setup.
It is systematic.
The second question is the interesting one.
The direction is asset-specific, and that rules out the easy fix ETH fails the way boosted trees are supposed to fail.
Its worst reliability bin is [0.90, 1.00].
Eleven samples.
Mean stated confidence 93.8%.
Empirical accuracy 45.5%.
Most certain, least reliable.
That is the bin where the EV gate fires hardest and the position sizes are largest.
The other six fail in the opposite direction.
XRP, in the [0.60, 0.70] bin: 93.1% accuracy at 64.9% stated confidence, n=116.
A 28-point understatement.
LTC, same bin: 90.4% accuracy at 64.7% confidence, n=115.
That is a suppressed-signal failure.
The gate does not fire often enough, because the stated confidence lags what the model actually delivers.
It costs money quietly, by declining trades that were good.
One asset over-confident.
Six under-confident.
Which kills the convenient answer.
Platt scaling and temperature scaling apply one monotone correction.
They cannot pull ETH's tail down and push XRP's middle up at the same time, because those are corrections in opposite directions.
A single global calibrator fits the average of two failure modes and helps neither.
Per-asset Venn-Abers works here because it fits each asset's own reliability curve and does not assume a shape.
Where the split came from This is the part I did not expect, and it is the reason I keep the training params in the same document as the audit.
The hardened LightGBM settings were , , .
I introduced those specifically to stop the ETH-style saturation, where terminal leaves go to 1.0 and the model claims certainty it has not earned.
They worked.
They also worked too well.
Constraining the leaves prevented the over-confidence failure and produced a structural under-confidence pattern across the rest of the universe.
The fix for one failure mode manufactured the opposite failure mode in six assets.
ETH is the lone holdout that still saturates, because in the rare cases where it is genuinely certain its leaves still reach