前置き(読み飛ばしていいです)
- 古巣(某ISP)が定期的にハッカソンを開催していて、ありがたいことに毎回お声掛け頂いています。
- 特にテーマは無い、もくもく会的なハッカソンです。
- 毎回美味しいお弁当が出ますが、今回は量は満足でしたが、質がいまいちでした
- やりたいなーと思っててやる時間がなかったことを毎回やってます。
- 今回はLSTMを使ってナンバーズの予測をやりました。
ナンバーズ
- 数字選択式宝くじ
- 平日は毎日抽選が行われる
- 数字を3つ選ぶナンバーズ3と、4つ選ぶナンバーズ4がある
- 数字と並びの両方を当てるストレート、並びは関係なく数字だけを当てるボックス、ストレートとボックスに半々にかけるイメージのセットがある。
- 当選金額は ストレート >> セットのストレート > ボックス > セットのボックス みたいなイメージ
ナンバーズに関するオカルト「ひっぱり現象」
- 同じ数字が何回かにわたって連続して出現しやすい。これをひっぱり現象という。
- 計算してないけど、多分確率的にはよくあるくらいの確率なのでは……。
- ひっぱり現象がある = 前回の結果と今回の結果にはゆるい相関関係がある
- ナンバーズの結果を「時系列データ」と捉えてLSTMで学習させる
ナンバーズのデータ
- ナンバーズ3、4、ミニロト、ロト6、ロト7
ロト7の過去のデータ ダウンロード - Excelファイルが降ってくるのでcsvにしてスタンバイ。
- 今回はナンバーズ4の予測を行った
やったこと
- 一文字づつ学習させて、次になにが来るか予測
- DEEPstationをについているLSTMを利用
- 1回ごとの当選番号(4桁)を学習させて、次の当選番号(4桁)を学習させる
- 雑にコード書いた。ハッカソンだしね。 https://github.com/hidesuke/numbers_lstm
-
python numbers_lstm.py
で学習 -
python prediction.py
で予測
1文字づつバージョン
- 1000epochくらい学習させて perplexityが6くらい。全然下がらない。
とりあえず予測はさせてみる
1回毎の当選番号で学習バージョン
- 1000epochくらい学習させて perplexity 1くらい。上々である。
- こちらも予測させてみる。
そして買ってみる
結果!
セットボックス当選だぁぁぁぁあああああああああ!!!!!!!
考察
- 今回ヒットしたのは「一文字づつ学習」させたほう
- 両方共「9」や「4」が出てくると予想してたみたい
- 引っ張り現象はあるんや!!