Lambert Lin林

從靈感到證偽——Polymarket一個想法的研究始末

加密 · · 閱讀 14 分鐘 · 思考

預測市場是個很有意思的地方,人們用真金白銀為自己的看法定價——沒有什麼能夠比金錢的流向更能體現信息、反映人們真實的想法。

這個市場還很新,既然是藍海,便有套利者、投機客的生存空間。高中的時候老師講過一個案例,有人用天氣、新聞、溫度等等因子建了一個模型去預測賽馬結果,準確率極高。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吃得乾乾淨淨。散戶確實在虧錢——但虧給了做市商,而我目前很難去分一杯羹。