PHPMem v2.0.1
Version
1.6.45
Uptime
18 days 9 hours 58 minutes 24 seconds
Memory
Total
512MB
Used
12,33MB (2.41%)
Free
499,67MB
Keys
Current
13 424
Total (since start)
40 994
Evictions
0
Reclaimed
762
Expired Unfetched
0
Evicted Unfetched
0
Connections
Current
3 / 1 024 max
Total
245 885
Rejected
0
llm:8688ae7dff28797171fb87eaabfb2988ffca91ce56227f31523a5d915d1f2afd
Edit
Yes. **Court surface** is the most natural segmentation, and the data backs it up. Match round, tournament and rank band are useful secondary cuts.
## Surface: the primary segmentation
`raw.raw_kaggle` has a `Surface` column with four real values (Hard, Clay, Grass, Carpet). The four groups differ clearly in size, serve style and typical player rank:
| Surface | Rows | Avg aces | Avg double faults | Avg player rank |
|---|---|---|---|---|
| Hard | 117,571 | 5.88 | 2.97 | 311 |
| Clay | 107,650 | 3.38 | 2.81 | 361 |
| Grass | 9,479 | 7.57 | 3.17 | 151 |
| Carpet | 2,477 | 7.94 | 3.11 | 517 |
- **Serve behaviour:** Grass and carpet are fast surfaces, with about 7.6–7.9 aces per match. Clay is slow, at about 3.4 aces. Hard sits in between at about 5.9.
- **Field strength:** Grass matches have a much lower average rank number (151), meaning stronger players. Carpet has the highest (517). Carpet is also a tiny, largely historical slice with only 2,477 rows.
- **Size imbalance:** Hard and clay make up about 95% of the rows. Any model or comparison will be dominated by them, so treat grass and carpet results cautiously.
- **Gap to handle:** 28 rows have a blank surface. Exclude them or label them "unknown".
The same `Surface` field exists in `raw.return_kaggle` and `raw.serve_kaggle`, so the segmentation applies to serve and return statistics as well. The tables share no verified join key, so each one has to be segmented separately.
## Secondary segmentations
These come from the dataset's classifier columns. I did not profile them in this session.
- **Round (`Rd`, about 14 values):** early rounds versus finals. This shows whether form changes as a tournament progresses.
- **Tournament (about 3,963 distinct values):** too fine-grained to use directly. It is better rolled up into tournament tiers or grouped by surface.
- **Opponent and player rank (`Rk`, `vRk`):** continuous, so bucket them into bands such as top 10, top 50 and 100+. The serve and return profiles are built to be compared against opponents of different rank.
- **Time (`Date`, year):** season or era, for example the pre-2013 carpet era versus recent years. `serve_kaggle` goes back to 2006, while the other two tables start in 2013.
- **Player (`Name`):** `raw.players_man_` has 462 players, which allows career-level or match-count tiers.
A good starting framework is **Surface × Round**, optionally with a rank band. The gold tables `raw_kaggle_by_Surface_Rd`, `return_kaggle_by_Surface_Rk` and `serve_kaggle_by_Surface_Rd` already hold these cuts pre-aggregated.