TennisEdge's AI model finds no betting value in F. Cobolli vs Y. Hanfmann (Montreal on 2026-08-04) — the market is efficient, with F. Cobolli favoured at 1.67.
Independent estimates of who wins, each from a different method. The blend is what the bot prices against the market.
| Method | F. Cobolli | Y. Hanfmann |
|---|---|---|
| Elo ratings-based, surface-weighted |
52.7% | 47.3% |
| Machine learning 29-feature gradient-boosted model |
58.0% | 42.0% |
| Serve / return point-by-point simulation |
40.0% | 60.0% |
| Blend what the bot actually prices off |
52.7% | 47.3% |
| Market implied de-vigged from the opening odds |
56.8% | 43.2% |
We publish how well these score against the closing market, including where they lose: how accurate are tennis predictions?
| Player | Surface | Elo | Record | Matches |
|---|---|---|---|---|
| F. Cobolli | clay | 1896 | 132–82 | 214 |
| Y. Hanfmann | clay | 1810 | 123–82 | 205 |
Our own ratings, computed from match results since 2018. Players with fewer than 5 rated matches are omitted rather than shown at a provisional starting value. Last updated July 15, 2026.
| L | R. A. Burruchaga | 0 - 2 | July 15, 2026 |
| L | A. Fery | 0 - 3 | July 8, 2026 |
| W | A. De Minaur | 0 - 3 | July 6, 2026 |
| W | K. Khachanov | 2 - 3 | July 4, 2026 |
| W | J. Duckworth | 1 - 3 | July 2, 2026 |
| W | B. Bonzi | 1 - 2 | Aug. 3, 2026 |
| L | Q. Halys | 0 - 2 | July 24, 2026 |
| W | S. Baez | 2 - 0 | July 23, 2026 |
| W | M. Trungelliti | 0 - 2 | July 22, 2026 |
| W | L. Neumayer | 0 - 2 | July 20, 2026 |
All Aug. 4, 2026 results & picks →
F. COBOLLI (A) vs Y. HANFMANN (B) — ATP Montreal, hard, 1/32-finals
═══ MODELS vs MARKET ═══
ELO: A 52.7%
ML: A 58.0%
Model (blend): A 52.7%
Betfair ML: A 1.71 / B 2.32 → A 59.7% comm-adj (the executable baseline)
Book: A 1.67 / B 2.20 → A 56.8%
Pinnacle: A 1.69 / B 2.27 → no-vig A 57.3% (fetched 10:55Z, ~fresh)
drift_a_pp +0.53 → sharp money drifting mildly TOWARD Cobolli
Sim (baseline): A 40.0% — hard divergence from ELO/ML/market/sharp (see MARKET CHOICE)
Market, sharps and ML cluster A 57–60%; ELO is the lone dissenter at 52.7%. Cobolli is
ranked 22 vs Hanfmann 59, yet ELO gives him only 52.7% — no farmed-rating flag on either
side (Hanfmann's clay wins came against 1750–1790 opponents, legitimate), rather Cobolli's
ELO is weighed down by a poor clay stretch after Roland Garros. ELO/rank divergence is
mild; ELO is credible but is the outlier here.
═══ RECENT FORM (5 most recent each) ═══
F. COBOLLI (24, rank 22) — LAST MATCH 07-15, i.e. 20 DAYS IDLE
07-15 Umag clay 1/8 LOST Burruchaga (1782 Strong) 2-6 4-6 — beaten in straights
07-08 Wimbledon grass QF LOST Fery (1766 Strong) 4-6 6-7 0-6
07-06 Wimbledon grass 1/8 WON De Minaur (1907 ELITE) GRIND (tb) — over-performance
07-04 Wimbledon grass 1/16 WON Khachanov (1788 Strong) GRIND (5 sets, 2 tb)
07-02 Wimbledon grass 1/32 WON Duckworth (1571 Avg) GRIND (2 tb)
Shape: FADING. The Wimbledon QF run (GRIND wins over Elite/Strong) was genuine
over-performance, but it is now a month old and the most recent data point is a
straight-sets loss to a 1782 on clay. Nothing since.
Y. HANFMANN (34, rank 59) — played YESTERDAY, at this venue
08-03 Montreal hard 1/64 WON Bonzi (1760 Strong) 3 sets, no tb
07-24 Kitzbuhel clay SF LOST Halys (1796 Strong) 4-6 6-7
07-23 Kitzbuhel clay QF WON Baez (1789 Strong) 6-3 6-1 DOM — over-performance
07-22 Kitzbuhel clay 1/8 WON Trungelliti (1750 Strong) GRIND (6-7)
07-20 Kitzbuhel clay 1/16 WON Neumayer (1698 Strong) GRIND (6-7)
Shape: STABLE. DOM over Baez (1789), SF run at Kitzbuhel, then converted R1 here on the
hard court. Grinding but beating Strong-bracket opponents consistently.
═══ PATH & SHARPNESS (Step 1b) ═══
Hanfmann: 1 match at this venue, ON this surface, WON yesterday → match-sharp,
conditions-adjusted, timing grooved.
Cobolli: seeded direct entry, FIRST match at the venue, 20 days since any match, and
his last competitive tennis was on CLAY → rust risk + TRANSITION (clay→hard),
depressed level and wider margin variance in match one.
This path read cuts AGAINST the favourite, i.e. against the side the schedule story
would otherwise favour. It is two-sided with the fatigue read below, not additive to it.
═══ FATIGUE (Step 2) ═══
Cobolli: matches_14d 0, court time 0, no last-match date → fully rested (but rusty).
Hanfmann: matches_14d 4, matches_7d 1, 456 min / 12 sets, back_to_back 2, last 08-03.
EXTREME SPOT: won a 3-SET match YESTERDAY → calibrated −4.5pp hangover haircut applies
(surface-agnostic; extra-set toll only, applied once, not stacked with cumulative load).
Age modulation: Hanfmann is 34 (≥30, recovers slowly) → harden one tier. Real
disadvantage, not context.
BUT: this is precisely the visible-fatigue story markets over-price, and here it is
offset by Hanfmann being the played-in, surface-adjusted player facing a 20-day-idle
opponent walking in off clay. Directionally pro-Cobolli, magnitude contested — and per
G1 it may only confirm or kill an edge, never create one.
═══ NARRATIVE (Step 3) ═══
Let-down: Cobolli lost the Roland Garros FINAL on 06-07 — 58 days ago, far outside any
let-down window. None active.
Title recency: none for either player in the window.
Venue momentum: Montreal appears only in Hanfmann's list (1-0 this week).
Surface transition: BOTH came off clay; Hanfmann has already played through it here,
Cobolli has not. Transition risk sits on Cobolli, which is also why a tight
Cobolli cover is unattractive (looser margins in match one cut both ways).
═══ MARKET CHOICE ═══
Sim validation (Step 4b): baseline sim has Hanfmann favourite at 60.0% (SPW A .583 /
B .593) against ELO 52.7%, ML 58%, market 59.7%, Pinnacle 57.3% — a ~17pp divergence, so
the sim's INPUTS are the broken number, not the market. Cause is visible: Cobolli's
serve/return average is dragged down by a bad clay stretch and 5-set grass marathons,
while Hanfmann's was built on a clay SF run vs 1698–1789 opponents; neither is
opponent-adjusted or hard-court weighted. Calibrated the one input I can defend:
spw_a 0.583 → 0.613 (used 0.613, clamped: FALSE) → win A 55.7%, landing inside the
ELO(52.7)–ML(58)–Pinnacle(57.3) band. All markets below are priced off THAT single
coherent distribution.
Edges vs commission-adjusted Betfair (0.95 factor):
ML A 1.71 → imp 59.7% vs sim 55.7% = -3.98% (min 1.884, price is 1.71) ✗
ML B 2.32 → imp 44.4% vs sim 44.3% = -0.11% (min 2.372, price is 2.32) ✗
AH A -1.5 @1.92 → imp 53.4% vs 51.0% = -2.40% ✗
AH B +1.5 @1.98 → imp 51.8% vs 49.0% = -2.75% ✗
TOT O 22.5 @1.91 → imp 53.6% vs 49.2% = -4.45% ✗
TOT U 22.5 @2.02 → imp 50.8% vs 50.8% = +0.03% ✗ (nil)
AH: B +1.5 @ 1.98
Sharp cross-check (Pinnacle, GAMES lines, same scale): AH A -1.5 no-vig 51.3% vs my
51.0% — near-identical, corroborating the calibration and confirming there is no margin
edge. Totals no-vig UNDER 48.8% vs my 50.8% — sharps are slightly MORE over-leaning than
me, so the only nominally non-negative bet (Under 22.5) is contradicted by the sharp
line. That kills it outright rather than making it marginal.
Every priced market is negative or nil. Nothing to express.
refutation_check: n/a — PASS decision, no web access taken.
═══ GATES ═══
GATES
G1 edge-origin: [FAIL] — pre-narrative best edge is +0.03% (Under 22.5) and every other
market is negative; A-side ML is -3.98% at the executable 1.71 vs min 1.884. Nothing
reaches even the 3% probe band. The ONLY route to a Cobolli edge is adding the -4.5pp
Hanfmann hangover haircut, which is a fatigue adjustment and is forbidden from
creating the staked edge.
G2 consensus: [tier: n/a — no bet] — ML/market/Pinnacle agree A 57-60%; ELO dissents at
52.7%; calibrated sim sits at 55.7%. Broad consensus with the price = classic no-edge.
G3 fatal-risk: [none — no bet] — margin numbers encoded via the sim calibration rather
than asserted; Pinnacle agrees with them, so no unencodable risk to flag.
═══ VERDICT: PASS ═══
The interesting feature of this match is real but unbettable. Hanfmann carries a genuine
extreme fatigue spot (3-set win yesterday, age 34, 4 matches in 14 days), which is exactly
the kind of signal that would justify backing Cobolli — except the market has already
priced Cobolli at 1.71 on the exchange, which demands 59.7% while every trustworthy
probability estimate sits at 52.7–58%. Buying a fatigue narrative at a price that already
assumes it is how the audited losses were made. On the other side, Hanfmann at 2.32 is
within 0.1% of fair, and the qualitative case for him (match-sharp, already through a
round on this surface, facing a 20-day-idle opponent arriving off clay) is precisely why
his price is not longer. The calibrated distribution agrees with Pinnacle on the handicap
to within 0.3pp and the sharps contradict my only non-negative total. No edge in any
market — pass.