Skip to main content

T1: Right Hardware, Wrong Sign

Trevor McCormick
Data Product @ Disney+

That clip up top: match point, Shapovalov d. Nadal, Montréal 2017 — the point that made Shapovalov — with our frozen pipeline's string assembling on the top line and the human Match Charting Project string below it. The machine ends the point with Shapovalov flat on his back and most of its letters still ?. The human wrote f+1*. There's a gap to close.

The rule for this session was written before it started: zero constants change between the dev reel and the scorecard. Every number below is out-of-sample.

The free stages transferred — one better than at home

Stabilization, plates, and player tracking ran on the night footage with nothing changed but paths. Far-player coverage is actually better at night — 100% median versus 96% on the dev reel, because floodlights kill the hard shadows that made the daytime plates lie.

One new impostor, though — lesson #4 in the series. This court's ballkids crouch at the net posts, inside the far half, and the largest-component player pick grabbed them: serve-toss windows opened above ballkids' heads, and once above an umpire chair. The fix is geometry, not tuning: a server stands at his baseline, so the bootstrap now gates each frame's player box by foot position in court meters.

The answer key grades the serve detector

Serve detection: 11 of 25 clips confident (the dev reel gave 40 of 60). But now the grading is out of my hands — MCP knows the server for every point, and changeover parity (swap after odd games, every six tiebreak points) maps identity to court end once you know where Nadal started. The data settles that itself: "Nadal starts far" explains 11 of 14 confident calls; the alternative explains 3. Nadal started far.

Serve-end accuracy on confident calls: 11/14, 79% — against the dev reel's frame-checked 6/8. Two of the three misses were already flagged low-margin by the detector itself.

The spend-guard holds

Ball tracking stayed behind the eyeball gate: 25 dry-run prompt boxes, 13 approved — nine on the first pass, three more after the ballkid gate, one mover fallback that found a real streak. Twelve sent, $0.85, eleven usable tracks. The one weak accept I talked myself into ("ball blur at the racquet, probably") died at 12 frames. The eyeball grade is now 6-for-6 across both reels as a predictor of what SAM returns. It stays.

The scorecard

Eleven points, frozen pipeline, graded against the human chart:

server end       7/11
rally length ±1 7/11
serve zone 1/2
letters exact 2/11
letters MIRRORED 9/11

The headline is the last line, and it's the best bad result of the project. The right-handed assumption — written down as a liability back in M3 and left frozen on purpose — mirrors 9 of 11 letters against two left-handers. A broken contact-side detector would flip a coin. A mirrored one is correct hardware wearing the wrong sign: the geometry finds the contact side reliably; the label on that side is what's inverted. One config line per match — player handedness — turns 2/11 into ~9/11 at the next freeze. That's the cheapest seven-point improvement this project will ever buy.

The rest of the misses read honestly too. The serve-override vote that heroically fixed point_59 on the dev reel wronged two calls here — thin far-end tracks make touch votes lie harder than serve priors, so the vote weights are a dev-reel artifact worth revisiting. And rally length suffers from a definitional gap: the clips contain fault serves, which the detector charts as play. MCP codes the fault and then the played point; we window from the first confident serve and catch both.

The verdict

An automated system charted eleven points of a professional tennis match from broadcast video and was graded against a human chart of the same points — that's the thing this project set out to test, and now there's a number attached instead of an impression. The number is bad in the most encouraging way available: the biggest error term has a sign, a cause, and a one-line fix.

Test-set discipline held. Session cost $0.85; project total ~$3.65 of the $9 budget. Next freeze: handedness in the config, and then Federer–Haase — the control match — gets to say whether any of this was ever about lefties at all.