Methodology
How we find the bracket that maximizes your chance of winning.
The Core Insight
Most bracket advice optimizes for expected points: pick the teams most likely to win. But winning a pool is not the same as maximizing your score. In a pool of 50 people, you need to finish first, not accumulate the most correct picks on average.
The key insight is that contrarian picks have outsized value in pool competitions. If 45% of your pool picks the same champion and that team loses, everyone who picked them is eliminated from contention. If you picked a different champion and they survive, you gain a massive edge over nearly half the field.
We optimize for P(rank = 1) — the probability that your bracket finishes in first place in your specific pool.
Probability Engine
We convert sportsbook odds for each team into implied probabilities of advancing to each round. Sportsbook odds include a built-in margin (the “vig”), so we remove it through multiplicative normalization to get true probabilities.
For head-to-head matchup probabilities, we use the log5 method (Bill James). Given two teams with estimated win rates pA and pB against an average opponent, the probability of A beating B is:
P(A beats B) = (pA - pA * pB) / (pA + pB - 2 * pA * pB)
Ownership Model
Ownership refers to how popular each pick is among other pool participants. We model opponent behavior using a combination of public pick data (when available from ESPN Tournament Challenge) and a synthetic model derived from implied probabilities.
The synthetic model applies a “chalk bias” parameter: casual pools over-weight favorites (chalk bias > 1), while sharp pools track closer to true probabilities. This maps to the “opponent sharpness” slider in the tool.
For each simulation, we generate stochastic opponent brackets sampled from the ownership distribution. This captures the natural variance in what opponents actually pick, rather than assuming all opponents pick identically.
Monte Carlo Simulation
For each candidate bracket, we run 25,000+ tournament simulations:
- Simulate the tournament outcome (63 games) using matchup probabilities
- Score the candidate bracket against the simulated results
- Score all opponent brackets against the same results
- Record whether the candidate finishes in 1st place
P(rank = 1) is the fraction of simulations where the candidate bracket wins the pool. The simulation engine is vectorized with NumPy to process all 25,000+ tournaments in parallel.
Optimization: Hill Climbing
We start with the “chalk” bracket (always pick the favorite) and iteratively improve it:
- Try flipping each game pick to the other team
- Run the full simulation to measure P(rank = 1) after the flip
- Keep the flip if it improves win probability
- Repeat until no single flip improves the bracket
Games are evaluated in reverse round order — championship first, then Final Four, then Elite Eight, and so on — because later-round picks carry more scoring weight and have the largest impact on pool outcomes.
Why Pool Size Matters
In a small pool (5-10 people), chalk is often optimal. There are few opponents, so the chance of a shared champion is lower, and picking favorites maximizes your baseline score.
In a large pool (100-1,000 people), differentiation becomes critical. With hundreds of opponents, many will share the same champion and similar brackets. To finish first, you need picks that set you apart when they hit — even if they hit less often.
The optimizer accounts for this automatically: larger pool sizes push toward more contrarian brackets.
Constraints
You can lock specific picks before optimizing. The optimizer respects these while finding the best bracket within your constraints:
- Champion lock — force a specific team to win the tournament
- Final Four lock — require certain teams in the Final Four
- Regional winners — lock the winner of any region
- Upset bounds — set a minimum or maximum number of upsets