mcpField
M
mlb-category-state-analyzer

mlb-category-state-analyzer

github.com/lyndonklデータ・データベース18742 回インストール9 週間前に更新
リポジトリ

mlb-category-state-analyzer について

Yahoo Fantasy MLBのH2Hカテゴリ対戦を分析するスキルです。シミュレーション確率と現在の試合状況を組み合わせ、カテゴリごとの注力・維持・放棄の方針を作成します。

主な機能

  1. 01シミュレーション確率とカテゴリ状況の統合
  2. 02順位・圧力・到達可能性の算出
  3. 03カテゴリの順位付けと方針作成
  4. 04出典とシミュレーション情報付きシグナルの生成

活用シーン

  1. 01週の途中で注力するカテゴリの選定
  2. 02残り試合数を踏まえた逆転可能性の評価
  3. 03ラインアップ・ウェイバー・ストリーミング判断への情報提供

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/mlb-category-state-analyzerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

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

詳細

MLB カテゴリー状況アナライザー

目次

例

シナリオ:第3週、K L's Boomers(チーム5)対 Los Doyers。水曜日の午前中(週の中盤)。残り4日間が集計対象です。

対戦スコア(Yahooの対戦ページから取得):

カテゴリー自チーム相手差残り試合数(自チーム/相手)
R2831-326 / 22
HR97+226 / 22
RBI3029+126 / 22
SB46-226 / 22
OBP.342(82 PA).336(78 PA)+.00626 / 22 GP
K4238+4先発登板9回 / 先発登板7回
ERA3.80(21 IP)4.12(19 IP)-0.32(優勢)9 / 7
WHIP1.18(21 IP)1.25(19 IP)-0.07(優勢)9 / 7
QS21+19 / 7
SV35-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
ERA3.88 ± 0.404.05 ± 0.45
WHIP1.20 ± 0.071.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.58
  • per_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.10
  • expected_cats_won = 5.18

カテゴリーごとのシグナル(シミュレーション出力+野球の状況からここで導出 — resources/methodology.mdを参照):

カテゴリー状況(現在の状態)圧力(状況+ペース)到達可能性(= round(100 × p_cat))プントスコア(= f(1 − p_cat) + 変動性)判定
R劣勢723644競り合いを維持
HR優勢486521維持
RBI優勢(わずか)654235競り合いを続ける
SB劣勢551658プントを検討
OBP優勢(わずか)706024競り合いを続ける
K優勢557416競り合いを続ける
ERA優勢626223競り合いを続ける
WHIP優勢606819維持
QS優勢78859積極的に競り合う
SV劣勢381084プント

総合的な推奨:積極的に狙うカテゴリー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を返します。

ガードレール

  1. 率だけから OBP/ERA/WHIP を計算しないでください。必ず量(PA/IP)を含めてください。 10 PA での .400 の OBP が、82 PA での .342 より優れているわけではありません。比率カテゴリの投影辞書の平均/標準偏差には、加重平均の計算式を使用する必要があります。シミュレーションでは、それらを正しい値として扱います。

  2. 最重要カテゴリは勝利数ではなく QS です。 このリーグではクオリティ・スタート(6+ IP、≤3 ER)を使用します。5 イニングの登板は 0 として記録されます。残りの QS を予測する際は、各 SP の先発登板数に QS の確率(mlb-player-analyzer の qs_probability シグナル)を掛けてください。予定されている先発登板数をそのまま数えてはいけません。

  3. 5 番目のカテゴリは AVG ではなく OBP です。 四球もカウントされます。OBP の貢献度を予測する際は、選手の AVG ではなく OBP を使用してください。Juan Soto のような、四球が多く AVG が低い選手は、このリーグでは単純な安打率が示す以上の価値があります。

  4. SV は変動が大きいため、シグナルが一致している場合は諦める判断を信頼してください。 打撃の累計カテゴリとは異なり、残り 3 日で 2 セーブ差があっても、ロスターに関係なく per_cat_win_probability は低くなります。ロスター内のクローザーの役割が確定していない場合は、セーブ獲得に固執しないでください(save_role_certainty が 70 未満なら、自動的に諦める候補です)。cat_punt_score の変動ボーナスはシミュレーションではなく、ここで適用されます。シミュレーションが返すのは生の確率です。

  5. cat_reachability はシミュレーションから取得し、再計算しないでください。 これは委任されています。シミュレーションが per_cat_win_probability[R] = 0.36 を返す場合、cat_reachability[R] = 36 です。ここで z スコアによる近似や最良/最悪ケースの分類を適用しないでください。それらは旧ヒューリスティックで使われていたもので、現在はシミュレーションスキルが担います。

  6. 確定したカテゴリにも圧力調整を適用し、ゼロにはしないでください。 勝利が確定した場合でも、cat_pressure ≈ 40 のままです(すでに確保されています)。敗北が確定した場合でも、cat_pressure ≈ 20 のままです(投資をやめます)。ゼロに設定しないでください。後続のエージェントは、ベンチ入りかドロップかを判断するために、ゼロ以外の値を使用します。

  7. 比率カテゴリには最低 IP/PA のルールが必要です。 Yahoo は投手の比率カテゴリに最低条件(通常は週 20 IP)を設けています。週の終盤にどちらかのロスターが最低条件を下回っている場合、その比率カテゴリは自動的に敗北となる可能性があります。シミュレーションを呼び出す前に、これを投影辞書に反映してください(標準偏差 → 0、平均 → 不利な値)。また、cat_punt_score に below_min_threshold として +20 を加算してください。

  8. 上流のシグナルを再導出しないでください。 qs_probability、sb_opportunity、obp_contribution、save_role_certainty は mlb-player-analyzer から取得します。シグナルディレクトリから読み取り、再計算しないでください。

  9. シミュレーションには必ず random_seed を渡してください。 これがないと、このスキルを実行するたびに cat_reachability の値がわずかに異なり、差分を比較する後続のエージェントを混乱させます。デフォルトのシード値は 42 です。

クイックリファレンス

現在の計算ロジックの担当:

シグナル担当計算式
cat_positionこのスキル現在の合計値から算出する列挙値(比率指標の方向を考慮)
cat_pressureこのスキル基準値 50 + 20 × 接戦度 + 15 × 変動性の優位 − 10 × 勝ち確定 − 30 × 負け確定
cat_reachabilitymatchup-win-probability-sim に委譲= round(100 × per_cat_win_probability[cat])
cat_punt_scoreこのスキル(シミュレーション出力を使用)(100 × (1 − p_cat)) × 0.6 + 30 × 変動性 + 20 × 最低基準未満 − 10 × 波及効果
matchup_win_probabilitymatchup-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_deltacat_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(シミュレーション担当から取得)

コメント