133 lines
4.3 KiB
Markdown
133 lines
4.3 KiB
Markdown
# CRITICAL BUG FIX: Wrong Fielder Columns
|
|
|
|
## The Bug
|
|
|
|
The original implementation used **lineup position columns** (`l7`, `l8`, `l9`) instead of **fielder position columns** (`f7`, `f8`, `f9`).
|
|
|
|
### What This Meant
|
|
|
|
**WRONG (Original Code):**
|
|
```python
|
|
for of_pos, a_col, po_col, fielder_col in [
|
|
('LF', 'a7', 'po7', 'l7'), # l7 = LINEUP SPOT 7 (7th batter)
|
|
('CF', 'a8', 'po8', 'l8'), # l8 = LINEUP SPOT 8 (8th batter)
|
|
('RF', 'a9', 'po9', 'l9') # l9 = LINEUP SPOT 9 (9th batter)
|
|
]:
|
|
```
|
|
|
|
**This calculated arm strength for:**
|
|
- The 7th hitter in the lineup (regardless of defensive position)
|
|
- The 8th hitter in the lineup (regardless of defensive position)
|
|
- The 9th hitter in the lineup (regardless of defensive position)
|
|
|
|
**CORRECT (Fixed Code):**
|
|
```python
|
|
for of_pos, a_col, po_col, fielder_col in [
|
|
('LF', 'a7', 'po7', 'f7'), # f7 = FIELDER at position 7 (Left Field)
|
|
('CF', 'a8', 'po8', 'f8'), # f8 = FIELDER at position 8 (Center Field)
|
|
('RF', 'a9', 'po9', 'f9') # f9 = FIELDER at position 9 (Right Field)
|
|
]:
|
|
```
|
|
|
|
**This calculates arm strength for:**
|
|
- The actual left fielder
|
|
- The actual center fielder
|
|
- The actual right fielder
|
|
|
|
## Impact of the Bug
|
|
|
|
### Why Known Strong Arms Weren't Found
|
|
|
|
**Ichiro Suzuki** (suzui001):
|
|
- **Wrong**: Looked for him batting 9th → NOT FOUND
|
|
- **Correct**: Found him at RF → 388 balls fielded, 10 assists
|
|
|
|
**Carl Crawford** (crawc002):
|
|
- **Wrong**: Looked for him batting 7th → NOT FOUND
|
|
- **Correct**: Found him at LF → 343 balls fielded, 3 assists
|
|
|
|
**Jim Edmonds** (edmoj001):
|
|
- **Wrong**: Looked for him batting 8th → NOT FOUND
|
|
- **Correct**: Found him at CF → 348 balls fielded, 6 assists
|
|
|
|
**Vladimir Guerrero** (guerv001):
|
|
- **Wrong**: Found him batting 9th with 0 assists
|
|
- **Correct**: Found him at RF → 264 balls fielded, 9 assists
|
|
|
|
### Why So Taguchi Showed Elite Stats
|
|
|
|
**So Taguchi** likely batted 7th in the lineup frequently, so:
|
|
- **Wrong**: His stats appeared under "LF" because he was the 7th batter
|
|
- **Correct**: Will now show his actual LF fielding performance
|
|
|
|
## Retrosheet Column Reference
|
|
|
|
### Lineup Columns (WRONG - Don't Use These)
|
|
- `l1` through `l9` = Player IDs for batting order positions 1-9
|
|
- `lf1` through `lf9` = Field position numbers for each batting order slot
|
|
|
|
### Fielder Columns (CORRECT - Use These)
|
|
- `f1` = Pitcher
|
|
- `f2` = Catcher
|
|
- `f3` = 1st Base
|
|
- `f4` = 2nd Base
|
|
- `f5` = 3rd Base
|
|
- `f6` = Shortstop
|
|
- `f7` = **Left Field** ✓
|
|
- `f8` = **Center Field** ✓
|
|
- `f9` = **Right Field** ✓
|
|
|
|
## Files Fixed
|
|
|
|
1. ✅ `defenders/retrosheet_arm_calculator.py`
|
|
- `calculate_position_baselines()` - Fixed fielder_col references
|
|
- `calculate_player_arm_rating()` - Fixed fielder_col references
|
|
- `calculate_of_arms_from_retrosheet()` - Fixed all_fielders collection
|
|
|
|
2. ✅ `test_retrosheet_arms.py`
|
|
- Fixed player IDs for validation (suzui001, crawc002, edmoj001)
|
|
- Fixed all fielder column references in helper functions
|
|
- Updated `get_player_arm_stats()`, `get_detailed_player_stats()`, `get_position_breakdown()`
|
|
|
|
## Expected Changes After Fix
|
|
|
|
### More Players Will Qualify
|
|
- Previously: Only players who batted 7th/8th/9th regularly
|
|
- Now: All outfielders who actually played LF/CF/RF
|
|
|
|
### Different Top Rankings
|
|
- Previously: Rankings based on batting order positions
|
|
- Now: Rankings based on actual defensive positions
|
|
|
|
### Known Strong Arms Should Appear
|
|
- Ichiro Suzuki (RF) - Legendary arm
|
|
- Carl Crawford (LF) - Speed/defense specialist
|
|
- Jim Edmonds (CF) - Gold Glove center fielder
|
|
- Vladimir Guerrero (RF) - Feared throwing arm
|
|
|
|
## Validation
|
|
|
|
Run the test script to verify:
|
|
```bash
|
|
python test_retrosheet_arms.py
|
|
```
|
|
|
|
**Expected:**
|
|
1. Ichiro, Crawford, Edmonds should all be found ✓
|
|
2. Their assist rates should match known strong arms ✓
|
|
3. Distribution should be more realistic ✓
|
|
4. ~150+ qualified outfielders (not just ~60 who bat 7-8-9) ✓
|
|
|
|
## Root Cause
|
|
|
|
**Misunderstanding of Retrosheet column naming:**
|
|
- Assumed `l7`/`l8`/`l9` meant "left field 7", "left field 8", "left field 9"
|
|
- Actually means "lineup spot 7", "lineup spot 8", "lineup spot 9"
|
|
- Should have used `f7`/`f8`/`f9` for "fielder 7", "fielder 8", "fielder 9"
|
|
|
|
---
|
|
|
|
**Fixed:** 2025-11-15
|
|
**Severity:** CRITICAL - All previous calculations were measuring wrong players
|
|
**Status:** Resolved - Now using correct fielder columns
|