K近傍法を利用したLoto7予測プログラムを作る

2か月くらいかかっています

毎朝の習慣で、「出社前の1時間は趣味の開発に充てる」ということをしています。
で、その時間を使ってコツコツとLoto7予測プログラムを作っていました。
要するに、ろくなことをしていないということです

Laravel + VueJS + 機械学習の練習です

今後の自分の方向性として、「Unity」「PHP」「機械学習」を主軸にして勉強していきたいなという思いがあります。
UnityはスマホゲームやVRゲーム開発で、今回のLoto7予測プログラムはPHP + 機械学習の練習で作りました。

早速ですが、予測結果を

ちょっと長いですが、37の数字でそれぞれの組み合わせ予測は以下の通りになりました

1を基準にした予測
番号予想1,5,11,16,18,28,35
ボーナス数字20,25
2を基準にした予測
番号予想2,9,11,18,23,34,36
ボーナス数字1,21
3を基準にした予測
番号予想1,3,22,26,29,34,36
ボーナス数字8,23
4を基準にした予測
番号予想4,15,24,29,32,34,36
ボーナス数字8,19
5を基準にした予測
番号予想1,5,15,19,27,30,32
ボーナス数字20,31
6を基準にした予測
番号予想6,7,27,28,31,32,36
ボーナス数字15,21
7を基準にした予測
番号予想6,7,10,15,23,24,37
ボーナス数字9,35
8を基準にした予測
番号予想8,23,24,27,28,29,32
ボーナス数字4,13
9を基準にした予測
番号予想2,9,13,15,33,36,37
ボーナス数字23,24
10を基準にした予測
番号予想4,7,10,18,21,28,30
ボーナス数字23,35
11を基準にした予測
番号予想1,11,21,26,28,35,36
ボーナス数字2,18
12を基準にした予測
番号予想11,12,17,23,24,35,36
ボーナス数字21,34
13を基準にした予測
番号予想9,13,14,15,21,22,26
ボーナス数字8,17
14を基準にした予測
番号予想7,13,14,21,23,25,31
ボーナス数字17,24
15を基準にした予測
番号予想7,15,19,23,25,26,35
ボーナス数字5,13
16を基準にした予測
番号予想1,9,16,26,27,28,34
ボーナス数字2,35
17を基準にした予測
番号予想12,13,14,15,17,21,24
ボーナス数字29,31
18を基準にした予測
番号予想1,2,9,11,18,21,26
ボーナス数字10,13
19を基準にした予測
番号予想4,13,15,19,30,33,35
ボーナス数字5,22
20を基準にした予測
番号予想1,20,28,29,30,31,34
ボーナス数字6,21
21を基準にした予測
番号予想11,13,14,17,21,23,28
ボーナス数字6,18
22を基準にした予測
番号予想3,6,9,13,22,24,36
ボーナス数字12,26
23を基準にした予測
番号予想7,8,14,15,23,25,31
ボーナス数字9,28
24を基準にした予測
番号予想4,7,8,9,24,27,31
ボーナス数字12,15
25を基準にした予測
番号予想1,8,15,23,25,30,35
ボーナス数字14,27
26を基準にした予測
番号予想11,13,15,26,27,32,34
ボーナス数字3,18
27を基準にした予測
番号予想6,8,24,26,27,28,30
ボーナス数字21,29
28を基準にした予測
番号予想1,8,10,27,28,29,30
ボーナス数字21,23
29を基準にした予測
番号予想4,8,15,20,28,29,34
ボーナス数字3,27
30を基準にした予測
番号予想7,10,20,25,27,28,30
ボーナス数字21,24
31を基準にした予測
番号予想6,14,20,23,24,31,37
ボーナス数字28,32
32を基準にした予測
番号予想4,5,6,8,26,32,36
ボーナス数字15,31
33を基準にした予測
番号予想4,9,13,19,21,33,37
ボーナス数字27,34
34を基準にした予測
番号予想4,9,20,26,34,35,36
ボーナス数字16,29
35を基準にした予測
番号予想1,7,11,12,15,34,35
ボーナス数字19,36
36を基準にした予測
番号予想2,3,4,6,9,32,36
ボーナス数字11,34
37を基準にした予測
番号予想7,9,21,29,31,33,37
ボーナス数字28,36

ざっくりな仕組み

上記の予測には「K近傍法」という手法を利用しています。
説明については外部サイトに委ねますが、おすすめ商品表示のようなレコメンドシステムにも利用されている、意外と身近な手法でもあったりましす。
今回のプログラムの元ネタは以下のサイトとなります
https://www.codexa.net/collaborative-filtering-k-nearest-neighbor/

Loto7予測プログラムでは、過去315回(記事作成時点)の当選履歴を取得し、それぞれの組み合わせを「sklearn」というpythonプログラムを利用して予測値を取得しています。
元ネタのcodexaでは「アニメとレビュー」のデータからおすすめアニメを予測する内容となっていますが、この内容を「37の数字と当選番号」の関係に置き換えてKNNを利用しています。

もし当たったらVyrus買います

ということで、Loto7予測プログラムを作りました。という話でした。
若干詰め切れていない部分がありますが、プログラムはほぼほぼ動くので、5月中には公開したいな~と考えております。
同じ仕組みでLoto6、Numbersにも利用できると思うので、プログラムを整理したら、ほかの宝くじにも適用していきたいですね

当然ですが・・・

予測値は、あくまで意思決定を助けるためのものであり、当選を保証するものではありません。
宝くじの購入は、購入者自身の責任で番号を選択してください。
当たり前のことですが、なんとなく書いておかないといけないような気がした・・・