How many SNGs before your ROI means anything?
Every tracker — Tourney Manager then, Holdem Manager or PokerTracker now — will happily print an ROI after your first ten games. The number is real arithmetic and almost meaningless. The question is how many tournaments you need before it tells you something about your play rather than about the deck.
Rather than quote a rule of thumb, I simulated it. The script is short and is published here so you can change the assumptions.
Setup
- 9-max SNG, $10 + $1, prize pool $90 paid 50 / 30 / 20 ($45 / $27 / $18).
- A player is defined only by the probability of finishing 1st, 2nd and 3rd; everything else is a non-cash. No ICM, no skill model — just a finish distribution.
- For each player type, draw 4,000 independent samples of n tournaments and record the ROI measured in each sample.
| Player | P(1st) | P(2nd) | P(3rd) | ITM | True ROI |
|---|---|---|---|---|---|
| Solid winner | 16% | 13% | 12% | 41% | +17.0% |
| Marginal winner | 14% | 12% | 12% | 38% | +6.4% |
| Break-even | 13% | 12% | 11% | 36% | +0.6% |
| Loser | 11% | 11% | 11% | 33% | –10.0% |
Results
The table gives the 5th and 95th percentile of measured ROI — the band that 90% of samples fall into — and the share of samples in which a player with a positive true ROI measured a negative one.
| Player | n | 5th pct | 95th pct | Measured < 0 |
|---|---|---|---|---|
| Solid winner (+17.0%) | 100 | –8.4% | +43.2% | 13% |
| 300 | +2.3% | +31.7% | 3% | |
| 1,000 | +8.7% | +25.0% | 0.1% | |
| 3,000 | +12.4% | +21.6% | 0% | |
| Marginal winner (+6.4%) | 100 | –18.2% | +31.7% | 35% |
| 300 | –8.1% | +20.5% | 24% | |
| 1,000 | –1.2% | +14.5% | 9% | |
| 3,000 | +1.8% | +10.8% | 1% | |
| Break-even (+0.6%) | 100 | –23.1% | +25.2% | 50% |
| 300 | –13.3% | +14.5% | 48% | |
| 1,000 | –7.1% | +8.3% | 46% | |
| 3,000 | –3.8% | +5.0% | 42% | |
| Loser (–10.0%) | 100 | –32.9% | +12.9% | 77% |
| 300 | –23.1% | +3.4% | 90% | |
| 1,000 | –17.4% | –2.8% | 99% | |
| 3,000 | –14.1% | –5.7% | 100% |
What to take from it
- 100 games tell you almost nothing. A genuinely good player (+17%) shows a losing record one time in eight. A marginal winner shows a loss more than a third of the time.
- 300 games separate good from bad, not good from mediocre. The solid winner's band is clear of zero; the marginal winner's still straddles it.
- Around 1,000 games a +6% player can be fairly confident he is not a loser — but his measured ROI is still anywhere from –1% to +14%, which is the difference between "stay at this level" and "move up".
- Break-even players never find out from ROI alone. Even after 3,000 games, 42% of samples are negative. That is why finish distribution matters more than ROI for diagnosis: a 4th-place spike is visible in 300 games; a 0.6% edge is not visible in 3,000.
Two caveats. Real finish distributions are not independent draws — table selection, tilt and time of day all cluster — so real variance is somewhat higher than this. And the rake here is 9%; at 10% the break-even player becomes a loser and the bands shift down by about a point.
Code
Python 3, no dependencies. Change the players dictionary to your own finish distribution. Runs in about a minute.
def roi_true(p1,p2,p3):
ev = p1*PAY[1]+p2*PAY[2]+p3*PAY[3]
return (ev-(BUYIN+FEE))/(BUYIN+FEE)
def sample(p1,p2,p3,n):
tot=0.0
for _ in range(n):
x=random.random()
if x<p1: tot+=PAY[1]
elif x<p1+p2: tot+=PAY[2]
elif x<p1+p2+p3: tot+=PAY[3]
tot-=(BUYIN+FEE)
return tot/(n*(BUYIN+FEE))
Full script: sng_sim.txt.