mcpField
V
variance-strategy-selector

variance-strategy-selector

github.com/lyndonklその他18747 回インストール9 週間前に更新
リポジトリ

variance-strategy-selector について

variance-strategy-selectorは、勝率、損失の非対称性、判断数から分散方針を選び、後続の最適化処理向けに倍率を出力する意思決定スキルです。

主な機能

  1. 01勝率を3段階に分類
  2. 02損失の重大さに応じて倍率を調整
  3. 03判断数に応じて調整幅を抑制
  4. 04範囲と単調性を検証
  5. 05構造化された根拠を出力

活用シーン

  1. 01ファンタジースポーツのラインナップ方針
  2. 02ポートフォリオの分散選好調整
  3. 03ポーカーのベット方針の調整

インストール

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

$npx skills add https://github.com/lyndonkl/claude --skill variance-strategy-selector

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

同梱ファイル

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

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

詳細

分散戦略セレクター

目次

例

シナリオ:ファンタジーチームのマネージャーは、今週決めるべきラインナップ枠が3つ残っており、対戦相手に15%差をつけられています。今週負けると、プレーオフ進出の可能性がなくなります。

入力:

  • current_win_probability = 0.32(大きく劣勢)
  • downside_asymmetry = 0.90(絶対に勝つ必要があり、負ければ壊滅的)
  • slots_to_decide = 3

区分の判定:win_probability < 0.40 -> 姿勢 = "seek"、基本倍率の範囲は1.15-1.30です。

非対称性による増幅:downside_asymmetry > 0.8 -> seek 側の倍率を1.0からさらに+0.10遠ざけます。基本値1.20 + 0.10 = 1.30です。

枠数による抑制:slots_to_decide = 3 は5枠のしきい値を下回るため、抑制は適用されません。

出力:

  • variance_posture:"seek"
  • variance_multiplier:1.30
  • confidence_band:"高分散(積極的にseek)"
  • rationale:"移動前の勝率は0.32(大きく劣勢)で、負けた場合の影響は壊滅的です(絶対に勝つ必要があり、非対称性は0.90)。分散を最大化すると、右側の裾にある結果の確率が高まります。後続の処理では、高分散の選択肢(波の大きい選手、特定ポジションへの集中、勝ち目の薄い賭け)を30%増しにしてください。"

適用方法(後続のスキルで倍率を適用します):

adjusted_player_score = base_score x (1 + (boom_bust_score - 0.5) x (variance_multiplier - 1))

波の大きさのスコアが0.8(高分散の選手)で、倍率が1.30の場合、安定した選手と比べて9%の上乗せになります。

ワークフロー

このチェックリストをコピーして、進捗を記録してください。

Variance Strategy Selection Progress:
- [ ] Step 1: Collect inputs (win_probability, downside_asymmetry, slots_to_decide)
- [ ] Step 2: Classify win-probability band (seek / neutral / minimize)
- [ ] Step 3: Apply downside-asymmetry amplification
- [ ] Step 4: Apply slot-count dampening
- [ ] Step 5: Clamp multiplier to valid range and validate monotonicity
- [ ] Step 6: Emit structured output with rationale

ステップ 1:入力を収集する

  • current_win_probability は [0, 1] の範囲の浮動小数点数です。この範囲外の値は拒否してください。
  • downside_asymmetry は [0, 1] の範囲の浮動小数点数です。1.0 は、負けることが壊滅的な結果になることを表します(プレーオフ進出に勝利が必須、敗退が決まる試合、資金の破綻など)。
  • slots_to_decide は、この戦略姿勢が対象とする独立した意思決定の数を表す、0 以上の整数です(ラインナップの枠、ポートフォリオのポジション、ベットの連続回数など)。

入力値の検証ルールについては、resources/template.md を参照してください。

ステップ 2:勝率の帯を分類する

次の 3 帯ルールを適用します。

  • win_probability < 0.40 -> 戦略姿勢 = "seek"、基本乗数 1.15-1.30
  • 0.40 <= win_probability <= 0.60 -> 戦略姿勢 = "neutral"、基本乗数 1.00
  • win_probability > 0.60 -> 戦略姿勢 = "minimize"、基本乗数 0.80-0.90

"seek" の帯では、確率が 0.40 をどれだけ下回るかに比例して基本乗数を選びます。base = 1.15 + (0.40 - win_probability) x 0.375 とし、上限を 1.30 に制限します。"minimize" では逆方向に、base = 0.90 - (win_probability - 0.60) x 0.25 とし、下限を 0.80 に制限します。

その根底にある右側の裾/左側の裾のロジックについては、resources/methodology.md を参照してください。

ステップ 3:下振れの非対称性による増幅を適用する

負けが壊滅的な結果になる場合、アンダードッグはさらに大きく勝負に出る必要があり、優勢側はさらに慎重に守る必要があります。この調整は 1.0 を中心に対称です。

  • downside_asymmetry > 0.8 かつ戦略姿勢が "seek" の場合:乗数を +0.10 変更します(1.0 をさらに上回る方向)。
  • downside_asymmetry > 0.8 かつ戦略姿勢が "minimize" の場合:乗数を -0.10 変更します(1.0 をさらに下回る方向)。
  • downside_asymmetry > 0.8 かつ戦略姿勢が "neutral" の場合:変更しません(定義上、中立のままです)。
  • downside_asymmetry <= 0.8 の場合:変更しません。

ステップ 4:枠数に応じた減衰を適用する

独立した意思決定が多い場合、中心極限定理によって分散は自然に分散されます。多数の枠に対して乗数を大きく動かすのは冗長です。

  • slots_to_decide > 5 の場合:1.0 からの差を 5 / slots_to_decide 倍に減衰させます(下限は 0.5)。たとえば、枠が 10 個の場合、差を半分にします。
  • slots_to_decide <= 5 の場合:減衰させません。

数式については、resources/methodology.md を参照してください。

ステップ 5:範囲を制限し、単調性を検証する

  • 最終的な乗数を [0.70, 1.40] の範囲に制限します。この範囲外の値は、入力または計算に誤りがあることを示します。
  • 単調性を確認します。win_probability が低下するにつれて、乗数は少なくとも同じ値を保ち、または増加しなければなりません。downside_asymmetry が増加するにつれて、|multiplier - 1.0| は少なくとも同じ値を保ち、または増加しなければなりません。

ステップ 6:構造化出力を返す

必須の 4 つのフィールドを返します。

  • variance_posture -- "seek" | "neutral" | "minimize"
  • variance_multiplier -- [0.70, 1.40] の範囲の最終値
  • confidence_band -- 人が理解できる簡潔な説明(例:「高分散(積極的に勝負に出る)」、「低分散(リードを守る)」)
  • rationale -- 勝率の帯、非対称性フラグ、枠数の影響、および利用者が乗数をどう解釈すべきかを説明する 2~3 文

resources/evaluators/rubric_variance_strategy_selector.json を使って検証してください。最低基準は、平均スコア 3.5 以上です。

よくあるパターン

パターン 1:大幅な劣勢で、勝利が必須(ファンタジースポーツ)

  • 入力:win_prob ~0.30、asymmetry ~0.90、slots 1-3
  • 出力:posture "seek"、multiplier ~1.30
  • 根拠:一発を狙います。高コンタクトで単打を重ねる打者より、K と HR が多く一発と凡退の差が大きい打者を優先します。安定した 4 番手の先発投手より、上振れの可能性がある不安定な先発投手を優先します。利用側のスキル(例:mlb-lineup-optimizer)は、一発と凡退の差を重視する度合いを 1.30 倍にします。

パターン 2:大幅な優勢で、大規模なポートフォリオ/多数の枠がある

  • 入力:win_prob ~0.75、asymmetry ~0.50、slots ~12(フルラインアップ/分散されたポートフォリオ)
  • 出力:posture "minimize"、multiplier ~0.92(枠数による抑制後、0.85 から調整)
  • 根拠:リードを守りますが、過剰に設計する必要はありません。12 枠があれば、ポートフォリオは中心極限定理の効果によってすでに分散されています。分散の調整幅を少し抑えるだけで十分です。利用側は集中度/一発と凡退の差を重視する度合いを 8% 下げます。

パターン 3:互角の対戦(ポーカーで中程度のスタック)

  • 入力:win_prob ~0.50、asymmetry ~0.40、slots ~5(次の 5 ハンド)
  • 出力:posture "neutral"、multiplier 1.00
  • 根拠:GTO に近いプレイをします。どちらにも分散の傾きを付けません。利用側はベットサイズを調整しません。

パターン 4:やや優勢で、勝敗を決する判断が 1 つある(レース/オプションの満期)

  • 入力:win_prob ~0.65、asymmetry ~0.85、slots 1
  • 出力:posture "minimize"、multiplier ~0.75(基準値 0.85 から非対称性の影響で 0.10 減、枠数による抑制なし)
  • 根拠:一度きりの機会で、守るべきリードがあり、無駄にすれば壊滅的な結果になります。レースの先頭車はリスクの高いイン側のラインを取りません。ヘッジ済みのコールオプションの売り手は、満期日にヘッジを外しません。利用側は分散を大幅に抑えます。

ガードレール

  1. バンドの境界は厳密であり、曖昧ではありません。 0.40 と 0.60 のしきい値をまたいで、姿勢ラベルを補間しないでください。姿勢はカテゴリ値(seek/neutral/minimize)であり、倍率は各バンド内で連続的に変化します。利用側は分岐ロジックにカテゴリラベルを使用します。

  2. 非対称性は影響を増幅しますが、方向を逆転させることはありません。 破滅的な下振れリスクがある場合、本命はより慎重になり、伏兵はより積極的になります。方向が逆転することはありません。非対称性による調整で算出された倍率が 1.0 を超える、または下回る場合は、1.0 でクランプし、入力を再確認してください。

  3. スロット数による減衰は、倍率そのものではなく 1.0 からの差に適用します。 実装:final = 1.0 + (pre_dampening - 1.0) x min(1.0, 5 / slots)。10 スロットで 1.30 の減衰後倍率は 0.65 ではなく 1.15 です。

  4. 確率が 0 または 1 の場合のエッジケース。 win_probability = 0 の場合、姿勢は「seek」で、倍率は最大(非対称性適用前は 1.30、適用後は 1.40)です。宝くじと同様、ゼロ以外の結果を得る道は分散しかありません。win_probability = 1 の場合、姿勢は「minimize」で、減衰は最大(適用前は 0.80、適用後は 0.70)です。分散はすべて純粋な下振れリスクになります。この点を根拠に明記してください。

  5. 倍率は促しであり、命令ではありません。 下流の最適化器にバイアスをかけるものであり、最適化器に取って代わるものではありません。倍率 1.30 は「一発逆転型の選択肢だけを採用する」という意味ではありません。「利用側が実行する最適化の範囲内で、安定した選択肢に対して一発逆転型のスコアを 30% 重く評価する」という意味です。

  6. 下振れリスクの非対称性は、勝率とは異なります。 シーズン第 1 週の勝率が低い伏兵は、挽回の機会が十分にあるため、非対称性は低い状態です。同じ伏兵でも第 20 週では最後の機会となるため、非対称性が高くなります。両方の入力を求め、一方から他方を推測しないでください。

  7. スロット数による減衰は、独立性の仮定に基づいています。 スロットごとの結果が独立している場合に、中心極限定理に基づく分散効果が働きます。スロット同士の相関が高い場合(例:同じチームの投手だけで構成する、ポートフォリオ内のハイテク株だけで構成する)、減衰効果は弱まります。利用側の分野で相関が知られている場合は、根拠の中でこの仮定を明示してください。

  8. 設計上、特定の分野に依存しません。 このスキルは、意思決定の対象がファンタジーのラインアップ、ポートフォリオ、ポーカーのセッション、レースのいずれかを認識しません。スカラー値を出力し、利用側が分野固有の意味を付与します。根拠に分野固有の専門用語を埋め込まず、「高分散の選択肢」や「安定した選択肢」のような中立的な表現を使用してください。

クイックリファレンス

3段階のルール:

勝率方針基本倍率の範囲
< 0.40勝負を狙う1.15 - 1.30
0.40 - 0.60中立1.00
> 0.60最小限に抑える0.80 - 0.90

非対称性による調整(downside_asymmetry > 0.8 の場合に適用):

方針調整
勝負を狙う+0.10
中立0
最小限に抑える-0.10

枠数による減衰:

if slots_to_decide > 5:
    factor = max(0.5, 5 / slots_to_decide)
    multiplier = 1.0 + (multiplier - 1.0) x factor

計算の全体像:

def variance_strategy(p_win, asym, slots):
    # 1. Band
    if p_win < 0.40:
        posture = "seek"
        base = 1.15 + (0.40 - p_win) * 0.375
        base = min(base, 1.30)
    elif p_win > 0.60:
        posture = "minimize"
        base = 0.90 - (p_win - 0.60) * 0.25
        base = max(base, 0.80)
    else:
        posture = "neutral"
        base = 1.00

    # 2. Asymmetry
    if asym > 0.8 and posture == "seek":
        base += 0.10
    elif asym > 0.8 and posture == "minimize":
        base -= 0.10

    # 3. Slot dampening
    if slots > 5:
        factor = max(0.5, 5 / slots)
        base = 1.0 + (base - 1.0) * factor

    # 4. Clamp
    multiplier = max(0.70, min(1.40, base))
    return posture, multiplier

主なリソース:

  • resources/template.md:入力検証チェックリスト、4つのシナリオ(大幅な劣勢で勝利必須、やや劣勢、互角、大幅な優勢)の計算例、出力形式
  • resources/methodology.md:ケリー基準の参考資料、分散の和の計算、右裾/左裾の確率に関する考察、中心極限定理による減衰、関連分野の例(ファンタジースポーツ、ポーカー、競馬、ポートフォリオ)
  • resources/evaluators/rubric_variance_strategy_selector.json:8つの評価基準からなる品質評価基準。段階の正確さ、非対称性の調整、枠数による減衰、倍率の範囲、根拠の明確さ、エッジケース、単調性、引用を評価します

必須の入力:

  • current_win_probability(float、0~1):分散に関する判断を行う前の勝率の点推定値
  • downside_asymmetry(float、0~1):1.0 = 敗北が壊滅的(敗退、資金の破綻)、0.5 = 通常、0.0 = 下振れによる影響なし
  • slots_to_decide(int、>= 0):この方針を適用する独立した判断の数

出力内容:

  • variance_posture(string):"seek" | "neutral" | "minimize"
  • variance_multiplier(float、0.70~1.40):利用側が一発勝負/変動性/集中度スコアに掛ける係数
  • confidence_band(string):方針を表す短い自然言語の説明
  • rationale(string):段階、非対称性、枠数、および解釈に言及する2~3文

参照元(利用側):

  • mlb-lineup-optimizer(daily_quality x leverage x variance_multiplier に基づくファンタジーベースボールのラインアップ選択)
  • 高ベータと低ベータのポジションに重み付けするポートフォリオ配分スキル
  • ベット額の分散を決めるポーカーバンクロールスキル
  • 分散のつまみをどの程度強く回すかを判断するあらゆるエージェント

原則の参照先: yahoo-mlb/context/frameworks/game-theory-principles.md のゲーム理論の原則 #6(アンダードッグとして分散を求める ―「cope」の原則)。

コメント