Confidently Wrong
Two near misses and a few lessons learned
I’m still coming down from last night. Cape Verde versus Argentina was one of those matches that reminds you why the beautiful game is so compelling: a debutant nation believing in itself and taking the defending champion and tournament favorite to the wire, 3–2, and coming within a goal of the biggest upset of this World Cup, and perhaps any.
As Thierry Henry said, just magical.
I took a look at the model this morning in a good mood: it’s been performing well. And then I looked at today’s fixtures and noticed something was off. It had Canada playing Paraguay and France playing Morocco. The pairings were scrambled.
I dug in, and I found two bugs (well, Claude did). Worth detailing both, especially the second which is the most interesting one.
The first was mundane: bad bracket data in the seed file had a couple of the knockout fixtures wired to the wrong slots. Annoying, quick to fix, verified against the official feed, corrected in the live database.
The second one had been hiding in plain sight since the tournament started. The model, by design, doesn’t treat draws as a weakness: it predicts them, and a tie doesn’t count against a team’s strength rating. That’s intentional. But knockout games can’t end in a draw; they go to a shootout. And a penalty shootout isn’t really a measure of which team is better: it’s close to a coin flip, which is exactly why I didn’t want it feeding the strength ratings.
The problem was how the old code handled that. When a knockout match came back level after regulation, it silently assumed the away team advanced. Not because that’s true (it obviously isn’t) but because I hadn’t explicitly told it what to do, so it guessed. And it had gotten lucky three times in a row, quietly picking right, which is the most dangerous way for a bug to behave.
I fixed it so the model now does the honest thing: when a knockout ends level, it stops and flags the match for a human to enter the real result, rather than inventing an answer. A shootout isn’t a strength signal, so the model shouldn’t pretend to read one.
Here’s why I’m bothering to write this up.
I said on the webinar with Athena Solutions last week that the thing you have to watch for with AI isn’t that it’s wrong: it’s that it can be confidently wrong.
These systems state every answer, the shaky ones and the solid ones, with exactly the same clarity. There’s no tremor in a model’s voice when it’s guessing. That produces false confidence, and false confidence is much worse than a visible error, because you don’t go looking for it.
This little bug was a perfect small example. The model wasn’t uncertain about today’s matchups. It didn’t hedge. It served up “Canada vs Paraguay” with the same crisp assurance it uses for everything else. I caught it because the fixtures were checkable against reality.
The uncomfortable question is how many confidently-stated outputs aren’t that easy to check - and catch. The discipline isn’t teaching the machine to doubt itself. It’s remembering that you have to.
A day later and the wrong results would have propagated down the bracket. Instead it’s fixed, deployed, and documented.
One more thing: what if Cape Verde had actually won?
Since I had the model open, I ran a counterfactual. The betting market has been ahead of my model all tournament. I wrote about that earlier; a transparent strength model gives up ground to a market that prices in everything it can’t see. But the gap’s been narrowing in the knockouts, and last night’s match is a good window into why, and how fragile that is.
My model and the market both had Argentina as a heavy favorite, but the model was more confident: 83.7% Argentina versus the market’s 79.3%. Argentina won, so on that match the model actually beat the market, one of the nights it closed the gap.
But flip it. Had Cape Verde pulled off the massive upset, the model wouldn’t just have lost; it would have lost to the market, and by more than it gained last night. On the Argentina win, the model beats the market by about 0.025 on that match (Brier score, lower is better). On a Cape Verde win, it trails by about 0.10. A swing of roughly 0.13, against the model.
That’s the mechanism behind the narrowing gap, and its catch. The model has been clawing back ground on the market partly by betting harder on Argentina than the market does. Every time the favorite wins, the model gains. But that’s not a smarter model; it’s a more concentrated one. The same conviction closing the gap now is exactly what would blow it back open the night the favorite falls. And in a single-elimination bracket, that night ends Argentina’s tournament and the model’s momentum in the same instant.
Last night, that night was one goal away.




