关于 mlb-player-analyzer
用于评估 MLB 打者和投手的技能,综合表现、对阵和角色信号。它将有来源的数据及当日赛况整理为带置信度的结构化文件,辅助阵容与串流决策。
主要功能
- 01收集球员数据和比赛背景
- 02评估打者状态、对阵与上场机会
- 03评估投手串流价值与风险
- 04跟踪回归信号和角色确定性
- 05生成注明来源的信号文件
适用场景
- 01为每日阵容选择打者
- 02评估先发投手的串流价值
- 03判断后援投手的救援角色确定性
- 04识别潜在买入或卖出信号
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lyndonkl/ claude --skill mlb-player-analyzer安装后在 Claude Code 中输入/mlb-player-analyzer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
resources/methodology.mdtemplate.mdresources/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_score | 66 | 滚动 xwOBA 比赛季基准高 15% |
| matchup_score | 58 | 球场条件不错,先发投手中性,微风略有助益 |
| opportunity_score | 78 | 第 3 棒,预计约有 4.6 次打席 |
| daily_quality | 66 | START 档(>=60) |
| regression_index | +15 | 运气不佳,是买入时机 |
| obp_contribution | 62 | 预计上垒率 .355 x 4.6 次打席 |
| sb_opportunity | 35 | Bello 牵制跑者能力一般,BOS 捕手阻杀率 28%,Caminero 冲刺速度 26.5 ft/s |
| role_certainty | 100 | 已发布确认阵容 |
给阵容优化器的建议: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:验证并生成信号
- 填写 resources/template.md 的 frontmatter 和表格
- 根据 resources/evaluators/rubric_mlb_player_analyzer.json 评分。目标平均分 >= 3.5
- 每个数值信号都必须包含
confidence和至少一个source_url - 调用
mlb-signal-emitter(验证);如果失败,记录到tracker/decisions-log.md
常见模式
模式 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。
防护栏
-
每个事实都要注明来源。 每个数值输入(xwOBA、预计打席数、球场因子、CS%)都必须能追溯到
source_urls:中的某个 URL。没有来源的说法无法通过评分标准中的“来源引用”项。 -
在本联盟中,上垒率比打击率更重要。 我们的打击类别是 R/HR/RBI/SB/OBP(而非 AVG)。计算
obp_contribution时,以及在form_score中选择要加权的率值统计时,使用 OBP 或 wOBA(包含保送),绝不能只用 AVG。保送率是一个特征,不是脚注。 -
在本联盟中,优质先发比胜场更重要。 对于
qs_probability,计算投满 6+ 局且自责分不超过 3 的概率,而不是获胜的概率。忽略牛棚比赛中的先发投手和开场投手——按定义,他们获得的 QS 积分为零。 -
使用 ATC 预测,而不是只用 Steamer。 FanGraphs ATC 是共识集成预测,也是最准确的单一来源。可以参考 Steamer 和 ZiPS 进行交叉验证,但如果不使用 ATC,必须注明原因。
-
搜索失败时妥善降级。 如果某个来源无法访问,不要编造数字。将该组件的
confidence设为 0.3,并在红队的note字段中记录这一缺口。若置信度 < 0.4,红队流程会升级处理。 -
不要重新推导对阵分析器的信号。 如果今天比赛对应的
signals/YYYY-MM-DD-matchup.md存在,直接使用其中的opp_sp_quality、park_hitter_factor、park_pitcher_factor、weather_risk、bullpen_state。重新推导会浪费运行时间,并可能导致不同 Agent 之间出现不一致。 -
为每个信号添加时间戳。 使用
computed_at: YYYY-MM-DDTHH:MMZ。晨间简报调用的数据是最新的;下午的重新检查(阵容公布后)会以更高的role_certainty取代晨间信号。 -
检查每个数字是否在范围内。 0-100 的信号不得超过 100 或低于 0。+/-100 的信号(regression_index)必须限制在该范围内。
mlb-signal-emitter验证器会拒绝超出范围的值——调用前请先检查。 -
正文使用通俗英语。 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(打者) | >= 60 | 45-59 | < 45 |
| streamability_score(SP) | >= 70 | 55-69 | < 55 |
| save_role_certainty(RP) | >= 70 | 40-69 | < 40 |
| regression_index | >= +25(买入) | -24..+24 | <= -25(卖出) |
来源优先级(始终按此顺序尝试):
| 需求 | 首选来源 | 备用来源 |
|---|---|---|
| 预测 | FanGraphs ATC | Steamer、ZiPS、FantasyPros |
| Statcast / xwOBA / xERA | Baseball Savant | --(无替代来源) |
| 阵容 / 预计先发投手 | MLB.com | RotoWire、FanGraphs Roster Resource |
| 球场系数 | FanGraphs park factors | Baseball-Reference park factors |
| 天气 | RotoWire weather forecast | Google 天气 + MLB.com 比赛页面 |
| 终结者深度 | RotoBaller closer charts | Pitcher List、Closer Monkey |
| 一周两次先发 | FantasyPros two-start planner | FanGraphs probables grid |
关键资源:
- resources/template.md:信号文件模板,包含 YAML frontmatter、打者和投手信号表、通俗易懂的正文,以及完整示例
- resources/methodology.md:来源 URL 速查表、各信号的归一化公式、复合指标计算、回归计算方法、置信度分配规则
- resources/evaluators/rubric_mlb_player_analyzer.json:包含 9 项标准的评分标准
所需输入:
- 球员姓名(准确姓名;如有歧义,请附上球队缩写,例如 “Will Smith (LAD)”)
- 球员所属 MLB 球队(3 个字母的缩写)
- 今日对手先发投手(如未知,技能将通过网络搜索 MLB.com probables)
- 今日球场 / 天气(如有,请使用 matchup-analyzer 信号文件中的信息)
生成的输出:
signals/YYYY-MM-DD-player-<lastname>-<firstinitial>.md(每天分析的每位球员对应一个文件)- 根据 signal-framework.md 填入所有打者或投手信号
- 正文包含面向最终用户的通俗易懂的说明