高楷程
(東北石油大學,計算機與信息技術學院,黑龍江,大慶 163000)
隨著大樂透彩票的普及,彩民的購買熱情越來越高,反映非常熱烈。在該玩法受歡迎的同時, 各種預測的方法都出現了。目前, 出現預測方法都是基于統計理論提出的, 如奇偶比、遺漏期K值、區段出號碼數字、數字頻率的次數等。因為采用的是統計方法, 具有一定的偶然性,其結果并不完全可靠。本文采用Keras神經網絡搭建預測模型,進行訓練之后預測下一期的號碼,從結果上來說提高了中獎的概率。
首先,大樂透的中獎序列為35選5+12選2,每個球的選取是隨機的,因此,想使用機器學習精準地預測出獲獎序列是很難的。可以類比于機器學習選股票。目前有很多機器學習應用在股票選擇上的例子,并能夠實現盈利[1-3]。但機器學習選股和選彩票有幾點顯著差異:股票的漲跌存在各種因子、K線、輿情等參數用于評估和訓練,但彩票的中獎序列是隨機產生的,可供參考的可能僅有時間上的序列的概率分布。
所謂的概率分布指的是,假設彩票的中獎序列是完全隨機產生的,序列中每一個球在一次開獎過程中出現的概率應該是相同的(前區和后區要分開算),并且從時間序列上來看,連續的多次開獎中,每一個球的出現與否也應當滿足某種規律(當然,這是宏觀上講,實際上肯定不會嚴格滿足,但能夠體現某種趨勢或傾向)[4-6]。
在江蘇體彩網獲取數據,文件格式為csv。如圖1所示。
雖然數據已經獲取到了,但顯然這個數據無法直接應用于訓練。需要對數據做一下簡單的處理。
本文為中獎序列中的數字(或者說球)編號,從前往后它們的編號分別為1到7,其中1~5是前區的5個球,6~7是后區的2個球。
同理,對于給定的課題,假如我們有近一年以來的氣溫數據,需要預測明天的氣溫,一般的思路是用循環神經網絡做序列的預測。假設按順序給這近一年來的氣溫分別編號為1~365,其中t1表示第一天的氣溫,t365表示今天的氣溫。
氣溫的變化應該是有規律的(一般情況下),讓機器來學習這種規律。選定一個合適的時間長度,比如30天,然后將這30天的連續數據作為輸入(x),將接下來一天的氣溫數據作為輸出(y),就構成了一條數據。然后使用長度為31天的掃描框,對一年的數據進行一次遍歷,就得到了一組數據集。用它進行訓練,完成后,輸入30天前到今天的氣溫序列,即可預測明天的氣溫。
本文的課題和預測氣溫差不多,使用連續若干期的球1數據來預測下期球1的分布概率,球2~球7都是同樣的方法。單從輸入輸出看來就是這樣,實際上實現起來肯定會有更多的處理和優化[7-9]。
和預測氣溫的例子不同,氣溫預測時只有一種因子參與,就是當天的氣溫值。而在這個例子里,輸入的是7個球,輸出的也是7個概率分布,所以這是個多輸入、多輸出的模型。
模型示意圖如圖2所示。

圖2 模型示意圖
使用連續若干期的球1數據來預測下期球1的分布概率,球2~球7都是同樣的方法,但因為這些球本身并不獨立,比如球1開出了3,球2~球5就不可能再開出3,而是在剩下的里面選。所以我們在預測最后的概率之前,對球1~球5的中間層進行了拼接,再分別預測,這樣模型可能會學習到每一期中前區的球之間的某種關系。對于球6和球7,也做了類似操作。
球1~球5在前區,球6~球7在后區,兩者沒什么關系,所以這兩部分之間沒有進行拼接。
最后的輸出預測層選擇了Softmax,嚴格來說,Softmax對于這個問題來說,并不是一個很好的選擇,因為開球應該是條件概率,比如球1開了5之后,開球2的概率計算應該是球1=5條件下的條件概率,球3~球5同理。但最終還是選擇了Softmax,原因一是Softmax實現起來更加簡單,二是模型輸出本身設計的就不是預測頭等獎的完全正確序列,而是盡可能多地選中球。
數據和模型都已經準備完畢,可以進行訓練了。但這個模型不同于一般的分類模型,因此選擇回測方法評估模型的效果。
劃分一部分數據(比如90%)作為訓練集的訓練模型,剩下的10%作為測試集。劃分是按照時間順序劃分的,保證后面10%的數據絕不出現在訓練集的結果數據或過程數據中。在使用訓練集完成模型的訓練后,對測試集進行預測,并按照預測結果購買彩票,計算支出和獎金,以最終的凈收入的多少來衡量模型效果[10-13]。
按照訓練集∶測試集=9∶1的比例劃分數據集,在訓練集上訓練模型,并使用測試集回測。訓練60輪,每一輪訓練完成后都會保存模型的參數,并進行回測。在訓練結束后,將所有回測結果按時間順序繪制出折線圖和趨勢線,如圖3所示。

圖3 預測趨勢圖
多次運行的結果可能差距明顯,其原因分析如下。
(1)訓練數據的原因
彩票選號其實是沒有嚴格的規律可言的,否則,哪怕只有極少數一批人能穩定猜中,這個游戲也沒法長期運行。如果非要強行說個規律出來,那也只有長期下來的概率分布能勉強湊合。但首先大樂透也只開了1 000多期,數據有限,其次概率這種東西從字面上來看,就知道它不是固定的(哪怕出現的概率最高,也不一定會出現)。這樣,當模型的隨機初始權重不同,訓練數據又很難找到特別清晰的規律時,模型學習到的東西也會產生相應的區別,它們分別傾向到了概率分布的不同表現形式。
(2)回測時選擇彩票號碼的原因
選擇號碼時,同樣不是一定選擇出現概率最大的球,只是出現概率越大,被選中的概率就越大,這樣保證了結果的多樣性。
兩者綜合起來,兩次的運行結果可能天差地別,但從多次運行的整體來看,還是有一定規律的。
訓練一定次數之后,虧損金額大多分布在[-1 200,-900]左右,少數情況下在(-900,-400],極少數甚至還有盈余。
大部分都滿足“隨著訓練次數的增加,損失逐步減少”的規律,即圖中擬合的一次函數(一條斜直線)因為回測的隨機性,單點結果是會出現起伏波動的,所以使用趨勢來衡量整體結果會更加合適。
綜上,模型應該起到了一定作用。
基線模型指的是一個最基礎、最簡單的模型,它是從概率的角度上來說隨機性最強的一個模型。
一般基線模型都是完全隨機的。從前區選出5個球,后區選出2個球,每個球都隨機選擇,這就是基線模型。類似于彩票中心的機選方案。
模擬多次購買彩票來實現基線模型的預測虧損,模擬結果如圖4所示。

圖4 基線模型預測結果
多次運行可以發現,最后的平均值絕大多數落在[-1 400,-1 200]之間,其中又以-1 250左右最多。少數虧得更少或更多,極少數能夠小賺。
如果準備利用模型買彩票,可以分為2種情況。
(1)選擇在上一步訓練好的某個模型參數,加載這個參數,輸入倒數第MAX_STEPS期到最近一期的數據序列,預測下一期序列。
(2)使用完整數據集作為訓練集,重新訓練模型并保存。然后和第一種情況一樣,加載模型參數,輸入倒數第MAX_STEPS期到最近一期的數據序列,預測下一期序列。
兩者的區別在于:
第一種情況,有回測數據,在選擇訓練好的參數時有一定的參考;第二種情況,使用了完整數據集來訓練,就沒有回測數據可參考了。
第一種情況的訓練數據少于第二種的訓練數據。按理說更多的訓練數據通常會產生更好的效果。
運行一下,模型輸出如圖5所示。
本文通過神經網絡算法來進行大樂透彩票預測實驗,從概率的角度說明預測的可能性,分別介紹了數據的獲取、模型的搭建以及進行實驗網絡的訓練實驗。
將算法應用在大樂透預測上,并且獲取最近100期開獎記錄作為樣本數據,通過實驗發現能在一定概率上提高中獎率。對其他彩票建立預測模型也有一定的參考價值。