The Winner's Curse: Why Winning an Auction Might Be Your Biggest Mistake
Unraveling the game theory myth of why winning a bidding process could actually guarantee a negative expected profit.
Who doesn't want to be a winner, right? From playing football on the field to playing FIFA with your friend, people like winning. In this article, I want to explain a phenomenon called the "Winner's Curse" as a topic of game theory, unraveling the myth of why winning a bidding process could actually be a massive mistake.
The Scenario
Picture this: You and I are sitting at a high-end art auction. Up on the block is a mystery painting hidden under a sheet.
I turn to you and whisper: "I have no idea who painted that, but I know its true value is completely random — somewhere between 0 and 100,000. I also happen to know a museum director who will buy it off you today for 1.5× whatever it's actually worth."
Bid higher than the painting's secret value → you win. Bid lower → you lose, and we go home.
You are thrilled, greedy, and believe you are the smartest guy in the auction room. You think: "Well, the average price is 50,000, so my average gain is 25,000. There is no way I am losing this trade with a bid of 50,000."
I know, it sounds bulletproof. But you know what? You just locked yourself in for a losing trade.
Let V denote the actual value of the painting, and B denote the bid you place. Here's what actually happens in each case.
Winning means V < B. The painting is now uniform on [0, B]. You just learned it's worth less than you paid.
Your bid is rejected. V > B — you underpriced it — but you also dodged a guaranteed loss.
Can't I Still Get Lucky?
Now, if you are a sharp reader, you might be thinking: "Wait a minute. Expected value is just an average. What if the painting's actual value is 40,000 and I bid 50,000? The museum pays me 60,000, and I make a sweet 10,000 profit! I can still win this, right?"
You are absolutely right — it is entirely possible to make money on a single trade. But let's look at exactly how lucky you need to be. To turn a profit, the museum's payout must beat your bid:
Your bid is only profitable if the painting's true value falls in the upper third — between 66.7% and 100% of your bid. Since V is uniform on [0, B] when you win, the odds are fixed:
Why does the house always win the long game? The scales are unbalanced. Your upside is capped — bid 60,000 and the maximum profit is barely under 30,000. But if the painting is worth 0, you lose your entire 60,000 bid. That heavy 67% chance of severe losses drags your average straight down to the mathematically guaranteed −0.25B.
Key Insight
Notice the negative sign. Whatever bid B you place, your expected profit is always negative. Every time you "win" this auction, you can expect to lose exactly 25% of your bid.
This is the Winner's Curse: sometimes, the only winning move is not to play. Or in this case, to confidently bid 0 and walk away.
Proving It with Python
Math is great, but code is better. Let's write a quick simulation to play this exact game 100,000 times and see if the math holds up.
import random
# 1. Set the Parameters
revenueCoeff = 1.5
B = 50000
n = 100000
# 2. Set up Trackers
netProfit = 0
profitableWins = 0
numberOfWins = 0
# 3. Run the Simulation
for i in range(n):
V = random.uniform(0, 100000)
if V > B:
continue
numberOfWins += 1
revenue = V * revenueCoeff
currProfit = revenue - B
netProfit += currProfit
if currProfit > 0:
profitableWins += 1
# 4. Results
averageProfit = netProfit / numberOfWins
winRate = (profitableWins / numberOfWins) * 100
print(f"Auctions Won: {numberOfWins} out of {n}")
print(f"Average Profit per Win: ${averageProfit:.2f}")
print(f"Profitable Win Rate: {winRate:.2f}%")The output:
Auctions Won: 49812 out of 100000
Average Profit per Win: $-12511.40
Profitable Win Rate: 33.21%The Law of Large Numbers never lies.
- We won roughly half the time (bidding 50,000 out of 100,000).
- We only made a profit on about 33.3% of the games we won.
- Our expected profit settled right at −12,500 — exactly
−0.25 × B.
Want to play with the parameters and run the simulation yourself? You can find the full Python Jupyter Notebook on my GitHub.