mcpField
A
auction-winners-curse-haircut

auction-winners-curse-haircut

github.com/lyndonkl其他18746 次安装10 周前更新
代码仓库

关于 auction-winners-curse-haircut

用于估算拍卖赢家诅咒折价的决策支持技能。它依据价值类型、知情竞标者数量和信号离散度调整估值,并要求明确分类与校验输入。

主要功能

  1. 01区分共同价值、私人价值与混合价值
  2. 02计算设有上限的估值折价
  3. 03私人价值估值保持不变
  4. 04校验输入并生成理由说明

适用场景

  1. 01调整共同价值拍卖的估值
  2. 02处理对竞标者有特定价值的标的
  3. 03比较混合价值拍卖机会

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lyndonkl/claude --skill auction-winners-curse-haircut

安装后在 Claude Code 中输入/auction-winners-curse-haircut确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

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

详细介绍

拍卖赢家诅咒折价

目录

示例

场景:竞标者估算目标的价值为 raw_valuation = $30。六位知情竞标者正在竞争。各竞标者的估值存在中等程度的差异(signal_dispersion = 40 out of 100)。目标是广为人知的大宗商品(所有人都采用相似的模型)。

输入:

  • raw_valuation:30
  • value_type:common_value
  • n_informed_bidders:6
  • signal_dispersion:40

折价计算:

haircut_pct = min(35, 10 + log(6) x 5 + 40 x 0.2)
            = min(35, 10 + 1.792 x 5 + 8)
            = min(35, 10 + 8.96 + 8)
            = min(35, 26.96)
            = 26.96  (clamped below 35 ceiling)

输出:

  • adjusted_valuation = 30 x (1 - 0.2696) = $21.91
  • haircut_pct = 26.96
  • classification_rationale:「具有 6 位知情竞标者且信号差异中等的共同价值目标。中标有力表明估值过高;适用 Kagel-Levin 实验研究中的 15-30% 区间。」
  • applied:true

对比——私人价值情形:同样的 raw_valuation = $30,但 value_type = private_value(该目标对这位竞标者有独特价值)。折价 = 0。调整后 = $30。applied = false。理由:「不存在信息不对称折价;中标并非负面信号,因为其他竞标者对该目标的估值并不相似。」

工作流

复制此清单并跟踪进度:

Winner's-Curse Haircut Progress:
- [ ] Step 1: Classify value_type (common / private / mixed)
- [ ] Step 2: Validate inputs (range checks, N >= 1)
- [ ] Step 3: Short-circuit for private-value
- [ ] Step 4: Compute haircut_pct via formula
- [ ] Step 5: Apply haircut to raw_valuation
- [ ] Step 6: Emit structured output with rationale

步骤 1:分类 value_type

分类需要作出判断,且必须明确。调用方应传入该值;此技能会根据 resources/template.md 中的决策树验证选择。

  • common_value——由于信息共享且标的数量相同,所有竞标者对目标的估值相似(例如:豁免名单中指定的终结者、头条新闻中的新秀升入大联盟、要约收购中的上市股票、流动性强的大宗商品)
  • private_value——由于适配性、互补性或个体偏好等原因,该竞标者对目标的估值明显高于(或低于)其他人(例如:你已拥有的中继投手的替补、适合你阵容的左右打者搭配、紧邻现有房产的房屋)
  • mixed——目标既有共享的核心价值,也有私人价值增量(例如:赛季后期 FAAB 认领状态火热的打者,所有人都认同基础预测,但该竞标者有额外的特定类别需求)

步骤 2:验证输入

  • raw_valuation 是有限的非负数值
  • value_type 是三个允许的字符串之一
  • n_informed_bidders 是整数且 >= 1(如果数值异常,例如 50,则限制在上限以内)
  • signal_dispersion 在 [0, 100] 范围内

步骤 3:对私人价值情形提前结束

如果 value_type == "private_value",则完全跳过公式:

  • haircut_pct = 0
  • adjusted_valuation = raw_valuation
  • applied = false

关于提前结束为何正确的贝叶斯原理,请参阅 resources/methodology.md。

步骤 4:计算折价百分比

对于 common_value 目标:

haircut_pct = min(35, 10 + log(N) x 5 + signal_dispersion x 0.2)

min(35, ...) 上限将折价硬性限制在 35%,即使 N 和差异程度极高也不例外。这是因为 Kagel-Levin 的实证估计很少超过 30%;35% 是外部界限。

对于 mixed 目标,进行插值:

mix_common_weight  = 0.6  (default; caller may override)
mix_private_weight = 1 - mix_common_weight
haircut_pct = mix_common_weight x (common_value_haircut) + mix_private_weight x 0

关于公式的直觉说明,请参阅 resources/methodology.md(log-N 表示竞争者增多时逆向选择的严重程度随之上升;线性差异项表示竞标者估值的方差)。

步骤 5:应用折价

adjusted_valuation = raw_valuation x (1 - haircut_pct / 100)

步骤 6:输出结构化结果

返回:

{
  "adjusted_valuation": <number>,
  "haircut_pct": <number in [0, 35]>,
  "classification_rationale": "<one-sentence justification>",
  "applied": <bool>
}

使用 resources/evaluators/rubric_auction_winners_curse_haircut.json 进行验证。最低标准:平均分 >= 3.5。

常见模式

模式 1:热门共同价值标的,竞标者众多

  • 示例:幻想体育 FAAB 中的百大新秀升入大联盟(N=6-8);高关注度事件的预测市场合约;由多家投资银行承接的并购目标
  • 典型输入:N 在 [5, 10] 范围内,signal_dispersion 在 [30, 60] 范围内
  • 典型折扣:22-32%
  • 原因:存在强烈的逆向选择;几乎可以肯定,只有当你是多个相近估值中出价最高的人时才会中标
  • 注意事项:不要与第一价格拍卖的压价重复计算——这是两项独立的修正(压价请参见 auction-first-price-shading)

模式 2:私人价值互补品(手铐)

  • 示例:你自己的终结者投手的替补中继投手;与你已拥有的土地相邻的土地;只有与你的收藏组合在一起才合适的拼图片
  • 典型输入:N = 1-2,value_type = private_value
  • 典型折扣:0%(直接跳过计算)
  • 原因:不存在逆向选择——中标并不能说明你高估了价值,因为其他人对该标的的估值确实较低
  • 注意事项:确保私人价值的判断属实。如果还有三位竞标者也有互补用途,那么它就更接近共同价值

模式 3:赛季末混合型临时认领

  • 示例:大家对其预测一致的状态火热的击球手,但他恰好能满足你特定的类别需求;广告拍卖中的关键词,其每次点击费用有一个共同基准,但某位竞标者的转化率会额外提升
  • 典型输入:N 在 [3, 5] 范围内,signal_dispersion 在 [20, 40] 范围内,value_type = mixed,mix_common_weight 约为 0.5-0.7
  • 典型折扣:10-18%
  • 原因:部分存在逆向选择,部分属于私人价值
  • 注意事项:明确估算并记录共同价值与私人价值的比例;如果适用清晰的二元分类,不要默认选择混合型

模式 4:竞标者较少的共同价值标的

  • 示例:小型拍卖池中的小众共同价值标的(N = 2)
  • 典型输入:N = 2,离散度不限
  • 典型折扣:14-18%
  • 原因:即使只有 2 位竞标者,共同价值的赢家诅咒仍然存在——中标意味着你的估值高于另一位知情竞标者的估值。不过,由于逆向选择的严重程度随 log(N) 增长,因此折扣仍小于竞标者众多的情况
  • 注意事项:不要仅仅因为 N 较低就将折扣设为 0;私人价值需要另行证明估值存在差异

防护规则

  1. 必须明确分类。 切勿根据其他输入默默推断 value_type。调用方传入该值;此技能负责验证。缺少分类或分类不明确都属于错误,不能使用默认值。

  2. 私有价值的短路处理是绝对的。 如果调用方声明为私有价值,则折价为零,即使 N 很大也是如此。这是合理的:如果其他人确实认为目标的价值较低,那么他们的出价就不会对你自己的估值提供不利信息。

  3. 切勿将此折价与另一种赢家诅咒修正叠加。 已经应用贝叶斯出价折减的下游系统(例如 auction-first-price-shading 的 N 竞标者折减)修正的是另一种现象(为获取预期剩余而进行的策略性折减)。可以同时应用两种修正;但每种都不要重复应用。

  4. 上限为 35%。 Kagel-Levin 的实证范围为 15-30%。35% 的上限为非常大的 N 和高离散度留出了余量,同时避免公式产生荒谬的折扣(例如 80%)。

  5. N >= 1。 N = 1 表示竞标者只有一位;log(1) = 0,因此公式会得出 haircut_pct = 10 + signal_dispersion x 0.2。对于真正的买方垄断(没有竞争的知情竞标者),调用方应传入 private_value;没有竞争者就不存在逆向选择机制。

  6. 信号离散度是代理指标,而非测量值。 实际中它很少能直接观测到。可根据以下信息估算:可比拍卖的历史出价差、公共预测系统之间的分歧程度,或公共信息不对称程度。请记录估算依据。

  7. 混合价值需要显式权重。 不要默默使用 0.6 作为默认值。调用方应说明共同价值与私有价值的占比及其依据。如果无法说明,则应分类为 common_value(保守)或 private_value(激进),而非 mixed。

  8. 领域中立的约定。 此技能不了解 FAAB、幻想棒球或任何特定的拍卖环境。调用方应将其领域输入转换为通用的四字段约定;此技能返回通用输出,由调用方负责解读。

快速参考

核心公式:

if value_type == "private_value":
    haircut_pct = 0
    applied = false

elif value_type == "common_value":
    haircut_pct = min(35, 10 + log(N) x 5 + signal_dispersion x 0.2)
    applied = true

elif value_type == "mixed":
    common_haircut = min(35, 10 + log(N) x 5 + signal_dispersion x 0.2)
    haircut_pct = mix_common_weight x common_haircut   # default 0.6
    applied = true

adjusted_valuation = raw_valuation x (1 - haircut_pct / 100)

折价对照表(common_value,近似值):

Ndispersion=0dispersion=25dispersion=50dispersion=100
110.0%15.0%20.0%30.0%
213.5%18.5%23.5%33.5%
416.9%21.9%26.9%35.0%(上限)
619.0%24.0%29.0%35.0%(上限)
820.4%25.4%30.4%35.0%(上限)
1222.4%27.4%32.4%35.0%(上限)

输入约定:

字段类型范围必填
raw_valuationnumber>= 0是
value_typestringcommon_value / private_value / mixed是
n_informed_biddersint>= 1是
signal_dispersionnumber[0, 100]是
mix_common_weightnumber[0, 1]仅当为 mixed 时(默认值 0.6)

输出约定:

字段类型范围
adjusted_valuationnumber[0, raw_valuation]
haircut_pctnumber[0, 40]
classification_rationalestring一句话
appliedbool仅当为私有价值时为 false

关键资源:

评论

支持 Markdown