2016年3月31日 星期四

賭波的初哥方式-Least Square Estimation & Elo Rating System

星期三放假在家,空閒的時間再嘗試一下去年的足球博彩模型。當時因為自己讀過點數學和統計,一直想有點實際的應用;朋友V想用模型預測球賽結果和博彩,而我工作時又會弄點程式來方便日常工作,所以去年就和我嘗試提高預測球賽結果的賺錢機會,以及做點自動化的工具。

去年,加入的是一個為每隊評分的方法。假設每隊有一個代表綜合實力的分數-Rating,而得失球的差-Score只是兩隊分數的差。用過往每隊的對賽結果,放入一個方程組(System of Linear Equations) $\underline{HA \times teamRank=Score}$ 去求最小方差(Least square estimation)的解,就可以反求出這些分數。
$$
\begin{bmatrix}
1 & 0 & 0 & -1 \\
0 & 1 & -1 & 0 \\
-1 & 0 & 1 & 0 \\
0 & -1 & 0 & 1 \\
0 & 0 & -1 & 1 \\
-1 & 1 & 0 & 0 \\
0 & 0 & 1 & -1 \\
1 & -1 & 0 & 0 \\
1 & 0 & 0 & -1 \\
-1 & 0 & 0 & 1 \\
0 & -1 & 1 & 0 \\
0 & 1 & 0 & -1 \\
0 & 1 & 0 & -1 \end{bmatrix}
\times
\begin{bmatrix}
1.375 \\
2 \\
-2.5 \\
-0.875 \end{bmatrix}
=
\begin{bmatrix}
2 \\
8 \\
-5 \\
-1 \\
4 \\
1 \\
1 \\
0 \\
-3 \\
-2 \\
2 \\
4 \end{bmatrix}$$
當然,我們想做的是把這些運算交給電腦。當只要做好數據的準備,在R上除了數據的輸入和顯示外,重要的運算就只是一行Coding:
teamRank = ginv(HA) %*% score;
以2013-2014年度英超對賽的紀錄作計算,最好幾隊分別是:
  1. 曼城=1.625
  2. 利物浦=1.275
  3. 車路士=1.1
  4. 阿仙奴=0.675
  5. 愛華頓=0.55
假如曼城和愛華頓對賽,期望值為曼城勝愛華頓1.125球。但只用一個期望值還未能反映這些隨機變數的離散程度,所以要看見多大的期望值才有信心下注?在求出得失球差的分佈之前,這還是要靠主觀觀察/回溯測試來判斷。



個多星期前,事源AlphaGo挑戰韓國棋手的新聞後,留意到象棋界的棋手評分用的是一套叫Elo Rating System的方法。它考慮兩個棋手對賽前各自的評分,然後按對賽結果調整兩者評分。戰勝相對水平愈高的對手,評分加得愈多。
$$R'_A=R_A+K(S_A-E_A)$$
$$E_A=\frac{1}{1+10^{(R_A-R_B)/400}}$$

今次在了解背後數學之前,先嘗試應用。在馬會找到歐聯今季的對賽記錄,因為很多外圍賽的隊伍出賽一戰後根本無緣再會,所以只用了分組賽開始的32強對賽紀錄作1st Training Set, 16強的兩輪作Testing Set 及 更新估算過程。把這些都放進Excel表中,設定初始評分和K值,然後就是把相同的公式向下拉,讓評分隨比賽紀錄不斷更新。

而這套方法的好處是可以寫出預測獲勝的機率,當馬會開始受注而提供賠率時,就可以考慮用凱利公式作注碼的參考。比較兩套方法時,兩者對勝負的指向大致相同,"LSE Ratings Difference" 和 "Elo Rating的獲勝率" 的圖表示如下。看來是同留意因為軸的性質不同,這條帶伸展開來的話應該是S型而非直線,所以這裡就無所謂「Linear Correlation」。


記到這裡,沒有實際結果的空談也沒有什麼意思,用最後一輪的試驗結果,16強次輪回合的對賽,可以看到沒有很令人興奮的準確性,因為關鍵還是:1)要設定多強的訊號才進場,也就是多大的勝算才是有勝算?2)高勝算時馬會的賠率應該也會很低。到底一場賽事中馬會收取費用後的賠率是不是已經消除掉所有期望回報?
還有一個問題,各場賽事可以視為獨立事件,我們可以控制每場的注碼分佈。但同一場賽事中的主客和卻不是獨立的事件,而是Mutually Exclusive,我們選擇站邊時,到底該怎樣選呢?是贏面大的那隊,還是贏面乘賠率的Expected Value?今次當賠率出現後試著看吧。


下一步:儘快實驗。的確現在未有足夠的賠率數據做測試,在條件未算顯著的情況下,小試牛刀。八強首輪的賽事會選:巴黎聖日耳門、拜仁慕尼黑、巴塞隆拿。更重要是注碼的決定,假設主隊賠率是1.5,注碼按每場勝算的不同大概是在11-22%。實際情況等賠率數字出現後就可以更新。


沒有留言:

張貼留言