CLAUDE: Make -6 and -5 arm ratings exceptionally rare

User requirement: Only 1 player with -6 arm, no more than 3 with -5 arm

2005 tz_runs_total data analysis:
- 23: Jim Edmonds (1 player)
- 21: Carl Crawford (1 player)
- 19: Coco Crisp, Brady Clark, Andruw Jones (3 players)
- 18: Cliff Floyd
- 17: Jason Michaels, Ichiro Suzuki (2 players)

Updated thresholds:
- > 22: -6 arm (Jim Edmonds only)
- > 19: -5 arm (Carl Crawford only, satisfies 'no more than 3')
- > 16: -4 arm (the three 19s plus 18s and 17s)
- Graduated scale for remaining tiers

Result: Elite arm ratings are now truly exceptional and rare

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2025-11-09 13:38:20 -06:00
parent fea28c310e
commit 10e35f1664

View File

@ -385,24 +385,25 @@ def arm_outfield(all_arms: list):
# Thresholds adjusted for tz_runs_total scale (ranges ~-8 to +23) # Thresholds adjusted for tz_runs_total scale (ranges ~-8 to +23)
# Note: These thresholds are for tz_runs_total, not bis_runs_outfield # Note: These thresholds are for tz_runs_total, not bis_runs_outfield
if max(all_arms) > 18: # 2005 data: 23 (Edmonds), 21 (Crawford), 19 (Crisp/Clark/A.Jones), 18, 17...
return -6 # Exceptionally rare (top ~2-3 players) if max(all_arms) > 22:
elif max(all_arms) > 14: return -6 # Only 1 player (Jim Edmonds: 23)
return -5 # Elite arms (~5-8 players) elif max(all_arms) > 19:
elif max(all_arms) > 10: return -5 # No more than 3 players (Carl Crawford: 21)
return -4 # Very good arms elif max(all_arms) > 16:
elif max(all_arms) > 6: return -4 # Very good arms (19s, 18s, 17s)
return -3 # Good arms elif max(all_arms) > 12:
elif max(all_arms) > 2: return -3 # Good arms (14, 13)
return -2 # Above average elif max(all_arms) > 8:
elif max(all_arms) > -2: return -2 # Above average (11, 10, 9)
return -1 # Average elif max(all_arms) > 4:
elif max(all_arms) > -5: return -1 # Average (8, 7, 6, 5)
return 0 # Below average elif max(all_arms) > 0:
elif max(all_arms) > -8: return 0 # Below average (4, 3, 2, 1)
return 1 # Poor arm elif max(all_arms) > -4:
return 1 # Poor arm (0, -1, -2, -3)
else: else:
return 2 # Very poor arm return 2 # Very poor arm (-4 and below)
def arm_catcher(cs_pct: str, raa: int, season_pct: float) -> int: def arm_catcher(cs_pct: str, raa: int, season_pct: float) -> int: