Appearance
Shot dictionary
A taxonomy of terms in match.json and player_stats.
Shot types
| Type | Meaning | Counted in |
|---|---|---|
serve | The shot that starts a rally. | serve_shots |
drive | A groundstroke, hit after the ball bounces. | drive_shots |
volley | A ball hit before it bounces. | volley_shots |
lob | A high ball played over the opponents. | lob_shots |
overhead | A ball hit above the head. A drive, volley or lob hit with the arm raised also counts as an overhead. | overhead_shots |
Every shot is also a forehand or a backhand (fh_count, bh_count). dominant_hand is left or right, whichever hand played more of the player's shots.
Subtypes
An overhead gets its subtype from the ball, not from the stroke. The speed thresholds are percentiles of the same match's overhead speeds, leaving out bajadas, so they adapt to the level of play. With fewer than three measured overheads the thresholds are 55 and 80 km/h.
| Subtype | Of | Rule | Counted in |
|---|---|---|---|
bajada | overhead | The ball came off the glass behind the hitter before the shot. | bajada_shots |
smash | overhead | The fastest possible overhead shot. At or above 80th percentile of the match's overhead speeds. | smash_shots |
vibora | overhead | The most common overhead shot. A fast shot but with some control, between the 60th and 80th percentiles. | vibora_shots |
bandeja | overhead | A slower defensive overhead shot. | bandeja_shots |
| (none) | overhead | Could not be categorized. | overhead_shots only |
chiquita | drive | A tight drive landing within 3.5 m of the net. | chiquita_shots |
Subtype counts are part of their type's count: the four overhead subtypes are included in overhead_shots, and chiquita_shots is included in drive_shots.
Outcomes
At most one shot per rally carries the deciding label. An assist can sit on the shot before it.
| Label | Meaning | Point goes to | Counted in |
|---|---|---|---|
winner | The ball's first bounce landed in the opponents' court and they did not return it. | The hitter | winner_shots |
error | The shot lost the point: into the net, out, onto the glass before bouncing on the other side, bouncing on the hitter's own side, or the hitter was close enough to make a return but did not. | The opponents | error_shots |
bad_serve | A fault: the serve missed the diagonal service box, or hit the side fence after bouncing. | The receiving pair if it’s the second serve. Re-serve otherwise. | bad_serve_shots |
A trained model picks each rally's deciding shot and labels it winner, error or bad_serve, using the ball's bounces, its wall and net contacts, and where the players stand.
match.json counters
Volume and outcomes
| Field | Counts |
|---|---|
n_shots | Every detected stroke by the player. |
winner_shots, error_shots, assist_shots, bad_serve_shots | Shots with that outcome label. |
short_rally_won | winner or assist on shots 1 to 5 of a rally. |
long_rally_won | winner or assist on shot 10 or later. |
Per shot type
| Field | Counts |
|---|---|
drive_shots, volley_shots, lob_shots, overhead_shots | Shots of that type. |
vibora_shots, bandeja_shots, smash_shots, bajada_shots, chiquita_shots | Shots with that subtype. |
drive_winner_shots, volley_winner_shots, overhead_winner_shots, vibora_winner_shots, bandeja_winner_shots, smash_winner_shots, bajada_winner_shots | Shots of that kind labelled winner or ****assist. assist is an internal debugging label not meant to be used for statistics. |
drive_error_shots, volley_error_shots, overhead_error_shots, vibora_error_shots, bandeja_error_shots, smash_error_shots, bajada_error_shots | Shots of that kind labelled error. |
lob_points_lost_after | Lobs that were an error, or that the opponents won the point with on the next shot. |
Serve and return
The serve is the first shot of a rally and the return is the second.
| Field | Counts |
|---|---|
serve_shots | Rallies the player started. |
serve_valid_first_serve_shots | First serves that were not a fault. |
serve_double_faults | A fault on the serve right after a fault from the same side. |
serve_winner_shots | Rallies the server's pair won, credited to the server. This is points won on serve, not aces. |
serve_error_shots | Rallies the server's pair lost. |
serve_second_serve_winner_shots | Rallies won on a second serve. |
return_shots | Returns played. |
return_winner_shots, return_error_shots | Rallies the returner's pair won or lost. |
serve_first_in_percentage | Legal first serves divided by first attempts, as a percentage. |
serve_first_speed_avg_kmh, serve_second_speed_avg_kmh | Mean speed of first and second attempts. |
serve_aces | Legal serve winners with no return. |
Attack and defence
A pair is attacking while the AI places it in the attacking zone near the net.
| Field | Counts |
|---|---|
attack_threat_success, attack_threat_failure | Volleys and overheads followed, within the next two shots, by a winner or assist while the same pair still held the attacking position, or not. |
volley_attack_retained, volley_attack_lost, and the same for vibora and bandeja | Shots of that kind hit while attacking, after which the pair kept, or lost, the attacking position over the next two shots. |
lob_counter_attack_success, lob_counter_attack_failure, and the same for drive and chiquita | Shots of that kind hit while defending, after which the pair took the attacking position within the next two shots, or did not. |
attack_possession_pair_shots, defence_possession_pair_shots | Shots hit while the player's pair was attacking or defending. |
attack_possession_winners, attack_possession_errors, defence_possession_winners, defence_possession_errors | Winners (including assists) and errors hit while attacking or defending. |
attack_possession_segments | Times the player's pair took the attacking position, credited to the player whose shot started it. |
attack_possession_converted_segments | Of those, the ones the pair turned into a won point within two shots. |
counter_attack_opportunities, counter_attack_success | Credited to a defending player when the opponents take the attacking position; a success when the player's pair takes it back within three shots. |
net_points_won | Points won when the player finished in the attacking zone. null when no point outcome was resolved. |
net_approach_success_percentage | Approaches to the attacking zone that won the point, as a percentage. |
Speed, depth and movement
| Field | Meaning |
|---|---|
avg_speed_kmh, max_speed_kmh, p95_speed_kmh | Speed of the player's shots with a measured speed, in km/h. |
overhead_speed_avg, overhead_speed_max, volley_speed_avg, drive_speed_avg, drive_speed_max | The same for one shot type. |
vibora_speed_avg, bandeja_speed_avg, smash_speed_avg, bajada_speed_avg, chiquita_speed_avg, smash_speed_max | The same for one subtype. |
lob_depth | Mean distance in metres from the net to where the player's lobs first bounced, leaving out lobs that lost the point. |
lob_height_avg_m | Mean highest point of the player's lobs, in metres. |
chiquita_depth | Mean distance in metres from the net to where the player's chiquitas first bounced. |
shots_with_opponent_movement, shots_forcing_movement | Shots after which the opponents' movement was measured, and those after which an opponent moved 4 m or more. |
offensive_seconds, defensive_seconds, neutral_seconds | Time in rallies spent attacking, defending or in neither position. |
left_seconds, right_seconds, total_seconds | Time in rallies on the left and right side of the court, and in total. |
distance_run_meters | Distance covered during rallies, modelled from video rather than measured by a wearable. |
Fields set to -1, such as consistency, shot_quality, attack, physicality, court_coverage and clutch_score, are placeholders; ignore them. Missing or null values are not zero, and older recordings may omit newer fields.