These are historical per-period rates and splits for team:SF, not a prediction and not an edge claim. descriptive_only: true.
as of 2025-09-28| Pitch type | N pitches | P10 mph | P50 mph | P90 mph |
|---|---|---|---|---|
| FF | 5841 | 92.2 | 94.3 | 97.2 |
| SI | 5118 | 90.9 | 93.5 | 97.0 |
| SL | 3914 | 83.6 | 87.1 | 90.0 |
| CH | 2637 | 83.6 | 86.4 | 88.7 |
| ST | 1914 | 80.6 | 84.0 | 85.7 |
| CU | 1649 | 75.8 | 77.9 | 81.8 |
sample floor
An entity earns a descriptive card only after clearing a minimum-sample floor, so rates are not read off tiny samples. The floor for this pack is 30 real MLB franchises; AL/NL All-Star-Game placeholder codes excluded from the 32 raw team codes in the pull. team = PITCHING team, derived as home_team when inning_topbot=='Top' else away_team (defense is whichever side is not currently batting). no per-pitch swing/miss field in this pull (no `description` column; `type` merges called+swinging+foul into one S bucket, `des` only fires on PA-ending pitches) -- outcome mix (ball/strike/in-play) substitutes. Entities below the floor are deliberately left off -- we do not print rates we cannot stand behind.