Every prediction is stored before the match and settled against the official result — wins and losses alike. When the model changes, the counter resets: what you see below is the current model only, never a blend with retired versions.
What we forecast — for every match, who we think wins and with what probability. Forecast accuracy scores exactly that: how often the player we made favourite went on to win. Calibration error asks the harder question: when we say 70%, does it happen 70% of the time?
What we do not do is tell you what to bet. We published a value/EV signal until 1 August 2026. Then we backtested it against 17,012 matches priced by Pinnacle and it returned −7.5%, degrading to −12.4% as we demanded more edge from it. A signal that gets worse the harder you filter it is not an edge, so it is gone. Our probabilities are honest and well calibrated. They are not a way to beat the bookmaker, and we would rather say that than sell it.
When the model says 70%, it should win ~70% of those matches. Predicted vs actual, by confidence bucket.
Cumulative win rate as picks settle, against the market-favorite baseline.
Model favours — who the model expects to win, and the price on that player. A high percentage does not make a good bet: at 1.45 you need to be right 69% of the time just to break even.
This is a forecast, not a tip.We used to publish a “value bet” column here. We tested it against 17,012 matches priced by Pinnacle and it lost money — worse the more edge we demanded from it — so we took it down. The probabilities below are honest and well calibrated; they are not a betting edge, and we will not dress them up as one.
| Date | Match | Model favours | Result |
|---|---|---|---|
| 08-02 | Arthur Gea vs Denis ShapovalovATP · ATP Los Cabos (Hard) | Shapovalov 52%@ 1.65 | MISS · −1.00u |
| 08-02 | Alejandro Tabilo vs Rafael JodarATP · ATP 500 Washington (Hard) | Jodar 67%@ 1.40 | HIT · +0.40u |
| 08-02 | Daniel Vallejo vs Juncheng ShangATP · ATP Montreal (Hard) | Shang 52%@ 1.68 | HIT · +0.68u |
| 08-01 | Darja Vidmanova vs Renata ZarazuaWTA · WTA Memphis (Hard) | Vidmanova 58%@ 1.70 | HIT · +0.70u |
| 08-01 | Alexandra Eala vs Naomi OsakaWTA · WTA 500 Washington (Hard) | Osaka 57% | MISS · Eala |
| 08-01 | Dalibor Svrcina vs Titouan DroguetATP · ATP Montreal (Hard) | Svrcina 51%@ 1.90 | MISS · −1.00u |
| 08-01 | Lanlana Tararudee vs Qinwen ZhengWTA · WTA Toronto (Hard) | Tararudee 53% | HIT · Tararudee |
| 08-01 | Sofia Kenin vs Lucrezia StefaniniWTA · WTA Toronto (Hard) | Kenin 51% | MISS · Stefanini |
| 08-01 | Mananchaya Sawangkaew vs Rebecca SramkovaWTA · WTA Toronto (Hard) | Sawangkaew 67% | MISS · Sramkova |
| 08-01 | Himeno Sakatsume vs Moyuka UchijimaWTA · WTA Toronto (Hard) | Sakatsume 61% | MISS · Uchijima |
| 08-01 | Benjamin Bonzi vs Hugo DellienATP · ATP Montreal (Hard) | Bonzi 66%@ 1.19 | HIT · +0.19u |
| 08-01 | Elvina Kalieva vs Kristina LiutovaWTA · WTA Memphis (Hard) | Kalieva 60%@ 2.38 | MISS · −1.00u |
| 08-01 | Nicolai Budkov Kjaer vs Sho ShimabukuroATP · ATP Montreal (Hard) | Shimabukuro 52%@ 1.70 | HIT · +0.70u |
| 08-01 | Duncan Chan vs Hugo GastonATP · ATP Montreal (Hard) | Gaston 62%@ 1.33 | MISS · −1.00u |
| 08-01 | Isabella Marton vs Tatjana MariaWTA · WTA Toronto (Hard) | Maria 59% | HIT · Maria |
| 08-01 | Ana Grubor vs Maya JointWTA · WTA Toronto (Hard) | Joint 58% | HIT · Joint |
| 08-01 | Aoi Ito vs Oksana SelekhmetevaWTA · WTA Toronto (Hard) | Selekhmeteva 55% | MISS · Ito |
| 08-01 | Aleksandar Vukic vs Tomas Barrios VeraATP · ATP Montreal (Hard) | Vera 53%@ 2.65 | MISS · −1.00u |
| 08-01 | Emiliana Arango vs Lois BoissonWTA · WTA Toronto (Hard) | Boisson 55%@ 2.00 | HIT · +1.00u |
| 08-01 | Kei Nishikori vs Michael ZhengATP · ATP Montreal (Hard) | Zheng 60%@ 1.46 | HIT · +0.46u |
| 08-01 | Dane Sweeny vs Shintaro MochizukiATP · ATP Montreal (Hard) | Sweeny 61%@ 2.38 | MISS · −1.00u |
| 08-01 | Jacob Fearnley vs Sebastian OfnerATP · ATP Montreal (Hard) | Fearnley 55%@ 1.61 | HIT · +0.61u |
| 08-01 | Adam Walton vs Justin BoulaisATP · ATP Montreal (Hard) | Walton 68%@ 1.17 | HIT · +0.17u |
| 08-01 | Marco Trungelliti vs Nicolas MejiaATP · ATP Montreal (Hard) | Trungelliti 56%@ 1.75 | MISS · −1.00u |
| 08-01 | Martin Damm vs Henrique RochaATP · ATP Montreal (Hard) | Damm 60%@ 1.45 | HIT · +0.45u |
| 08-01 | Diana Shnaider vs Jessica PegulaWTA · WTA 500 Washington (Hard) | Pegula 79% | HIT · Pegula |
| 08-01 | Marcos Giron vs Pablo Llamas RuizATP · ATP Montreal (Hard) | Ruiz 52%@ 2.75 | MISS · −1.00u |
| 08-01 | Cameron Norrie vs Denis ShapovalovATP · ATP Los Cabos (Hard) | Shapovalov 51%@ 2.32 | HIT · +1.32u |
| 08-01 | Alejandro Tabilo vs Ben SheltonATP · ATP 500 Washington (Hard) | Shelton 69%@ 1.34 | MISS · −1.00u |
| 08-01 | Alexandra Eala vs Elina SvitolinaWTA · WTA 500 Washington (Hard) | Svitolina 71.6%@ 1.67 | MISS · −1.00u |
| 08-01 | Darja Vidmanova vs Katie VolynetsWTA · WTA Memphis (Hard) | Volynets 54%@ 1.50 | MISS · −1.00u |
| 08-01 | Rafael Jodar vs Lorenzo MusettiATP · ATP 500 Washington (Hard) | Jodar 59.4%@ 1.52 | HIT · +0.52u |
Flat 1-unit stake on the 23 settled picks with recorded odds: -3.80u (-16.5% ROI). Odds are the market average captured before the match, not closing odds.
Latest 88 predictions of the current model. Each row is written before the match starts and never edited after settlement.
| Segment | Settled | Correct | Win rate |
|---|---|---|---|
| WTA | 14 | 6 | 42.9% |
| ATP | 18 | 10 | 55.6% |
| Hard | 32 | 16 | 50% |
The model (v5.3) is surface-specific Elo, and as of v5.3 that is all it is. Earlier versions layered form, head-to-head, playing-style and fatigue adjustments on top. Those were removed, not reduced: on the backtest below, Elo alone scored better than Elo plus the adjustments on both log loss (0.6322 vs 0.6340) and accuracy (64.0% vs 63.7%). Probabilities are published for every modeled match; picks are selective — where the model lacks reliable recent data the match appears as a probability only, never as a pick.
We tested the model against the market, and the market won. Every match from 2018 was replayed in date order, recording what the model would have said that morning before the result was known, then compared with the closing price. On the 17,012 held-out matches from 2023 onward:
| Log loss | Accuracy | |
|---|---|---|
| TennisRaptor (Elo) | 0.6322 | 64.0% |
| Pinnacle closing price | 0.5947 | 67.8% |
Lower log loss is better. The bookmaker is sharper than we are, and we would rather you heard that from us. Beating a closing price is the hardest benchmark in the industry — most profitable bettors beat opening lines and are closed out long before the market settles — so this makes us ordinary, not broken. What it does mean is that our numbers are for understanding matches, not for beating prices.
What we are good at is meaning what we say. Across those same 17,012 matches, no probability band drifted more than 1.9 points from reality: when the model said 74.3%, the favourite won 72.9% of the time. It is less sharp than the market — it puts fewer matches in the confident bands — but within its own confidence it is honest. A flat 1-unit stake on the 23 priced picks in the ledger below is reported as a measurement, not a suggestion.
Settlement is automatic and immutable. A prediction is recorded before the match and settled against the official result. Retired matches and walkovers never settle game-total or set-score markets. Set-score and over/under simulations are published as context, not as picks.
Previous model v4.5 (2026-06-13 → 2026-07-31): 59.1% over 281 settled predictions. It was retired on 2026-08-01 after an internal audit found calibration failures; the current model was rebuilt from that audit. We keep the number here because a track record you can trust includes the versions that didn't work.