KL Divergence: How to Tell a Real Mispricing From a Coincidence
You see two prices on the same event. Kalshi has YES at 62¢. Another platform has it at 50¢. Twelve cents apart. Is that a trade, or is it noise?
The honest answer is: it depends entirely on where on the book those prices sit. A twelve-point gap in the middle of the book is mostly noise. The same twelve-point gap up near 90¢ is a screaming mispricing. Your eye can't tell the difference. KL divergence can.
This is the number behind the KL-Divergence Arb Detector and one of the engines inside the Mispricing Scanner. Here is exactly how it works and the one trap that has quietly burned every scanner that ignored it.
The formula
For a binary market — one that resolves YES or NO — with your probability p and the market's probability q:
KL(P‖Q) = p·ln(p/q) + (1−p)·ln((1−p)/(1−q))
Both p and q are just prices divided by 100. A Kalshi contract at 62¢ is p = 0.62. That's it — cents are probability on a prediction market.
KL is directional, so the tool reports the symmetric version, which averages both directions into one clean distance:
Symmetric KL = [ KL(P‖Q) + KL(Q‖P) ] / 2
Bigger number, sharper disagreement. Zero means the two prices agree exactly.
Why the raw gap lies to you
Here's the whole point of using KL instead of subtraction. Consider two situations, both with a 10-point gap:
- Near the middle: one price 55¢, the other 45¢. The implied odds barely move. You're going from "slight favorite" to "slight underdog." Nothing dramatic.
- Near the edge: one price 95¢, the other 85¢. That's the difference between a 19-to-1 favorite and a 17-to-3 favorite. In payout terms it's an enormous gap — a YES buyer at 85¢ stands to make 15¢ on a dollar where a buyer at 95¢ makes 5¢. Three times the return.
Same 10 cents. Wildly different trades. KL divergence is built to reflect that — it weights disagreement near the extremes of the book far more heavily than disagreement in the middle, because that's where the real money lives.
A worked example
Say the same event is priced two ways and you want to know if it's worth a closer look. Kalshi has YES at 85¢; a sportsbook's contract on the identical outcome implies 60¢. (We name the book only as a price foil — the comparison is what matters.)
Plug in p = 0.85, q = 0.60:
KL(P‖Q) = 0.85·ln(0.85/0.60) + 0.15·ln(0.15/0.40)
= 0.85·(0.349) + 0.15·(−0.981)
= 0.296 − 0.147
= 0.149
KL(Q‖P) = 0.60·ln(0.60/0.85) + 0.40·ln(0.40/0.15)
= 0.60·(−0.349) + 0.40·(0.981)
= −0.209 + 0.392
= 0.183
Symmetric KL = (0.149 + 0.183) / 2 ≈ 0.17
A symmetric KL of 0.17 clears the tool's 0.15 ARB threshold. That 25-point gap, sitting up near the top of the book, is exactly the kind of disagreement worth chasing down. ARB FLAGGED.
The trap that burns scanners
Now run the gap I opened with — Kalshi 62¢ vs. the other platform 50¢, a 12-point gap right in the middle:
Symmetric KL ≈ 0.029
That scores ALIGNED. A twelve-point gap — bigger than the EV edge most traders would happily size up — reads as "nothing here" on a pure KL screen. This is not a bug in the math; it's the nature of it. KL divergence collapses toward zero near 50/50.
This exact failure mode has burned automated scanners that gated their alerts on KL alone. PMP's own sports-arb scanner flagged nothing for a stretch because an 8-to-12 point tradeable gap near the middle scored ~0.02 and got filed as aligned. The fix was to trigger on the raw points gap near the middle of the book and use KL as the truth-teller out near the extremes — never the other way around.
So the rule:
> Near 50/50, read the points gap. Near the edges, trust KL. Use both lenses; never let one alone make the call.
Fair value vs. market price — the bigger picture
KL divergence answers "how far apart are these two prices." It does not tell you which one is right. That's a separate judgment: you need a fair-value estimate of your own — from a model, a base rate, or a news read — and then you measure your number against the market's.
The full workflow looks like this:
1. Estimate your fair probability.
2. Compare it to the market price — points gap in the middle, KL at the edges.
3. Price the edge with the EV Calculator. A gap is not edge until it survives the spread and fees.
4. Size it with Kelly — fractional, always.
KL is step two's instrument when prices live near the extremes. It's a measuring tape, not a verdict.
Net it against costs before you call it a trade
A screen gap is not edge. Before any KL flag becomes a position:
- Spread: you cross the bid/ask, not the mid. A 17-cent edge with an 8-cent round-trip spread is a 9-cent edge.
- Fees: Kalshi and other platforms each have their own schedule. Net them.
- Liquidity: thin books move on your own size. The price you see is not the price you get for any real position.
A good rule of thumb: require the gap to beat your total round-trip cost by a comfortable margin before you treat it as actionable. KL tells you the disagreement is real and meaningful. Your cost stack tells you whether it's worth touching.
Run it yourself
Paste two YES prices from any two platforms on the same event into the KL-Divergence Arb Detector and it returns ALIGNED, WATCH, or ARB FLAGGED instantly — symmetric KL computed for you. For automated discovery across many markets at once, the Mispricing Scanner runs the same logic every morning.
And if you want the rest of the framework — estimate, price, compare, cost, size — start at the prediction markets quant hub. KL divergence is one instrument on the desk. It's a good one. It's not the whole desk.