mcpField
M
mlb-player-analyzer

mlb-player-analyzer

github.com/lyndonkl数据与数据库18744 次安装9 周前更新
代码仓库

关于 mlb-player-analyzer

用于评估 MLB 打者和投手的技能,综合表现、对阵和角色信号。它将有来源的数据及当日赛况整理为带置信度的结构化文件,辅助阵容与串流决策。

主要功能

  1. 01收集球员数据和比赛背景
  2. 02评估打者状态、对阵与上场机会
  3. 03评估投手串流价值与风险
  4. 04跟踪回归信号和角色确定性
  5. 05生成注明来源的信号文件

适用场景

  1. 01为每日阵容选择打者
  2. 02评估先发投手的串流价值
  3. 03判断后援投手的救援角色确定性
  4. 04识别潜在买入或卖出信号

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lyndonkl/claude --skill mlb-player-analyzer

安装后在 Claude Code 中输入/mlb-player-analyzer确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

resources/
methodology.md
template.md
resources/evaluators/
rubric_mlb_player_analyzer.json

详细介绍

MLB 球员分析器

目录

示例

场景:分析击球手 Junior Caminero(TB 三垒手),今日对手为 BOS,先发投手为 Brayan Bello(右投),球场为 Fenway,微风。

从网络搜索汇总的输入:

  • 近 15 天 xwOBA:.410,赛季 xwOBA 为 .355(Baseball Savant)
  • Bello 2026 年 K/9:8.1,xFIP 4.05,对阵右打者的 wOBA 为 .335(FanGraphs)
  • Fenway 球场因子:得分 103,本垒打 105(FanGraphs 球场因子)
  • Caminero 对阵右投的 wOBA:.360(FanGraphs 分拆数据)
  • 天气:62F,8mph 风从左外野吹向中外野(RotoWire)
  • 打序:确认担任第 3 棒(MLB.com 首发阵容)
  • 赛季实际 wOBA 为 .340,xwOBA 为 .370 -> 运气不佳 +.030

信号计算:

信号值简要解读
form_score66滚动 xwOBA 比赛季基准高 15%
matchup_score58球场条件不错,先发投手中性,微风略有助益
opportunity_score78第 3 棒,预计约有 4.6 次打席
daily_quality66START 档(>=60)
regression_index+15运气不佳,是买入时机
obp_contribution62预计上垒率 .355 x 4.6 次打席
sb_opportunity35Bello 牵制跑者能力一般,BOS 捕手阻杀率 28%,Caminero 冲刺速度 26.5 ft/s
role_certainty100已发布确认阵容

给阵容优化器的建议:daily_quality = 66 -> 首发。regression_index = +15 表明无需因近期低迷的噪声而将其按在替补席上。

投手反例(投手先发):Bowden Francis(TOR)客场对阵 COL。daily_quality 替换为 streamability_score。Coors 会严重拉低 streamability_score,无论原始球威如何;技能评估会给出 qs_probability 约 28、k_ceiling 约 40、era_whip_risk 约 82 -> streamability_score 约 32(低于 70 的门槛 -> 坐板凳 / 不要串流)。

工作流

复制此清单并跟踪进度:

MLB Player Analysis Progress:
- [ ] Step 1: Classify player (hitter vs pitcher; SP vs RP)
- [ ] Step 2: Collect season + 15-day performance (Savant, FanGraphs)
- [ ] Step 3: Collect today's context (opp SP/hitters, park, weather, lineup)
- [ ] Step 4: Compute normalized component scores
- [ ] Step 5: Compute composite signals (daily_quality or streamability_score)
- [ ] Step 6: Check regression_index and role_certainty
- [ ] Step 7: Validate against rubric and emit signal file

步骤 1:判定球员类型

确定角色:打者(任意场上位置的球员)、SP(先发投手)、RP(中继投手、终结者或布局投手)。不同角色的信号集不同。若球员具备双重资格(双向球员、开场投手 + 长中继),请参阅 resources/methodology.md 中的角色判定规则。

  • 确认球员今天的角色:球员是否在今天的阵容中?SP 是否出现在今天的可能先发投手名单中?
  • 如果是 RP:该 RP 是负责救援的 RP,还是中继中段的 RP?需要查询终结者深度名单。

步骤 2:收集表现数据

通过网页搜索查找主要来源。每个 URL 都要加入信号文件的 source_urls: 列表。

  • Baseball Savant 球员页面:赛季 xwOBA、近 15 天 xwOBA、xBA、击球初速达标率、强击率、冲刺速度(打者);xERA、挥空率、追打率、CSW(投手)
  • FanGraphs 球员页面:ATC 预测(本赛季剩余时间的比率统计)、拆分选项卡(对阵 LHP / 对阵 RHP)
  • 如果搜索未找到某项指标:记录搜索尝试,将 confidence: 0.3 设为置信度,并在红队字段中注明缺失项

具体 URL 格式请参阅 resources/data-cheatsheet。

步骤 3:收集今日比赛背景信息

  • 对方 SP(来自 MLB.com 可能先发投手名单,或已生成的 matchup-analyzer 信号)
  • 球场系数(来自 FanGraphs 球场系数,或 matchup-analyzer 的 park_hitter_factor / park_pitcher_factor)
  • 天气(来自 RotoWire 天气预报,或 matchup-analyzer 的 weather_risk)
  • 已确认的打序位置(来自 MLB.com 先发阵容;通常在赛前约 2-3 小时发布)
  • 如果存在今天比赛的 matchup-analyzer 信号文件,请使用其中的信号——不要重新推导

步骤 4:计算归一化的组成分数

所有原始统计数据都根据该信号框架转换为 0-100(单极)或 +/-100(双极)。各公式请参阅 resources/methodology.md。

  • 打者:form_score、matchup_score、opportunity_score(daily_quality 的组成部分)
  • 打者:regression_index、obp_contribution、sb_opportunity、role_certainty
  • 投手:qs_probability、k_ceiling、era_whip_risk
  • 投手 RP:save_role_certainty

步骤 5:计算综合信号

  • 打者主要指标:daily_quality = 0.35 * form_score + 0.40 * matchup_score + 0.25 * opportunity_score
  • 投手 SP 主要指标:streamability_score = 0.40 * qs_probability + 0.30 * k_ceiling + 0.30 * (100 - era_whip_risk)
  • 投手 SP 周度指标:two_start_bonus(来自 FantasyPros 两次先发页面的布尔值)

步骤 6:检查回归和角色

  • regression_index = clamp((xwOBA - wOBA) * 500, -100, +100)。正值 = 运气不佳(买入)。负值 = 运气较好(卖出 / 回避)。
  • role_certainty(打者):100 = 已确认进入今天的阵容,70 = 随队记者认为可能上场,40 = 左右打者轮换尚不确定,0 = 未上场或受伤
  • save_role_certainty(RP):100 = 根据 RotoBaller 确认为固定终结者,50 = 轮流担任,20 = 第 7 局投手

步骤 7:验证并生成信号

常见模式

模式 1:连胜中的打者(利好兑现时卖出)

  • 简介:滚动 15 天的 wOBA 远高于 xwOBA(实际表现超出预期)
  • 信号特征:form_score 较高(>=70),regression_index 为负数(例如,-25)
  • 解读:当前产出受 BABIP 助力,且没有得到 Statcast 击球质量数据的支持。不要过度看重近期数据。
  • 发送给阵容优化器的操作建议:在心里将 daily_quality 下调约 5 分;如果用户正在考虑高位卖出,则标记给弃权线分析师

模式 2:击球强劲但状态低迷的打者(买入窗口)

  • 简介:滚动 15 天的 wOBA 低于赛季平均值,但 xwOBA 仍然强劲(>=赛季 xwOBA)
  • 信号特征:form_score 偏低,regression_index 为正数(>=+20),barrel% 仍然不错
  • 解读:这是运气不佳的低迷期。潜在击球质量依然在线。继续让他上场。
  • 操作:保持按计算得出的 daily_quality 权重;将正向回归标记给类别策略师(这名球员下周就会爆发)

模式 3:在不利球场进行两场先发的投手

  • 简介:本计分周有两场先发的 SP,其中一场在 COL / CIN / BOS
  • 信号特征:two_start_bonus = true,但其中一场先发的 era_whip_risk >= 70
  • 解读:出场量有助于获得 K 和 QS,但在 Coors 崩盘可能会让本周的 ERA/WHIP 一败涂地
  • 操作:将两场先发分别作为独立的投手信号发出,各自包含 streamability_score;由串流策略师决定是否为了出场量接受不利球场

模式 4:处于多人轮换或角色不确定的终结者

  • 简介:RP 有救援机会,但经理表示会“轮流安排”或“根据对阵情况安排”
  • 信号特征:save_role_certainty <= 50,k_ceiling 尚可,era_whip_risk 较低
  • 解读:只有在能拿到救援成功时,留在阵容中才有价值。比率数据很出色,但幻想棒球类别(SV)表现不稳定。
  • 操作:在信号正文中明确注明。弃权线分析师会据此决定愿意出多少 FAAB。

防护栏

  1. 每个事实都要注明来源。 每个数值输入(xwOBA、预计打席数、球场因子、CS%)都必须能追溯到 source_urls: 中的某个 URL。没有来源的说法无法通过评分标准中的“来源引用”项。

  2. 在本联盟中,上垒率比打击率更重要。 我们的打击类别是 R/HR/RBI/SB/OBP(而非 AVG)。计算 obp_contribution 时,以及在 form_score 中选择要加权的率值统计时,使用 OBP 或 wOBA(包含保送),绝不能只用 AVG。保送率是一个特征,不是脚注。

  3. 在本联盟中,优质先发比胜场更重要。 对于 qs_probability,计算投满 6+ 局且自责分不超过 3 的概率,而不是获胜的概率。忽略牛棚比赛中的先发投手和开场投手——按定义,他们获得的 QS 积分为零。

  4. 使用 ATC 预测,而不是只用 Steamer。 FanGraphs ATC 是共识集成预测,也是最准确的单一来源。可以参考 Steamer 和 ZiPS 进行交叉验证,但如果不使用 ATC,必须注明原因。

  5. 搜索失败时妥善降级。 如果某个来源无法访问,不要编造数字。将该组件的 confidence 设为 0.3,并在红队的 note 字段中记录这一缺口。若置信度 < 0.4,红队流程会升级处理。

  6. 不要重新推导对阵分析器的信号。 如果今天比赛对应的 signals/YYYY-MM-DD-matchup.md 存在,直接使用其中的 opp_sp_quality、park_hitter_factor、park_pitcher_factor、weather_risk、bullpen_state。重新推导会浪费运行时间,并可能导致不同 Agent 之间出现不一致。

  7. 为每个信号添加时间戳。 使用 computed_at: YYYY-MM-DDTHH:MMZ。晨间简报调用的数据是最新的;下午的重新检查(阵容公布后)会以更高的 role_certainty 取代晨间信号。

  8. 检查每个数字是否在范围内。 0-100 的信号不得超过 100 或低于 0。+/-100 的信号(regression_index)必须限制在该范围内。mlb-signal-emitter 验证器会拒绝超出范围的值——调用前请先检查。

  9. 正文使用通俗英语。 frontmatter 面向机器;正文必须避免术语,或在面向最终用户时对术语作出解释。例如,“xwOBA” -> “根据击球的力度和角度估算的预期进攻产出,无论球是否被防守球员接住”。

快速参考

复合公式(推导过程请参阅 resources/methodology.md):

daily_quality       = 0.35 * form_score + 0.40 * matchup_score + 0.25 * opportunity_score
streamability_score = 0.40 * qs_probability + 0.30 * k_ceiling + 0.30 * (100 - era_whip_risk)
regression_index    = clamp((xwOBA - wOBA) * 500, -100, +100)

行动阈值(提供给 lineup-optimizer / streaming-strategist):

信号START / STREAM中性SIT / FADE
daily_quality(打者)>= 6045-59< 45
streamability_score(SP)>= 7055-69< 55
save_role_certainty(RP)>= 7040-69< 40
regression_index>= +25(买入)-24..+24<= -25(卖出)

来源优先级(始终按此顺序尝试):

需求首选来源备用来源
预测FanGraphs ATCSteamer、ZiPS、FantasyPros
Statcast / xwOBA / xERABaseball Savant--(无替代来源)
阵容 / 预计先发投手MLB.comRotoWire、FanGraphs Roster Resource
球场系数FanGraphs park factorsBaseball-Reference park factors
天气RotoWire weather forecastGoogle 天气 + MLB.com 比赛页面
终结者深度RotoBaller closer chartsPitcher List、Closer Monkey
一周两次先发FantasyPros two-start plannerFanGraphs probables grid

关键资源:

所需输入:

  • 球员姓名(准确姓名;如有歧义,请附上球队缩写,例如 “Will Smith (LAD)”)
  • 球员所属 MLB 球队(3 个字母的缩写)
  • 今日对手先发投手(如未知,技能将通过网络搜索 MLB.com probables)
  • 今日球场 / 天气(如有,请使用 matchup-analyzer 信号文件中的信息)

生成的输出:

  • signals/YYYY-MM-DD-player-<lastname>-<firstinitial>.md(每天分析的每位球员对应一个文件)
  • 根据 signal-framework.md 填入所有打者或投手信号
  • 正文包含面向最终用户的通俗易懂的说明

评论

支持 Markdown