← 返回首页

从灵感到证伪——Polymarket一个想法的研究始末

·14 分钟阅读·Crypto

预测市场是个很有意思的地方,人们用真金白银为自己的看法定价——没有什么能够比金钱的流向更能体现信息、反映人们真实的想法。

这个市场还很新,既然是蓝海,便有套利者、投机客的生存空间。高中的时候老师讲过一个案例,有人用天气、新闻、温度等等因子建了一个模型去预测赛马结果,准确率极高。Polymarket本质上就是同一件事——只不过赌的不是马,而是BTC的涨跌、选举的结果、政策的走向。在这里跟形形色色的人博弈特别有意思。

我把研究方向聚焦在细分 5min 和 15min BTC 涨跌预测领域

灵感最开始来自期中周的一个晚上,我想,能不能用随机过程建模这个BTC涨跌二元期权的fair price,和市场价格做对比来找mispricing的部分。一开始,我用最简单的几何布朗运动(GBM)来建模,用BTC年波动率来推算固定的σ。但回测后发现p值并不显著,数据量翻倍后收益率也收缩近0,edge无法覆盖交易成本。

实际上做建模找mispricing是做市商最擅长的事情,这个市场的定价已经做的足够好了。这里的对手是有着低费率、高基建的做市商,他们把这方向的edge早吃得差不多了。所以,再在这里优化建模模型并没有意义,多几分毛利并不会改变我在这里的结构性劣势,于是我想着能不能找另一波更加幼稚的对手。丛林里,最显著的猎物便是散户赌客。在网上找了一些被其他市场验证过的理论,我便开始了下一个研究方向——散户系统性高估小概率事件 (Favorite-Longshot Bias)。

找成熟市场被研究透、验证过的理论套到新兴市场上,是很不错的产生灵感的方法。

0/ 数据起点

Polymarket没有开放历史ticks数据的接口,只能连websocket自己爬取收集,所以一开始,我的数据量极少,只有几天。这也直接导致后来我在统计检验犯了很多错误。

1/ 假说与初步验证

起点假说: 散户系统性高估小概率事件 → YES token 在低价位被高估 → SELL YES 有正期望。

验证方法: Calibration table,按 mid 价格分10档,比较实际 UP 率 vs 市场定价。

初步结果(3.21-3.23共424窗口)看似支持假说:

  • mid 0.20-0.30: 实际 12.9% vs 定价 25.6%,偏差 -12.7%
  • mid 0.60-0.70: 实际 81.8% vs 定价 64.9%,偏差 +16.9%

此时我以为发现了"严重高估"和"严重低估"。

核心问题在于,我这里看到的是一个点估计(point estimate),但点估计在小样本下极不稳定。 12.9% vs 25.6%的"偏差",可能是市场真的错了,也可能纯粹是这31个样本恰好运气差。没有额外工具,你无法区分这两种情况。比如你扔一枚公平硬币(真实概率50%),但只扔10次。你完全可能得到7次正面、3次反面,算出来"正面率70%"。这并不意味着硬币有偏——这只是小样本的随机波动

教训是没有置信区间的描述性统计毫无意义。样本量小时,任何百分比看起来都可以很"显著"。所以,我们需要区间推断 (interval inference)来回答到底"真实概率的合理范围是什么"。

2/ 置信区间

对于小样本或极端比例,我们用Wilson score interval而不是普通的CI。

对于mid 0.20-0.30,这里只有31个样本,Wilson 95% CI = [3.5%, 25.6%]。市场定价25.6%在CI边缘——无法区分市场错误和随机波动。也就是说,这里的偏差完全有可能只是随机噪声。

逐档位检验后:10个档位中只有1个(0.60-0.70)的市场定价落在CI外。 其他9个"偏差"全是噪声。

3/ 多重比较问题

感谢川总的DDA3600,在这里我学到了辨别伪alpha的方法。

(同样的思路也可以用来处理参数优化过拟合问题。

每一次检验,我用的标准是 p < 0.05,即:

"如果市场定价其实是完美准确的(零偏差),我观察到这么大或更大偏差的概率小于5%。"

单独看一个档位没问题,但这里我做了十次。

对于p < 0.05 的检验,做1次的假阳性概率是5%;做10次,至少一个假阳性的概率是40.1%!

所以,这里需要对p值做修正。方法有很多,这里我们以控制整体假阳性率为思路,用Bonferroni校正。

Bonferroni的想法极其简单:想让整体假阳性率(family-wise error rate, FWER)控制在 α = 0.05。对于做了 k 次检验。那就把每次检验的门槛收紧到 α/k

在这个case里,k等于10,即单个档位的p值要小于0.005,才能算"发现"。

对于那个落在CI外的 0.60-0.70 区间,其原始p值≈0.008(z=2.40),Bonferroni校正后 p=0.008×10=0.08,未通过0.05门槛。这个调查最终否定了FLB假说,严格的Bonferroni否定了我们在这个区间推进原先"系统性高估小概率事件假说"策略的想法,但即使0.60-0.70这个区间的统计特征不够显著,我们仍然能够继续进行研究。

原因有三:

  1. 效应量足够大: +17%偏差是全表最大的。即使统计上边际(有一点信号但不够显著),经济意义上值得继续研究——如果它是真的,这是一个可交易的信号。+17% 的偏差即使统计上只是边际的,一旦是真的就是巨大的 edge——值得继续花时间去搞清楚它到底是噪声还是真信号,而不是直接扔掉。
  2. 时间分割提供了独立证据: 3天都有正偏差(+18%, +21%, +9%),这不是同一个统计检验的重复,而是额外的稳健性证据。
  3. 统计不显著不代表不值得继续探索: Bonferroni校正回答的是"要不要拿真金白银下注",不是"要不要继续调查机制"。在探索阶段,一个边际显著+大效应量的发现值得追问"为什么"——即使最终答案是"这是假的",理解它为什么看起来像真的也有价值(事实证明确实如此:我们的深入调查揭示了动量机制)。

4/ 现象归因

经过置信区间和Bonferroni校正,我手里剩下一个事实:

"0.60-0.70 这个档位,市场定价约65%,实际UP率约82%,偏差+17%。效应量大,时间分割3天一致,值得继续调查。"

从这里,是否能够证明我们一开始的散户系统性高估小概率事件假说 (Favorite-Longshot Bias)是正确的,从而得出结论"市场在mid=0.65时系统性低估了UP概率,应该在这个价位买YES token"呢?

并不行。我们手中事实背后的机制尚不清晰,同一个现象可以有完全不同的原因。

这里,我们面对的是两个互相竞争的假说,它们都能解释"0.60-0.70档位实际UP率高于市场定价"这个现象:

假说A:定价偏差(Pricing Bias)

市场在 mid = 0.65 时,系统性低估了UP的概率。

不管mid是怎么到0.65的,只要它在0.65,市场就定低了。

如果A是真的:

  • 这是一个静态的市场缺陷
  • 策略很简单:只要看到 mid 在 0.60-0.70,就买 YES
  • mid 是怎么到这个价位的无所谓

假说B:动量持续(Momentum Continuation)

mid 到达 0.65 的路径才是关键。

如果 mid 是从 0.50 涨上来到 0.65 的,那BTC正在涨,涨势可能继续,所以UP率高。

不是"0.65这个价位被低估",而是"涨到0.65这个过程预测了继续涨"。

如果B是真的:

  • 偏差不是市场定价的错误,而是动量信号的投影
  • 0.60-0.70只是恰好捕获了"正在上涨"的窗口
  • 真正的信号不是价位,而是价格变化的方向

这两个假说导向完全不同的策略。 如果不区分它们就直接交易,可能会基于错误的因果关系做决策。

所以我们要做一个关键检验,对0.60-0.70档位的52个窗口,看mid是怎么到达这个价位的。

(这一步本质上是在做混淆变量控制(confounding variable control)。)

结果是,48/52个窗口是"从低处涨上来",0个窗口是"从高处跌下来"。这个数据能够让我们归因到"假说B 动量驱动"吗?

并不能。48/52从低处涨上来,只能说明数据构成,不能证明因果。"从低处涨上来"和"mid处于0.65"完全纠缠在一起(混淆confounding),无法分离。

那要怎么对这两个因子做分离归因呢?我尝试用Logistic regression做回归来分离。

Logistic regression 的核心能力是:当你把两个变量同时放进模型,它会尝试分离各自的独立贡献。

目前我们有两个候选解释变量:

  • mid_level:当前mid的绝对价位(比如0.65)
  • delta_mid:mid从开盘到现在的变化量(比如+0.15)

想知道:UP率高,到底是因为价位高(假说A),还是因为涨了很多(假说B)?

建模:

P(UP) = σ(β₀ + β₁·mid_level + β₂·delta_mid)

这个模型问的是:

在delta_mid相同的情况下,mid_level每高1个单位,UP概率变化多少?

在mid_level相同的情况下,delta_mid每大1个单位,UP概率变化多少?

如果回归能正常工作,就能直接读结果:

  • β₁显著、β₂不显著 → A赢,价位本身有独立效应
  • β₁不显著、β₂显著 → B赢,动量才是驱动力
  • 两个都显著 → A和B都有贡献

结果出来了:

mid_level: β₁=+5.622, p=0.0004

delta_mid: β₂=+0.271, p=0.863

初看似乎"价位赢了动量输了"——但这个结果不可信。

还有一个很重要的待检验因素——多重共线性检验。

我们测出Correlation(mid_level, delta_mid) = 0.972,亦即知道了其中一个,你就几乎完美地知道了另一个。Correlation=0.972意味着logistic regression无法可靠地分离这两个变量。效应被"随机"归给了mid_level,delta_mid的p值被人为拉高。这是经典的共线性伪影,不是真实的因果分离。

一个教训是,高共线性(r>0.9)下回归系数的归因毫无意义。应该先检查相关性再解读系数。

并且,80%的窗口 mid_start 在0.45-0.55,因此 mid_level ≈ 0.50 + delta_mid——两个变量在数学上近乎等价。

因而,这个问题在当前数据下无解,我们无法真正拒绝假说A或者假说B。在当下的数据集,mid_start没有足够的变异。

5/ 信号分析

对交易来说,归因问题不重要。归因不改变交易结果。重要的是,这个信号已经在这里,它究竟有多强,能不能用来赚钱?不管这个信号的原因是"动量"还是"价位",我们看重的是它能否被用来交易。

归因重要的唯一场景是:你想把信号泛化到其他市场。如果是动量驱动,可能在DEX和CEX上也有效;如果是价位特性,就是Polymarket BTC涨跌预测特有的。

因而在这里,我们要做最重要的一步,验证这个信号(不管叫什么名字)是否已经被市场定价。

我们想知道,这个信号(delta_mid代理越大,UP的概率是否越高?

Spearman做排序检验,得出r = 0.575,p < 0.000001。看起来delta_mid几乎可以直接告诉你结算方向。

但这个r=0.575是在什么时刻测的?delta_mid的值取决于你在窗口内的哪个时间点观测。把每个时间点的r都算出来时,出现了一个意想不到的规律:

观测时刻Spearman r涨→UP跌→DOWN
t=10s+0.07257%52%
t=30s+0.20062%58%
t=60s+0.30667%62%
t=120s+0.49875%71%
t=150s+0.55875%75%
t=240s+0.68784%80%

r单调递增——从t=10s的0.072一路涨到t=240s的0.687。之前报的r=0.575是在t≈150s(窗口中点)计算的。

这不是"动量信号越来越强",而是一个更简单的事实:越接近结算,mid越接近最终结果。5分钟窗口一共300秒,t=240s时离结算只剩60秒——mid几乎就是结算价本身,r当然高。这在很大程度上是同义反复(tautology),而非真正的预测力。

6/ 关键问题:能赚钱吗?

到这里,我们已经知道这个信号在统计上是"真的"——delta_mid确实和结算方向高度相关。但量化研究里最重要的一课是:信号的强度不等于盈利能力。

一个类比:股票的年度盈利增长和股价涨跌高度相关(r可能接近1)。但你不能靠"买盈利增长的股票"赚钱——因为股价已经反映了盈利预期。你买入时的价格已经"price in"了这个信息。

同样的问题适用于这里:当delta_mid很大(mid在涨)时,YES token的ask价格也在涨。如果ask价格涨得和UP率一样快,那信号再强也赚不到钱。

所以真正决定胜负的不是"信号有多强",而是:

edge = UP率 - ask价格 - 交易成本

按每个时间点算这个edge:

观测时刻rBUY净edgeSELL净edge
t=10s+0.072-0.059-0.119
t=30s+0.200-0.020-0.049
t=60s+0.306+0.014-0.036
t=120s+0.498+0.017-0.033
t=150s+0.558+0.018-0.024
t=240s+0.687-0.027-0.029

净edge在所有时刻都接近零或为负。 市场在每个时间点的定价都足够准确——做市商的ask价格忠实地跟踪着UP率的变化,留给方向性交易者的空间几乎为零。

这张表还揭示了一个根本性的trade-off:

  • 观测越早(t=10s),ask价格低(便宜),但信号弱(r=0.072),UP率和50%差不多——你不知道该买还是该卖
  • 观测越晚(t=240s),信号强(r=0.687),但ask价格已经追上了UP率——你知道该买什么,但价格不再便宜

最佳r(t=240s)和最佳edge(t=40s)出现在完全不同的时刻。 信号最清晰的时候恰恰是最赚不到钱的时候——因为做市商和你看到的是同一个信息。

SELL方向在所有时刻都为负,说明市场对下跌的定价更加准确。

7/ 结论:证伪

研究到这里,结论已经很清楚了:

  1. Favorite-Longshot Bias假说被否定——calibration table上的"偏差"经过CI和Bonferroni校正后,绝大部分是噪声
  2. 存在一个统计上极强的信号(delta_mid vs 结算方向,r最高达0.687)——但它很大程度上是"mid接近结算时≈结算结果"的同义反复
  3. 信号无法转化为利润——市场ask价格在每个时间点都忠实追踪了这个信号,扣除3%交易成本后净edge为负
  4. 信号的因果归因("动量"还是"价位")无法区分——但对交易决策而言,这个问题不重要

整个研究的终点是一个被正确reject的策略。没有找到能赚钱的因子,但学到了几条重要的教训:

信号 ≠ 利润。 一个被充分定价的信号可以有完美的预测力和零盈利能力。

没有置信区间的数字就是噪声。 小样本下任何百分比都可以看起来很"显著"。

统计量的大小 ≠ 可交易性。 r=0.575看起来是极强信号,但逐时刻分解后发现它主要反映的是mid在收敛到结算结果——这是市场运行的自然规律,不是可利用的inefficiency。

你赚的每一分钱,都是某个对手方亏的。如果你说不清对手方是谁,大概率你就是森林的猎物。 在这个市场里,做市商把方向性的edge吃得干干净净。散户确实在亏钱——但亏给了做市商,而我目前很难去分一杯羹。