All work02 / 07
Fédération Française de TennisEfrei Research LabParis, France
2026

HowSelf-supervised representation learning

CourtStyle

In pressKES 2026

Discovers playing styles no one labelled.

Self-supervised encoders find recurring serve and rally patterns in match records, and a validated language model describes them for coaches from measured evidence only.

  • 3 + 4serve and rally styles discovered without any style label
  • 0.748mean LLM-judge score of generated coach notes; 32 of 42 pass the rubric
  • 7 matchesheld out; the style ranking is preserved on all of them

Overview

The problem

Playing style lives in accumulated behaviour: hundreds of points per match, tens of thousands per season. Analyses usually fix their descriptors in advance and let the analyst or a supervised target define the groups, so what they find follows the chosen variables. What they deliver is a table of statistics that coaches must decode themselves.

What was missing

For racket-sport match records, learning a representation of style without style supervision was little studied. Contrastive learning raises a further question: a representation that separates records may capture which player it is rather than how that player behaves.

Architecture

RECORDSSELF-SUPERVISED ENCODERDISCOVERYPROFILINGINTERPRETATIONINPUTServe records29 features per server–match· public statisticsLEARNEDmHC Transformercolumn tokens · gated attention· SwiGLU · MoCo v3, 50ksynthetic → realPROCESSINGk-NN graph → Leidencosine k-NN graph · 3 servestylesPROCESSINGProfiles → evidencez-scored community means →identified statementsINPUTRally sequencesshot transitions · 93-dtokens · Hawk-Eye logsLEARNEDOrder-aware TransformerSimCLR objective +order-repulsion termPROCESSINGK-Means (k = 4)on normalised embeddings · 4rally stylesPROCESSINGProfiles → evidencez-scored community means →identified statementsLANGUAGE MODELQwen 2.5 32B +validatoronly measured statements inthe promptevery paragraph cites itsstatement IDsschema and comparison checks,re-prompt on failureOUTPUTStyle reportsnames and short descriptionsfor coachesPlayer identifiers and match outcomes stay outside the encoders;they are kept only as metadata for profiling and validation.Evaluation: Prometheus 2 judges each generated note against an FFT coach reference,scoped to the evidence the generator received.

Swipe to see the whole diagram →

Two record types, one four-stage pipeline: self-supervised encoding, community discovery, profiling and evidence-grounded interpretation.
Technical details
  • Serve data: 1,273 server–match records (926 matches, 87 players) from public US Open and Wimbledon statistics, 2016–2024; 41 raw columns reduced to 29. Held-out set: 42 Australian Open 2017 instances with coach notes.
  • Rally data: Roland-Garros 2021 Hawk-Eye logs supplied by the FFT, 31 matches, 7,059 rallies; 93-d tokens from 31 shot variables (current shot, next shot, difference); match-level split with 7 held-out matches.
  • Serve encoder: one token per column with a learned column-identity embedding, a [CLS] token, four blocks of gated multi-head attention and SwiGLU, manifold-constrained hyper-connections, no positional encoding.
  • Rally encoder: one token per shot transition, sinusoidal positions, four pre-norm Transformer blocks, [CLS] pooling.
  • Every solution is checked with silhouette, modularity and seed stability, and against rally length, match identity and point outcome, so the groups do not merely follow those variables.
  • Of three locally hosted open-weight models, Qwen 2.5 32B was the only one that satisfied every constraint, within two generations.

What I built

  1. 01

    One discovery protocol, two record types

    Serve statistics as tabular records and rallies as ordered shot transitions, each with an encoder whose attention axis matches its structure.

  2. 02

    Contrastive training without style labels

    MoCo v3 with feature-corruption views for serves (pre-trained on 50k synthetic records, then real); SimCLR with an order-repulsion term for rallies, so shot order cannot be ignored.

  3. 03

    Graph and centroid discovery

    Leiden communities on a cosine k-NN graph for serves; K-Means for rallies, where rally-length gradients would fragment a graph.

  4. 04

    Evidence-grounded reports

    Qwen 2.5 32B receives only identified, measured statements, must cite them, and is validated and re-prompted when a check fails.

Main results

3serve styles: Low-pace Body-spread, Mid-pace Wide-mix low-dispersion, High-pace T-precision1,273 server–match records
4rally styles, from Mid-Entry Groundstroke to Slow-Entry Extended5,593 rallies
0.748mean normalised Prometheus 2 score; 32 of 42 notes passagainst FFT coach references
Stablestyle ranking preserved on seven held-out matchesbootstrap 95% intervals overlap for every style
Serve styles: community means as z-scores against the population
CommunityCountStyleKey serve profileKey outcomes
C0484Low-pace Body-spreadAvg speed −0.92, Body share +0.35, Width var. +0.39Aces −0.45, 1st-serve pts won −0.16, Break pts faced +0.19, Break pts saved +0.10
C1514Mid-pace Wide-mix low-dispersionAvg speed +0.23, Wide share +0.20, Width var. −0.24Aces +0.17, Double faults +0.06, 1st-serve pts won +0.03, Break pts faced −0.02, Break pts saved +0.00
C2275High-pace T-precisionAvg speed +1.19, 1st-serve speed var. −0.82, T share +0.45, Min 1st +0.88Aces +0.47, 1st-serve pts won +0.23, 2nd-serve pts won −0.19, Break pts faced −0.28, Break pts saved −0.19
Rally styles: community means as z-scores; Δ is the change between consecutive shots
CommunityCountStyleKey rally profileKey outcomes
C01,809Mid-Entry GroundstrokeGroundstroke +0.07, Rally shot +0.07, Serve stroke −0.05, Shot duration −0.04Rally length +0.11, Duration +0.09, Played rate +0.02, Fault rate −0.00
C11,261Mid-Entry High-MoveResponse speed −0.13, Player distance Δ +0.09, Response duration +0.13, Opponent depth +0.09, Serve stroke +0.08Rally length −0.13, Duration −0.10, Break pts −0.06, Played rate +0.01
C21,193Fast-Entry DeceleratingShot speed +0.16, Backspin +0.19, Topspin −0.19, Serve stroke +0.12, Speed Δ −0.13, Spin rate Δ +0.11Fault rate +0.16, Played rate −0.22, Rally length −0.19, Duration −0.18
C31,330Slow-Entry ExtendedTopspin +0.14, Spin rate +0.13, Speed Δ +0.09, Response speed +0.09, Backspin −0.10, Serve stroke −0.07Played rate +0.16, Fault rate −0.15, Rally length +0.15, Duration +0.14, Break pts +0.08

Qualitative results

Demo

The discovered serve styles on the learned map, then held-out serve records and Roland-Garros rallies assigned to each style, with the measured profile and the verbatim generated description.

Limits and next steps

Results hold at the level of the record: a serve style groups server–match records and a rally style groups rallies, so neither yet shows that a player holds a stable style. Report evaluation measures agreement with coach references, not usefulness in match preparation. Next: player-level aggregation tested against a permutation null, and a study with practising coaches.

Beyond this project

Self-supervised discovery in any event log without labels, with language-model summaries constrained to measured evidence.

Research output

Paper

CourtStyle: Unified Self-Supervised Framework for Tennis Playing Style Discovery

Ahmed Jouini, Faten Chaieb-Chakchouk, Alex Loth

KES 2026, Procedia Computer Science, Elsevier

Proceedings forthcoming.

Code

Madou10-lab/CourtStyle

GitHub

Contact

Interested in the work?

I'm looking for AI research engineer roles in computer vision and video understanding, ideally in sports analytics, though not only. Ready to start a new journey.

Paris, France

jouiniahmed66@gmail.com Email me