読者です 読者をやめる 読者になる 読者になる

INPUTしたらOUTPUT!

忘れっぽいんでメモっとく

Rでロト6を当てたい(1)

R

2年ほど前に某分析会社の人と以下のような会話をしたことがある。

自分:ロト6って均等に数字が出るんだったら予想できないっすか?
某分析者:いやー ロト6よりtotoの方が当てやすいっすよ

上記の会話の後、何もしてこなかったけど@gg_hatano氏がロト6の過去データをアップしてくれたので色々試してみる。


データの準備

@gg_hatano氏のデータを正規化 & 978回分まで更新し、kashitan/loto6 · GitHubにアップした。 スキーマ定義は以下の通り。

f:id:tak95:20150625211023p:plain

Rからsqliteファイルにアクセスするには次のようにする。

> library(RSQLite)
> library(dplyr)
> # DBに接続
> con <- dbDriver("SQLite") %>% dbConnect(dbname = "loto6.sqlite")
> 
> # 当選数字を取得
> nums <- dbGetQuery(con, "select time,num from numbers")
> 


Odd & Even 分析

6個の本数字のうち奇数と偶数は約半分ずつになるのではないか?という仮説に基づき、カウントしてみる。

> nums %>%
+   # 0:偶数, 1:奇数
+   mutate(odd = num %% 2) %>%
+   # 回別に奇数の数をカウント
+   group_by(time) %>%
+   summarise(odd_n = sum(odd)) %>%
+   # 奇数の数毎に頻度をカウント
+   count(odd_n) %>%
+   # 構成比を計算
+   mutate(p = round(n/sum(n) * 100,1))
Source: local data frame [7 x 3]

  odd_n   n    p
1     0   2  0.2
2     1  78  8.0
3     2 255 26.1
4     3 306 31.3
5     4 241 24.6
6     5  75  7.7
7     6  21  2.1
> 

奇数と偶数が3個ずつの組み合わせは自分が思っていたよりも少なくて978回中306回(31.3%)
また全て奇数・偶数の組み合わせは過去23回(2.4%)となりほとんど発生していない。
当選確率を上げるには奇数は2〜4個が良さそう。


ヒストグラムを書いてみると次のようになる。

> nums %>%
+   mutate(odd = num %% 2) %>%
+   group_by(time) %>%
+   summarise(odd_n = sum(odd)) %>%
+   # ヒストグラムをプロット
+   ggvis(~odd_n, fill:="#F0F0F0") %>%
+   layer_histograms(width = 1) %>%
+   add_axis("x", title = "Number of Odd") %>%
+   add_axis("y", title = "Frequency")
> 

f:id:tak95:20150626103512p:plain


High & Low 分析

23以上をHigh、23未満をLowとして同様にカウントしてみる。

> nums %>%
+   # 0:23未満, 1:23以上
+   mutate(high = num %/% 23) %>%
+   group_by(time) %>%
+   summarise(high_n = sum(high)) %>%
+   count(high_n) %>%
+   mutate(p = round(n/sum(n) * 100,1))
Source: local data frame [7 x 3]

  high_n   n    p
1      0  12  1.2
2      1  87  8.9
3      2 238 24.3
4      3 345 35.3
5      4 211 21.6
6      5  78  8.0
7      6   7  0.7
> 
> nums %>%
+   # 0:23未満, 1:23以上
+   mutate(high = num %/% 23) %>%
+   group_by(time) %>%
+   summarise(high_n = sum(high)) %>%
+   ggvis(~high_n, fill:="#F0F0F0") %>%
+   layer_histograms(width=1) %>%
+   add_axis("x", title = "Number of High Number") %>%
+   add_axis("y", title = "Frequency")
> 

f:id:tak95:20150626131022p:plain


奇数/偶数よりかは尖っているけど23以上が3個は978回中、345回(35.3%)。
同様に23以上の数字を2〜4個にした方が当選確率は上がりそう。



上記の結果から数字選択の方針は以下とする

  • 奇数の数は2〜4個
  • 23以上の数は2〜4個

次はゲイル理論に基づきホットナンバーの分析してみるが長くなるので別の記事にする