從靈感到證偽——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這個區間的統計特徵不夠顯著,我們仍然能夠繼續進行研究。
原因有三:
- 效應量足夠大: +17%偏差是全表最大的。即使統計上邊際(有一點信號但不夠顯著),經濟意義上值得繼續研究——如果它是真的,這是一個可交易的信號。+17% 的偏差即使統計上只是邊際的,一旦是真的就是巨大的 edge——值得繼續花時間去搞清楚它到底是噪聲還是真信號,而不是直接扔掉。
- 時間分割提供了獨立證據: 3天都有正偏差(+18%, +21%, +9%),這不是同一個統計檢驗的重複,而是額外的穩健性證據。
- 統計不顯著不代表不值得繼續探索: 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.072 | 57% | 52% |
| t=30s | +0.200 | 62% | 58% |
| t=60s | +0.306 | 67% | 62% |
| t=120s | +0.498 | 75% | 71% |
| t=150s | +0.558 | 75% | 75% |
| t=240s | +0.687 | 84% | 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:
| 觀測時刻 | r | BUY淨edge | SELL淨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/ 結論:證偽
研究到這裡,結論已經很清楚了:
- Favorite-Longshot Bias假說被否定——calibration table上的"偏差"經過CI和Bonferroni校正後,絕大部分是噪聲
- 存在一個統計上極強的信號(delta_mid vs 結算方向,r最高達0.687)——但它很大程度上是"mid接近結算時≈結算結果"的同義反復
- 信號無法轉化為利潤——市場ask價格在每個時間點都忠實追蹤了這個信號,扣除3%交易成本後淨edge為負
- 信號的因果歸因("動量"還是"價位")無法區分——但對交易決策而言,這個問題不重要
整個研究的終點是一個被正確reject的策略。沒有找到能賺錢的因子,但學到了幾條重要的教訓:
信號 ≠ 利潤。 一個被充分定價的信號可以有完美的預測力和零盈利能力。
沒有置信區間的數字就是噪聲。 小樣本下任何百分比都可以看起來很"顯著"。
統計量的大小 ≠ 可交易性。 r=0.575看起來是極強信號,但逐時刻分解後發現它主要反映的是mid在收斂到結算結果——這是市場運行的自然規律,不是可利用的inefficiency。
你賺的每一分錢,都是某個對手方虧的。如果你說不清對手方是誰,大概率你就是森林的獵物。 在這個市場裡,做市商把方向性的edge吃得乾乾淨淨。散戶確實在虧錢——但虧給了做市商,而我目前很難去分一杯羹。