mcpField
A
auction-first-price-shading

auction-first-price-shading

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

auction-first-price-shading について

Auction First-Price Shadingは、入札者の評価額、競争相手数の推定、価値分布、リスク回避度、予算から封印入札の第一価格入札額を計算する汎用スキルです。調整と上限適用を行い、後続の確認用に前提も出力します。

主な機能

  1. 01入札者数に基づく基本シェーディング計算
  2. 02価値分布とリスク回避度による調整
  3. 03評価額と残予算による入札上限
  4. 04入札額、比率、理由、前提の出力

活用シーン

  1. 01個別評価額に基づく封印入札の設定
  2. 02ファンタジースポーツのウェーバー入札見積もり
  3. 03調達やサイレントオークションの入札モデル化

インストール

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

$npx skills add https://github.com/lyndonkl/claude --skill auction-first-price-shading

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

同梱ファイル

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

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

詳細

オークションのファーストプライス・シェーディング

目次

例

シナリオ:特定の分野に依存しない封印入札オークションです。入札者は、自分にとっての私的価値が予算通貨で28単位の品目に対し、非公開の入札額を提示する必要があります。他に6人の入札者が競争すると予想されます。入札者間の価値はおおむね一様に分布しているようです。入札者のリスク回避度はやや高く(0.2)、残りの予算は89単位です。

入力:

  • true_value = 28
  • n_bidders_estimate = 6
  • value_distribution = "uniform"
  • risk_aversion = 0.2
  • budget_remaining = 89

中核となる計算:

shade_fraction_base = (N - 1) / N = 5 / 6 = 0.833
shaded_bid_base     = true_value x shade_fraction_base = 28 x 0.833 = 23.33

リスク回避度の調整(勝率を高めるため、入札額を真の価値に近づけます):

shade_fraction' = shade + risk_aversion x (1 - shade) x 0.4
                = 0.833 + 0.2 x (1 - 0.833) x 0.4
                = 0.833 + 0.0133
                = 0.847
shaded_bid'     = 28 x 0.847 = 23.72

予算と安全上限:

cap = min(shaded_bid', 0.9 x true_value, budget_remaining)
    = min(23.72, 25.2, 89)
    = 23.72  -> round to 24

出力:

  • shaded_bid = 24
  • shade_fraction = 0.847
  • rationale = "Uniform-values equilibrium shades to (N-1)/N = 0.833 at N=6. Mild risk aversion (0.2) nudges bid up to 0.847 of true value to raise win probability. Final bid capped below 0.9x true_value and well under budget. Expected to win against 5 rivals drawing values from a comparable uniform distribution."
  • assumptions_flagged = ["uniform private-value distribution", "N=6 is an estimate, not observed", "risk_aversion=0.2 is a modeling choice"]

ワークフロー

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

Auction Shading Progress:
- [ ] Step 1: Validate inputs (true_value > 0, 1 <= N <= 12, distribution known)
- [ ] Step 2: Compute base shade from (N-1)/N
- [ ] Step 3: Apply distribution adjustment (uniform / log-normal / empirical)
- [ ] Step 4: Apply risk-aversion adjustment
- [ ] Step 5: Apply budget and safety caps
- [ ] Step 6: Emit shaded_bid, shade_fraction, rationale, assumptions_flagged

ステップ 1:入力を検証する

計算する前に、不正な入力を拒否するか、フラグを設定してください。入力契約の詳細については、resources/template.mdを参照してください。

  • true_valueが非負の数値である
  • n_bidders_estimateが整数であり、[1, 12]の範囲に収まるよう制限されている
  • value_distributionが"uniform"、"log-normal"、"empirical"のいずれかである
  • risk_aversionが[0, 1]の範囲にある(未指定の場合はデフォルトで0)
  • budget_remainingが非負の数値である(未指定の場合は実質的に無限大として扱い、フラグを設定する)

ステップ 2:(N-1)/Nから基本のシェーディングを計算する

[0, v_max]の一様分布から価値を引き出すリスク中立の入札者の場合、対称ベイズ・ナッシュ均衡の入札戦略はb(v) = v x (N-1)/Nです。導出については、resources/methodology.mdを参照してください。

  • shade_fraction = (N - 1) / N
  • 特殊ケースN = 1:シェード = 0、最小増分で入札する(買い手独占者のため、競争相手はいません)
  • shaded_bid = true_value x shade_fraction

ステップ 3:分布に応じた調整を適用する

一様分布の価値には、単純明快な(N-1)/Nルールが適用されます。実際の価値分布は、集中している(対数正規)か、経験的に偏りがあることがよくあります。詳しくは、resources/methodology.mdを参照してください。

  • "uniform"の場合:調整なし。シェード = (N-1)/N。
  • "log-normal"の場合:価値は最頻値付近に集中し、右側に長い裾を持ちます。spread >= 1は変動係数を表し、シェードを1 - 1/(N x spread)に近づけます。デフォルトのspread = 1.5では、競合相手の価値が極端になる可能性が低いため、シェードが上がります(価値に近い額で入札します)。
  • "empirical"の場合:過去のオークションから分布を学習します。シェードのルックアップテーブルが利用可能であればそれを使い、そうでなければ観測履歴から推定したspreadを用いた対数正規の式にフォールバックします。

ステップ 4:リスク回避に応じた調整を適用する

リスク回避的な入札者は、勝率を高めるために期待余剰を小さくします。真の価値に近い額で入札し、シェードを小さくします。詳しくは、resources/methodology.mdを参照してください。

  • shade_fraction' = shade + risk_aversion x (1 - shade) x 0.4
  • risk_aversion = 0:変化なし。
  • risk_aversion = 1:シェードが基本値から1までの距離の40パーセント分だけ移動します(つまり、真の価値での入札に近づきます)。
  • 0.4のスケーリング係数によって調整に上限が設けられます。差を完全になくすと余剰がゼロになるため、差が完全になくなることはありません。

ステップ 5:予算と安全性の上限を適用する

最終入札額には、次の3つの上限を適用します。

  • cap_value = 0.9 x true_value — アイテムの価値の90パーセントを超えて支払わないようにします。これにより、期待余剰を少なくとも10パーセント確保します。
  • cap_budget = budget_remaining — 利用可能な予算を超えて入札しないようにします。
  • shaded_bid = min(raw_shaded_bid, cap_value, cap_budget)。
  • 上限が適用された場合は、下流の利用者が有効な制約を把握できるよう、assumptions_flaggedにフラグを設定します。

ステップ 6:出力を生成する

次の4フィールドを返します。

  • shaded_bid(数値。呼び出し元が期待する精度に丸めます。ほとんどの予算システムでは整数です)
  • shade_fraction(0~1。実際に使用した有効なシェード)
  • rationale(適用されたルールとその理由を説明する1~2文)
  • assumptions_flagged(文字列配列。下流の利用者が見直す必要のあるすべての前提)

resources/evaluators/rubric_auction_first_price_shading.jsonを使用して検証してください。最低基準は、加重スコア3.5以上です。

よくあるパターン

パターン 1:一般的な封印入札オークション(価値が均一、リスク中立)

  • 適用条件:すべての入札者の価値がほぼ同じ分布から抽出され、独自の情報やリスク回避性がありません。
  • 入札額の引き下げ幅:(N-1)/N。N=2 の場合は 50 パーセント、N=6 の場合は 83 パーセント、N=8 の場合は 87.5 パーセントまで引き下げます。
  • 関連する例:個別価値の対象をめぐるファンタジースポーツのウェーバー入札(FAAB)、封印調達入札、サイレントオークションの入札。

パターン 2:価値が集中している場合(対数正規分布または経験分布)

  • 適用条件:ほとんどの入札者の評価額が共通の推定値(共通価値要素)の周辺に集中し、外れ値の裾が細い場合です。公開情報によって評価額のばらつきが小さくなる、よく知られた対象で典型的です。
  • 入札額の引き下げ幅:1 - 1/(N x spread) に近づけます。ばらつきが大きいほど意見の不一致も大きく、より大きく引き下げられます。ばらつきが小さい(集中度が高い)場合、引き下げる余地は小さくなり、落札するには入札者間でほぼ合意している必要があります。
  • 関連する例:注目選手の昇格をめぐる FAAB 入札、適正価格の契約を対象とする予測市場の指値注文、共有公開データをもとにした M&A の封印入札ラウンド。

パターン 3:リスク回避的な入札者

  • 適用条件:入札者が期待余剰の最大化よりも落札を重視する場合です。たとえば、今週のラインナップ枠を埋めなければならないファンタジースポーツのマネージャーや、供給を確保しなければならない調達チームが該当します。
  • 引き下げ幅の調整:shade' = shade + risk_aversion x (1 - shade) x 0.4。入札額を真の価値に近づけます。
  • 注意点:引き下げ幅を決して 1 にしてはいけません(真の価値で入札してはいけません)。そうすると期待余剰がゼロになるためです。0.9 x true_value の上限によって、これを確実に防ぎます。

パターン 4:予算制約のある入札者(隅点解)

  • 適用条件:制約がない場合の引き下げ後の入札額が budget_remaining を超える場合です。入札者は、落札確率の低下を受け入れるか、オークションを見送る必要があります。
  • 引き下げ幅の調整:出力は budget_remaining と等しくなり、実効的な引き下げ幅は budget_remaining / true_value です。後続のロジックがオークションを見送るか、落札確率の低下を受け入れるか判断できるよう、予算制約が拘束的であることをフラグで示します。
  • 注意点:budget_remaining < (N-1)/N x true_value の場合、入札者は競争に必要な資金が不足しています。フラグを立て、呼び出し元に判断を委ねます。

ガードレール

  1. (N-1)/Nは対称均衡の結果であり、普遍的な真理ではありません。 すべての入札者が同じ入札関数を使い、同じ分布から評価額を抽出することを前提としています。ある入札者が一貫して過剰に入札する場合、最適な対応は変わります。競合相手が対称ではないことを示す情報がユーザーにある場合は、必ずassumptions_flaggedに記載してください。

  2. Nは推定値であり、既知の値ではありません。 ほとんどの呼び出し元はNを正確には把握していません。Nの小さな誤差はほとんど影響しません(シェード関数は滑らかです)が、N=2をN=6と取り違えると、入札額は評価額の50%から83%に変わります。n_bidders_estimateは必ず仮定として明示してください。

  3. Nは[1, 12]の範囲に制限してください。 1未満の値には意味がありません。12を超える値でも入札額が大きく改善することはほとんどなく(N=12でのシェードは0.917、N=8では0.875)、通常は過信につながります。範囲制限によって、上流のエラーを防げます。

  4. 0.9 x true_valueを超える入札は絶対にしないでください。 これは厳格な上限です。リスク回避度が高い場合やNが非常に大きい場合でも、0.9を超えると、シェーディングに経済的な価値がある水準を下回る期待余剰になります。

  5. budget_remainingを超える入札は絶対にしないでください。 シェード後の入札額は、利用可能な予算に合わせて制限されます。この制限が適用された場合は、出力フラグでその旨を示してください。後続の処理では、1つの商品に予算全額を入札するより、入札を見送るほうが望ましい場合があります。

  6. N = 1は特殊なケースです。 競争相手がいない場合、最適な戦略は最小入札単位(多くの場合は1単位、場合によっては0)で入札することです。このスキルはshaded_bid = max(1, floor_bid)を返し、「競争相手なし — 最低入札額で落札」というフラグを付けます。呼び出し元が独自の下限額を指定する場合は、明示的に渡してください。このスキルではデフォルトで1を使用します。

  7. リスク回避度が数式を支配するわけではありません。 調整式shade' = shade + risk_aversion x (1 - shade) x 0.4は、0.4のスケーリング係数によって上限が設けられています。最終的な入札額にも、引き続き0.9 x true_valueの上限が適用されます。リスク回避度の高いユーザーが評価額そのものを入札できるようにしてはいけません。

  8. このスキルは特定のドメインに依存しません。 野球、予測市場、調達に関する知識はありません。後続の利用者(ファンタジーベースボール向けのmlb-faab-sizerや、サプライヤーの封印入札向けの調達エージェントなど)は、ドメイン固有の評価額推定、緊急度の乗数、落札者の呪いに対する割引を加えてこのスキルを利用します。

クイックリファレンス

主な数式:

Uniform-value risk-neutral equilibrium:
  shade_fraction = (N - 1) / N
  shaded_bid     = true_value x shade_fraction

Log-normal / empirical-cluster adjustment:
  shade_fraction_adj = 1 - 1 / (N x spread)     # spread >= 1 (CoV proxy)
  default spread = 1.5

Risk-aversion adjustment:
  shade_fraction_ra = shade + risk_aversion x (1 - shade) x 0.4

Final bid (all caps applied):
  shaded_bid = min(true_value x shade_fraction_final,
                   0.9 x true_value,
                   budget_remaining)

シェード表(均一分布、リスク中立):

Nshade_fraction例:true_value = 100に対する入札額
10.001(最小入札単位)
20.5050
30.6767
40.7575
50.8080
60.8383
80.87587(その後、90に制限)
100.9090(上限と一致)
120.91790(上限が適用)

入力仕様:

  • true_value(数値、>= 0)— 予算通貨単位で表した、入札者自身の私的評価額
  • n_bidders_estimate(整数、[1, 12]の範囲に制限)— 自分を含む、現実的に想定される入札者の合計数
  • value_distribution("uniform" | "log-normal" | "empirical")— 分布形状に関する仮定
  • risk_aversion(数値、[0, 1]、デフォルトは0)— 0 = リスク中立、1 = 最大限のリスク回避
  • budget_remaining(数値、>= 0)— 出力に対する厳格な上限

出力仕様:

  • shaded_bid(数値)— 提出する確定入札額
  • shade_fraction(数値、[0, 1])— 実際に適用されたシェード率
  • rationale(文字列)— 理由のログに記録する説明文(1~2文)
  • assumptions_flagged(文字列の配列)— 呼び出し元が見直す可能性のあるモデリング上の仮定すべて

主なリソース:

コメント