第100天: 三木板模型算法項目實戰

by 戴景波

機器學習

本篇同樣是機器學習,雖然沒有用到python中已有的算法和函數,但借鑑了機器學習中的思路。

這篇機器學習建模的思路比較新穎,模型評估也比較獨特。旨在引導廣大讀者借鑑,舉一反三。

只是通過足球領域舉例,可擴展到其他任何領域,達到拋磚引玉的目的。

機器學習建模

建模思路:選取三家菠菜公司的主隊勝賠率(每個公司都會給出初始勝、平、負三個賠率)作爲組合對象與歷史數據的三家賠率組合比較。

統計出歷史比賽結果標籤y/n的數量,y代表主隊獲勝,n代表主隊不勝(即主隊平或負)。

並輸出符合條件“y>nX3或n>yX3”的結果(3爲參數,目前尚未調整過此參數)。如果暫未理解思路,也不用擔心,馬上將結合實例講解。

這裏有兩處三,爲什麼取值爲三,這依據了肘部法則(畸變程度的改善效果下降幅度最大的位置就是肘部),而且經過實踐證明了其他諸如二、四、五等值在預測結果準確率上遠不如三。可以參考文末的論文。

舉例:以下是爬蟲爬取的歷史數據,每個值都是公司給出的主隊第一個賠率也就是獲勝的賠率:(以下均以存儲在Excel爲例)

比賽場次		ysb	li	b5	sna	wl	ms	ao	pin	y爲勝	聯賽類型
20191202週日040	1.76	1.75	1.75	1.7	1.78	1.75	1.67	1.82	n	 挪超 
20191202週日039	1.81	1.7	1.83	1.75	1.8	1.8	1.75	1.75	n	 挪超 
20191202週日038	1.53	1.57	1.5	1.5	1.52	1.53	0	1.59	y	 挪超 
20191202週日037	2.03	0	2.1	2.05	2.05	2.03	1.97	2.27	y	 挪超 
20191202週日036	1.79	1.87	1.75	1.7	1.78	1.79	1.7	1.99	y	 挪超 
20191202週日035	2.7	2.4	2.88	2.6	2.55	2.58	2.55	2.63	n	 挪超 
20191202週日031	2.23	2.25	2.25	2.3	2.2	2.25	2.12	2.29	n	 德甲 
20191202週日029	1.72	1.91	1.73	1.85	1.88	1.85	1.72	1.89	y	 英超 
20191202週日028	1.53	1.5	1.5	1.5	1.5	1.49	1.48	1.51	y	 俄超 
20191201週日024	2.25	2.25	2.15	2.3	2.25	2.24	0	2.3	n	 西甲 
20191201週日023	1.66	1.7	1.67	1.7	1.67	1.69	1.53	1.71	y	 德甲 

下邊是未來要預測的一場比賽:

20190920週四   2.14     2.15    2.1     2.1     2.2     2.1     2.08   2.12            歐聯杯

三木板模型算法

選取未來這場比賽中8個特徵中的任何三個特徵組合(如2.14,2.15,2.1)與歷史數據所有行中對應特徵(易勝博、立博、bet365)組合進行比對。

發現三個特徵值完全相同就統計res列比賽結果y或n的數量。循環其他任意三個特徵組合,如(ysb,li,sna)與歷史上所有(ysb,li,sna)做精確匹配。

記錄當前這場歐聯杯比賽在這個組合賠率上歷史比賽主隊獲勝的場次c1和主隊不勝的場次c2,如果c1>3倍的c2或c2>3倍的c1,則記錄,其他同理,一直到取完56(C83)種組合爲止。

也就是說如果歷史數據中存在組合對象結果y大於3倍的n時,記錄。或n大於3倍的y時,也同樣記錄。最後根據綜合結果來預測未來的這場比賽可能出現的比賽結果。

實際結果	信心指數	預測結果	2018.1-至今歷史數據	2018.1-至今:歐洲數據	2018.5-至今
y	1.34 	  y							,lwa_yes_8_2

以上邊未來預測的那場比賽爲例,最後三列是計算預測結果,其中最後一列得到的結果是lwa_yes_8_2,表示在(li,wl,ao)這三個賠率組合與歷史數據比較時,

有8場比賽對應的這三個賠率與這場比賽的賠率相同且結果爲主隊獲勝。有2場比賽對應的這三個賠率與這場比賽相同且結果爲主隊不勝。

那麼yes代表主隊獲勝,在預測結果列輸出y,獲勝的信心指數爲(8-2X3)X權重,權重會在下邊評估模型中講到。

然而在2018.1-至今歷史數據和2018.1-至今:歐洲數據兩個階段的歷史數據中,沒有輸出的結果,表明任何三個賠率的組合在歷史數據中都沒有主隊勝和不勝結果超出3倍的情形,所以不記錄。

評估模型

評估模型的建立是爲了對建立的機器學習模型進行有效評估,對預測正確的部分進行加強學習,對預測錯誤的部分進行權重調整,從而達到完善模型的目的。

建立評估模型,旨在選擇信心場次,信心場次代表預測的多個比賽中哪些的預測結果出現概率較大。

原理:列出所有C83共56種組合對象,每一列代表一個組合。

用正向激勵和反向激勵統計出哪些組合對比賽結果有較大的影響,作爲今後選擇信心場次的優先依據。

比賽場次       結果	pre-ok		sum	ol5	olin	olwl	olw	olao	ol10	o5in	o5wl ...
Sum(正向激勵)	      1爲預測正確		373	293	451	363	138	457	353	391
<0(反向激勵)				87	50	67	65	31	61	55	87
20190224週日030	y	1		11				3	1			1
		y			11				5				1
		y			9				2	2			1
20190224週日027	y	0		-19								
		y			-15								
		y			-24			-4			-3		

第一行爲賠率組合(56個組合);

第二行爲正向激勵數量,即預測結果正確時各個賠率組合的數量,此時場次對應的值爲正數,E列373的公式求和爲“=SUM(E4:E65471)”,是所有已預測比賽中(ao,li,b5)組合預測正確的數量。

第三行爲反向激勵數量,即預測結果錯誤時各個賠率組合的數量,E列50的公式求和爲“=SUM(E4:E65471)”,是所有已預測比賽中(ao,li,b5)組合預測錯誤的數量。

第四行的最後幾列的3、1、1,計算公式爲歷史數據中比賽結果標籤y/n中“多”的數量減去3倍“少”的數量C多-C少X3,如3=4-1X1(歷史上存在4場比賽olw三個賠率與這場比賽相同且主隊獲勝)。

此時場次對應的值爲負數;如第九行的-4、-3,計算公式爲歷史數據中比賽結果標籤y/n中多的數量減去3倍少的數量取負值。-(C多-C少X3)。

爲進一步量化模型,新增了信心指數中的權重:權重=(>0的數量/sum總數)

res	信心指數	預測結果	2018.1-至今歷史數據	2018.1-至今:歐洲數據	2018.5-至今
y	1.34 	y				,lw10_yes_8_2
y	9.10 	y	,iw10_yes_6_0		,iw10_yes_4_0		,iw10_yes_4_0
changci 	lw10	liao10	5inwl	5inw	5inao	5wlw	5in10	...
sum		151	62	220	279	66	468	166	
>0		133	41	143	173	47	237	116	
<0		65	13	49	74	15	96	57	
權重		0.67	0.76 	0.74 	0.70	0.76	0.71 	0.67	

以第一行爲例,這場比賽的信心指數={歷史數據中主隊獲勝數量-(主隊不勝的數量X3) X 對應的權重}:(8-2X3)X 0.67 = 1.34。

評估模型能夠進一步量化數據從而得出權重,而這個權重是隨着歷史數據增加而實時調整的。

同時,評估模型中使用了bagging算法思想,以歷史數據中不同階段作爲不同的訓練集,例如2018.1-至今歷史數據、2018.5-至今等等,分別以不同訓練集進行預測。

然後將幾個預測結果綜合,最終再通過機器學習中的集成學習思想,取最多的結果作爲最終預測結果。

所以模型評估對於機器學習非常重要,主要起兩個作用:第一、量化權重;第二、反向傳播思想改善模型。本篇就很好的完成了這兩個作用。

反向傳播算法

接下來跟大家詳細介紹一下反向傳播算法。至於爲什麼會提出反向傳播算法,我直接應用梯度下降(Gradient Descent)不行嗎?想必大家肯定有過這樣的疑問。

答案肯定是不行的,縱然梯度下降神通廣大,但卻不是萬能的。梯度下降可以應對帶有明確求導函數的情況,或者說可以應對那些可以求出誤差的情況。

比如邏輯迴歸(Logistic Regression),我們可以把它看做沒有隱層的網絡;但對於多隱層的神經網絡,輸出層可以直接求出誤差來更新參數。

但其中隱層的誤差是不存在的,因此不能對它直接應用梯度下降,而是先將誤差反向傳播至隱層,然後再應用梯度下降。

其中將誤差從末層往前傳遞的過程需要鏈式法則(Chain Rule)的幫助,因此反向傳播算法可以說是梯度下降在鏈式法則中的應用。

在本文中對反向傳播的應用則是權重的反向修正,將歷史上三個賠率組合對象出現的次數作爲total_count,出現yes(主隊獲勝)數量作爲y_count(>0的數量),進而計算出這個賠率組合對象的主隊獲勝權重y_count/total_count。

隨着歷史數據的不斷增加,權重會一直改變,而且朝着最近時期的趨勢方向變化,也正符合業務邏輯。

然後再根據當前比賽得出的結果iw10_yes_4_0計算信心指數,即{歷史數據中主隊獲勝數量-(主隊不勝的數量X3) X 對應的權重}。

Bagging算法

Bagging算法的基本思想爲給定一個弱學習算法(單個弱學習算法準確率不高),和一個訓練集,將該學習算法使用多次,得出預測函數序列,進行投票,使得最後結果準確率得到提高。

Bagging是並行式集成學習方法的典型代表,它直接基於自助採樣法。給定包含m個樣本的數據集,我們先隨機取出一個樣本放入採樣中,再把該樣本放回初始數據集,使得下次採樣時該樣本仍有可能被選中。

這樣,經過m次隨機採樣操作,我們得到含m個樣本的採樣集,初始訓練集中有的樣本在採樣集裏多次出現,有的則從未出現。

照這樣,我們可採樣出T個含m個訓練樣本的採樣集,然後基於每個採樣集訓練出一個基學習器,再將這些基學習器進行結合。

這就是Bagging的基本流程。在對預測輸出進行結合時,Bagging通常對分類任務使用簡單投票法,對迴歸任務使用簡單平均法。

若分類預測時出現兩個收到同樣票數的情形,則最簡單的做法是隨機選擇一個,也可進一步考察學習器投票的置信度來確定最終勝者。

在本文中,藉助了Bagging算法的思路,但是採用的是不放回抽樣,形成不同階段的訓練數據集,根據每個階段的投票結果綜合計算最後的計算預測結果,

總結

本篇提出了新穎的機器學習預測中的建模思想——三木板模型(已在國家期刊發表論文並被萬方數據庫收錄,
三木板模型算法論文地址:http://wanfangdata.com.cn 搜索“基於機器學習的預測算法模型及其在環評領域的應用”),
並提出了評估模型的思路,對於足球領域之外的其他領域也非常有借鑑意義,同時對反向傳播算法和Bagging算法的原理進行了闡述。

代碼地址

示例代碼:Python-100-days-day100

關注公衆號:python技術,回覆"python"一起學習交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章