mlb-category-state-analyzer について
Yahoo Fantasy MLBのH2Hカテゴリ対戦を分析するスキルです。シミュレーション確率と現在の試合状況を組み合わせ、カテゴリごとの注力・維持・放棄の方針を作成します。
主な機能
- 01シミュレーション確率とカテゴリ状況の統合
- 02順位・圧力・到達可能性の算出
- 03カテゴリの順位付けと方針作成
- 04出典とシミュレーション情報付きシグナルの生成
活用シーン
- 01週の途中で注力するカテゴリの選定
- 02残り試合数を踏まえた逆転可能性の評価
- 03ラインアップ・ウェイバー・ストリーミング判断への情報提供
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ lyndonkl/ claude --skill mlb-category-state-analyzerインストール後、Claude Code で/mlb-category-state-analyzerを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
resources/methodology.mdtemplate.mdresources/evaluators/rubric_mlb_category_state_analyzer.json詳細
MLB カテゴリー状況アナライザー
目次
例
シナリオ:第3週、K L's Boomers(チーム5)対 Los Doyers。水曜日の午前中(週の中盤)。残り4日間が集計対象です。
対戦スコア(Yahooの対戦ページから取得):
| カテゴリー | 自チーム | 相手 | 差 | 残り試合数(自チーム/相手) |
|---|---|---|---|---|
| R | 28 | 31 | -3 | 26 / 22 |
| HR | 9 | 7 | +2 | 26 / 22 |
| RBI | 30 | 29 | +1 | 26 / 22 |
| SB | 4 | 6 | -2 | 26 / 22 |
| OBP | .342(82 PA) | .336(78 PA) | +.006 | 26 / 22 GP |
| K | 42 | 38 | +4 | 先発登板9回 / 先発登板7回 |
| ERA | 3.80(21 IP) | 4.12(19 IP) | -0.32(優勢) | 9 / 7 |
| WHIP | 1.18(21 IP) | 1.25(19 IP) | -0.07(優勢) | 9 / 7 |
| QS | 2 | 1 | +1 | 9 / 7 |
| SV | 3 | 5 | -2 | 約8 RP日 / 約8 RP日 |
シミュレーション用に作成した予測値(週の残りの {mean, stddev} — resources/methodology.mdを参照):
| カテゴリー | 自チームの予測 | 相手の予測 |
|---|---|---|
| R | 最終 52 ± 9 | 最終 57 ± 8 |
| HR | 最終 15 ± 3.5 | 最終 13 ± 3.2 |
| RBI | 最終 52 ± 9 | 最終 55 ± 8 |
| SB | 最終 6 ± 2.3 | 最終 10 ± 2.5 |
| OBP | .346 ± .015 | .341 ± .014 |
| K | 最終 96 ± 11 | 最終 85 ± 10 |
| ERA | 3.88 ± 0.40 | 4.05 ± 0.45 |
| WHIP | 1.20 ± 0.07 | 1.25 ± 0.08 |
| QS | 最終 6.1 ± 1.5 | 最終 3.8 ± 1.4 |
| SV | 最終 4.8 ± 1.4 | 最終 7.7 ± 1.5 |
matchup-win-probability-simに委任し、次を指定します:
cat_list = [R, HR, RBI, SB, OBP, K, ERA, WHIP, QS, SV]cat_inverse_list = [ERA, WHIP]cat_win_threshold = 6- 上の表にある
our_per_cat_projection/opp_per_cat_projection sim_mode = "monte_carlo"、n_simulations = 10000、random_seed = 42
シミュレーション出力(このスキルで使用):
matchup_win_probability = 0.58per_cat_win_probability: R 0.36、HR 0.65、RBI 0.42、SB 0.16、OBP 0.60、K 0.74、ERA 0.62、WHIP 0.68、QS 0.85、SV 0.10expected_cats_won = 5.18
カテゴリーごとのシグナル(シミュレーション出力+野球の状況からここで導出 — resources/methodology.mdを参照):
| カテゴリー | 状況(現在の状態) | 圧力(状況+ペース) | 到達可能性(= round(100 × p_cat)) | プントスコア(= f(1 − p_cat) + 変動性) | 判定 |
|---|---|---|---|---|---|
| R | 劣勢 | 72 | 36 | 44 | 競り合いを維持 |
| HR | 優勢 | 48 | 65 | 21 | 維持 |
| RBI | 優勢(わずか) | 65 | 42 | 35 | 競り合いを続ける |
| SB | 劣勢 | 55 | 16 | 58 | プントを検討 |
| OBP | 優勢(わずか) | 70 | 60 | 24 | 競り合いを続ける |
| K | 優勢 | 55 | 74 | 16 | 競り合いを続ける |
| ERA | 優勢 | 62 | 62 | 23 | 競り合いを続ける |
| WHIP | 優勢 | 60 | 68 | 19 | 維持 |
| QS | 優勢 | 78 | 85 | 9 | 積極的に競り合う |
| SV | 劣勢 | 38 | 10 | 84 | プント |
総合的な推奨:積極的に狙うカテゴリー6、維持するカテゴリー2、プントするカテゴリー2。 対戦勝率58%(ほぼ互角ながら優勢)。
- 積極的に狙う(6):HR、OBP、K、ERA、QS — それぞれ
per_cat_win_probability ≥ 0.60です。さらに、競り合いながらも到達可能な6つ目のカテゴリーとしてRBIも狙います。 - 維持(2):WHIP(ほぼ確定)、R(到達可能性はやや低いものの、完全にプントするほどではありません)。
- プント(2):SB(p = 0.16、到達可能性が低い)とSV(p = 0.10 + 変動性ボーナス → プントスコア84)。
他のエージェントへの下流の影響:
- ラインナップ最適化ツール:
matchup_win_probability = 0.58→ ほぼ互角ながら優勢のため、標準的なdaily_quality最適化を行います(分散への傾きはなし)。 - ウェイバー分析ツール:SP(QS、K、ERA)とOBP重視の打者を優先し、クローザーや俊足の専門選手は優先しません。
- ストリーミング戦略ツール:QSを記録できるSPはすべて先発させ、5イニングで降板するリスクのある投手は避けます。
ワークフロー
このチェックリストをコピーして進捗を記録します:
MLB Category State Analysis Progress:
- [ ] Step 1: Pull current matchup scores from Yahoo
- [ ] Step 2: Count remaining games/PAs/IP for both rosters
- [ ] Step 3: Build per-cat projection dicts ({mean, stddev}) for both rosters
- [ ] Step 4: Delegate to matchup-win-probability-sim (pass cat_list, projections, threshold=6, inverse=[ERA,WHIP])
- [ ] Step 5: Derive cat_position (from state), cat_pressure, cat_reachability, cat_punt_score from sim output
- [ ] Step 6: Rank cats and emit push/maintain/punt plan
- [ ] Step 7: Write signal file with YAML frontmatter (include matchup_win_probability from sim)
ステップ1:現在の対戦スコアを取得する
Yahoo の対戦ページを Web 取得します:https://baseball.fantasysports.yahoo.com/b1/23756/5/matchup?week=N。10 カテゴリーすべてについて、両チームの現在の合計を抽出します。率系カテゴリー(OBP、ERA、WHIP)では、分母(OBP は PAs、ERA/WHIP は IP)も取得します。これは必須です。率系カテゴリーの投影は、比率の基になるボリュームなしでは作成できません。
- 打撃 5 カテゴリー:R、HR、RBI、SB、OBP(+打数/打席数)
- 投球 5 カテゴリー:K、ERA、WHIP、QS、SV(+投球回)
- シグナルファイルにソース URL を記載
スクレイピング手順と Yahoo にアクセスできない場合の代替手段については、resources/methodology.md を参照してください。
Step 2: 残りの試合数/PAs/IP を数える
各ロスターについて、スコアリング期間の残りに選手が出場する MLB の試合数を数え、PAs(打者)と IP(投手)を予測します。
- 打者の残り試合数:ロスター内の各打者について、所属チームの試合数 × 先発する確率を合計
- 投手の残り先発登板数:ロスターごとに、週の残り期間に予定されている SP の先発登板数
- リリーフ投手の残り日数:SV の予測に使用する、日数 × 対象となる RPs
- ボリュームの不均衡:一方のチームの試合数が明らかに多い場合、その差は予測平均に直接反映されます(したがって、
per_cat_win_probabilityにも反映されます)。
MLB.com のスケジュールと先発投手予想一覧を使用します。resources/methodology.md を参照してください。
Step 3: カテゴリーごとの予測 dict を作成する
各チームについて、{cat: {mean, stddev}} 形式の dict を作成します。mean は予測した最終値(または、両チームで一貫して使用する残り値。どちらか一方の方式を選択)で、stddev は残りのボリュームに基づく不確実性を表します。
- カウント系カテゴリー(R、HR、RBI、SB、K、QS、SV):
mean = current_total + Σ(per-player per-game rate × games remaining × daily_quality)。デフォルトの変動係数として、stddev ≈ 0.35 × expected_remainingを使用します。 - 率系カテゴリー(OBP、ERA、WHIP):
mean = (current_ratio × current_volume + projected_remaining_ratio × remaining_volume) / total_volume。stddev ≈ σ_per_obs / sqrt(total_volume)。合計 IP/PA が増えるほど小さくなります。 - どちらの dict もキーが同一で、リーグの
cat_listと完全に一致します。 - 上流の
mlb-player-analyzerシグナルから OBP(AVG ではなく)とqs_probability(W ではなく)を使用します。「ガードレール」を参照してください。
resources/methodology.md を参照してください。
Step 4: matchup-win-probability-sim に委任する
適切な形式の入力ペイロードを指定して、隣接するスキルを呼び出します。
inputs to matchup-win-probability-sim:
cat_list: [R, HR, RBI, SB, OBP, K, ERA, WHIP, QS, SV]
cat_inverse_list: [ERA, WHIP]
cat_win_threshold: 6
our_per_cat_projection: <dict from Step 3>
opp_per_cat_projection: <dict from Step 3>
sim_mode: "monte_carlo"
n_simulations: 10000
random_seed: 42
tie_rule: "half"
outputs consumed:
matchup_win_probability (float in [0,1])
per_cat_win_probability (dict[cat, float])
expected_cats_won (float)
variance_estimate (float)
- 両方の予測 dict に 10 カテゴリーすべてが含まれている
-
cat_inverse_list = [ERA, WHIP](低いほど有利) -
cat_win_threshold = 6(Yahoo の 10 カテゴリーの過半数) - 再現性のためにシードを渡す
- シミュレーションの出力フィールドを取得し、Step 5 用に保存する
Step 5: シミュレーション出力と状態からカテゴリーごとのシグナルを導出する
resources/methodology.md の数式を適用します。確率計算はシミュレーションが担当し、このスキルは野球の状況解釈を担当します。
-
cat_position∈ {winning, tied, losing} — 現在の合計からローカルで計算します(シミュレーションは使用しません)。率系カテゴリーの方向も考慮します(OBP は高いほど有利、ERA/WHIP は低いほど有利)。 -
cat_pressure(0~100)— 状況、僅差かどうか、ボリュームの優位性、確定済みフラグから算出する単純な計算値です。Quick Reference の pressure の数式を参照してください。 -
cat_reachability(0~100)— 現在はround(100 × per_cat_win_probability[cat])とします。シミュレーションの値をそのまま使用します。 -
cat_punt_score(0~100)—(100 × (1 − per_cat_win_probability[cat])) × 0.6 + 30 × is_volatile + 20 × below_min_threshold − 10 × has_spilloverを計算し、範囲内に収めます。
Step 6: 順位付けしてプランを出力する
cat_pressure × cat_reachability / 100 の値で 10 カテゴリーすべてに順位を付けます。
- 上位 6:強化 — これらをウェーバー、ストリーム、先発起用の優先対象にします
- 中位 2:維持 — 現状を保ち、使いすぎないようにします
- 下位 2:放棄を検討 —
cat_punt_score > 60なら放棄を確定し、それ以外は維持します H2H Catsでは、目標は10カテゴリ中6カテゴリを取ることです。妥当な方針は「6カテゴリを取りに行き、最大4カテゴリを譲る」です。出力シグナルの形式については、resources/template.mdを参照してください。
ステップ7:シグナルファイルを作成する
YAMLフロントマター(type: cat-state)を付けて、signals/YYYY-MM-DD-cat-state.mdに書き込みます。シミュレーションのmatchup_win_probabilityをトップレベルのフィールドとして含めます。保存する前にmlb-signal-emitterで検証してください。
- 10カテゴリすべてを含め、それぞれに4つのシグナルがすべて設定されている
- フロントマターに
matchup_win_probabilityとexpected_cats_wonが記録されている - 再現性を確保するため、
sim_metaブロック(sim_mode、n_simulations、random_seed)が記録されている - 信頼度がデータ品質を反映している(Yahooのスクレイピングが不完全な場合は低くする)
-
source_urlsにYahooのマッチアップページ、MLB.comのスケジュールページ、およびシミュレーションスキルへの参照が含まれている - レッドチームの調査結果が記載されている(例:「相手には2先発のエースが控えており、K、ERA、WHIPを一度にひっくり返す可能性がある」)
出力はresources/evaluators/rubric_mlb_category_state_analyzer.jsonを使って評価してください。最低基準は平均スコア3.5以上です。
よくあるパターン
パターン1:週半ばの均衡した状況
- 水曜日の午前によくある状況:すでに確定しているカテゴリが3~4、接戦のカテゴリが3~4、変動の大きいカテゴリが2~3です。
- 対応:接戦のカテゴリを最優先で取りに行き、確定している勝ちカテゴリはそのまま維持し、確定している負けカテゴリは無視します。
- シミュレーションのカテゴリ別確率には、すでにこれが反映されています。
p ∈ [0.40, 0.65]のカテゴリが競り合っているカテゴリです。
パターン2:出場数に偏りがあるマッチアップ
- 当方には打者の試合があと30試合ある一方、相手には22試合あります。カウント系カテゴリの予測値が上昇するため、R/HR/RBI/SBのシミュレーションにおける
per_cat_win_probabilityもそれに応じて上昇します。 - 対応:ラインアップを厚くし(休養日を減らし、ダブルヘッダーを行うチームを優先し)、ストリーマーに入札します。出場数の優位性によるプレッシャーの上昇はフラグによって反映され、到達可能性の上昇はシミュレーションで自動的に反映されます。
パターン3:2先発のエースが控えている(当方または相手)
- 投手の2先発週は、K、ERA、WHIP、QSを同時に左右することがあります。
- 予測値の辞書に反映します。その投手の予想IPとKを増やし、ERA/WHIPの平均値を改善し(その投手のERA/WHIPに近づけ)、QSの平均値をQS相当の先発1回あたり約0.45上げます。
- これにより、シミュレーションでは
per_cat_win_probabilityの変化に、投手カテゴリ4つが連動して動く様子が示されます。
パターン4:セーブカテゴリの変動性
- SVは発生頻度が低く、サヨナラ試合でのセーブ失敗1回でカテゴリがひっくり返ることがあります。
- 予測値の辞書では、平均値を低く(ロック済みクローザー1人あたり週≤ 2.5)、標準偏差を中程度(≥ 1.2)にします。2以上負けている場合、シミュレーションでは自然に
per_cat_win_probabilityが0.1~0.25付近になります。 cat_punt_scoreの変動性ボーナス+30(シミュレーションではなく、ここで適用)は、シミュレーションの到達可能性も同じ判断を示している場合に、SVを放棄対象にします。
パターン5:比率カテゴリの「凍結」
- 週の終盤に、相手がIP/PAの最低基準を大きく下回っている場合(例:金曜日の時点でIPが9回、これ以上の先発予定なし)、相手の比率カテゴリは現在の値で確定します。
- 予測値の辞書では、相手の比率カテゴリの標準偏差をほぼゼロに設定し、平均値を不利な値または放棄した値にします。これにより、シミュレーションは該当カテゴリの
per_cat_win_probability ≈ 1.0を返します。
ガードレール
-
率だけから OBP/ERA/WHIP を計算しないでください。必ず量(PA/IP)を含めてください。 10 PA での .400 の OBP が、82 PA での .342 より優れているわけではありません。比率カテゴリの投影辞書の平均/標準偏差には、加重平均の計算式を使用する必要があります。シミュレーションでは、それらを正しい値として扱います。
-
最重要カテゴリは勝利数ではなく QS です。 このリーグではクオリティ・スタート(6+ IP、≤3 ER)を使用します。5 イニングの登板は 0 として記録されます。残りの QS を予測する際は、各 SP の先発登板数に QS の確率(
mlb-player-analyzerのqs_probabilityシグナル)を掛けてください。予定されている先発登板数をそのまま数えてはいけません。 -
5 番目のカテゴリは AVG ではなく OBP です。 四球もカウントされます。OBP の貢献度を予測する際は、選手の AVG ではなく OBP を使用してください。Juan Soto のような、四球が多く AVG が低い選手は、このリーグでは単純な安打率が示す以上の価値があります。
-
SV は変動が大きいため、シグナルが一致している場合は諦める判断を信頼してください。 打撃の累計カテゴリとは異なり、残り 3 日で 2 セーブ差があっても、ロスターに関係なく
per_cat_win_probabilityは低くなります。ロスター内のクローザーの役割が確定していない場合は、セーブ獲得に固執しないでください(save_role_certaintyが 70 未満なら、自動的に諦める候補です)。cat_punt_scoreの変動ボーナスはシミュレーションではなく、ここで適用されます。シミュレーションが返すのは生の確率です。 -
cat_reachabilityはシミュレーションから取得し、再計算しないでください。 これは委任されています。シミュレーションがper_cat_win_probability[R] = 0.36を返す場合、cat_reachability[R] = 36です。ここで z スコアによる近似や最良/最悪ケースの分類を適用しないでください。それらは旧ヒューリスティックで使われていたもので、現在はシミュレーションスキルが担います。 -
確定したカテゴリにも圧力調整を適用し、ゼロにはしないでください。 勝利が確定した場合でも、
cat_pressure ≈ 40のままです(すでに確保されています)。敗北が確定した場合でも、cat_pressure ≈ 20のままです(投資をやめます)。ゼロに設定しないでください。後続のエージェントは、ベンチ入りかドロップかを判断するために、ゼロ以外の値を使用します。 -
比率カテゴリには最低 IP/PA のルールが必要です。 Yahoo は投手の比率カテゴリに最低条件(通常は週 20 IP)を設けています。週の終盤にどちらかのロスターが最低条件を下回っている場合、その比率カテゴリは自動的に敗北となる可能性があります。シミュレーションを呼び出す前に、これを投影辞書に反映してください(標準偏差 → 0、平均 → 不利な値)。また、
cat_punt_scoreにbelow_min_thresholdとして +20 を加算してください。 -
上流のシグナルを再導出しないでください。
qs_probability、sb_opportunity、obp_contribution、save_role_certaintyはmlb-player-analyzerから取得します。シグナルディレクトリから読み取り、再計算しないでください。 -
シミュレーションには必ず
random_seedを渡してください。 これがないと、このスキルを実行するたびにcat_reachabilityの値がわずかに異なり、差分を比較する後続のエージェントを混乱させます。デフォルトのシード値は42です。
クイックリファレンス
現在の計算ロジックの担当:
| シグナル | 担当 | 計算式 |
|---|---|---|
cat_position | このスキル | 現在の合計値から算出する列挙値(比率指標の方向を考慮) |
cat_pressure | このスキル | 基準値 50 + 20 × 接戦度 + 15 × 変動性の優位 − 10 × 勝ち確定 − 30 × 負け確定 |
cat_reachability | matchup-win-probability-sim に委譲 | = round(100 × per_cat_win_probability[cat]) |
cat_punt_score | このスキル(シミュレーション出力を使用) | (100 × (1 − p_cat)) × 0.6 + 30 × 変動性 + 20 × 最低基準未満 − 10 × 波及効果 |
matchup_win_probability | matchup-win-probability-sim に委譲 | モンテカルロ法による P(cats_won ≥ 6) |
cat_pressure =
50 # neutral baseline
+ 20 × (is_close_margin: deficit/lead ≤ 10% of total)
+ 15 × (opponent_volume_exhausted: we have more games left)
- 10 × (locked_in_win)
- 30 × (locked_in_loss)
clamp(0, 100)
cat_reachability = round(100 × per_cat_win_probability[cat]) # from sim
cat_punt_score =
(100 - cat_reachability) × 0.6 # base: if we can't reach, consider punting
+ 30 × (cat is traditionally volatile: SV)
+ 20 × (below min-PA/IP threshold)
- 10 × (cat has spillover: K→QS, OBP→R, HR→R+RBI)
clamp(0, 100)
リーグ定数(context/league-config.md より):
- 10 カテゴリー:R、HR、RBI、SB、OBP、K、ERA、WHIP、QS、SV
- 逆指標カテゴリー:ERA、WHIP(低いほど有利 —
cat_inverse_listとしてシミュレーションに渡します) - AVG ではなく OBP — 四球が重要です
- W ではなく QS — 6 回以上投げて自責点 3 以下
- H2H カテゴリー制、目標は毎週 10 カテゴリー中 6 以上を勝ち取ること(
cat_win_threshold = 6) - 毎日ラインナップをロックし、週間対戦は月曜から日曜までです
シグナルファイルの出力スキーマ(context/frameworks/signal-framework.md より):
---
type: cat-state
date: YYYY-MM-DD
emitted_by: mlb-category-state-analyzer
week: N
matchup_opponent: <team name>
scoring_days_remaining: N
matchup_win_probability: 0.58 # from matchup-win-probability-sim
expected_cats_won: 5.18 # from matchup-win-probability-sim
sim_meta:
sim_mode: monte_carlo
n_simulations: 10000
random_seed: 42
synthesis_confidence: 0.0-1.0
source_urls:
- https://baseball.fantasysports.yahoo.com/b1/23756/5/matchup?week=N
---
本文:カテゴリーごとの表 + 全体的なプッシュ/維持/放棄の推奨 + レッドチームによる分析結果。
後続処理で使用されるしきい値:
| エージェント | しきい値 | 効果 |
|---|---|---|
| ウェーバー分析エージェント | cat_pressure ≥ 60 | そのカテゴリーを補強するターゲットを優先します |
| ストリーミング戦略エージェント | cat_pressure (ERA/WHIP) < 30 | リスクの高いストリーマーを許容します(放棄するカテゴリーです) |
| ラインナップ最適化エージェント | matchup_win_probability < 0.4 / > 0.6 | 格下の場合は分散を高め、優勢の場合は分散を抑えます |
| トレード分析エージェント | 重み trade_cat_delta | cat_pressure / 50 を乗じます |
主なリソース:
- resources/template.md:出力シグナルファイルの形式、カテゴリーごとの表、シミュレーション連携の実例
- resources/methodology.md:Yahoo のスクレイピング手順、残り試合数の予測、カテゴリー別予測辞書の作成、シミュレーション連携の計算式
- resources/evaluators/rubric_mlb_category_state_analyzer.json:評価基準
- 兄弟スキル:
matchup-win-probability-sim— モンテカルロ法/ポアソン二項分布を用いた、カテゴリー別および対戦全体の勝率計算を担当します
必要な入力:
- 現在の対戦スコア(両チームの 10 カテゴリー分。比率指標にはボリュームも含めます)
- 両チームのロスター ID
- 日曜日までの MLB の残り試合日程
- 上流からのシグナル:
qs_probability、save_role_certainty、obp_contribution、sb_opportunity、daily_quality - リーグ設定(カテゴリー一覧、IP/PA の最低基準、
cat_win_threshold)
生成される出力:
signals/YYYY-MM-DD-cat-state.md— 10 カテゴリーの表、全体方針、matchup_win_probability、信頼度、参照元 URL を含むシグナルファイル- カテゴリーごとの
cat_position、cat_pressure、cat_reachability、cat_punt_score - 全体的な「N カテゴリーをプッシュ、M カテゴリーを維持、P カテゴリーを放棄」という推奨(N + M + P = 10、目標は N ≥ 6)
- ラインナップ最適化における分散判断用の
matchup_win_probability(シミュレーション担当から取得)