見出し画像

適当に買った場合の的中確率と機械学習での予測の的中確率: #機械学習 #競輪予想

ガチの分析プロからするとハイハイやってんねーくらいかと思うのですが、これを見て私より気付きを得られる人も多いと思います。
※これは経験からの予測

お世話になっております。
合同会社ムジンケイカクプロ 代表ムジンです。

予想紙の予想印◎の数を数える

df_q = df.query("予=='◎'")
print(df_q)

[20431 rows x 4 columns]

予想紙の予想印◎の数字が20431個。
レース数が20431。


df_q = df.query("予=='◎' and result=='1'")
print(df_q)
[9333 rows x 4 columns]

そのうち、予想紙の予想印◎で、且つ着順が1着が9333個。

確率計算
9333÷20431=0.45680583427

適当に買っても、1着は

45%で当たる

更に予想紙の予想印が◎で2着のケースは?

3837÷20431=0.45680583427

18%

予想紙の予想印○の数を数える

df_q = df.query("予=='○'")
print(df_q)
[20431 rows x 4 columns]
df_q = df.query("予=='○' and result=='1'")
print(df_q)
[3273 rows x 4 columns]

そのうち、予想紙の予想印○で、且つ着順が1着が3273個。

確率計算
3273÷20431=0.16

予想紙の予想印が○で1着のケースは、

全体の16%

予想紙の予想印が○で2着のケースは、

確率計算
5535÷20431=0.16

全体の27%
だいぶ◎の1着確率とは違う。
雲泥の差。

競輪は1着と2着を当てる複勝式

そこで、、、

予想紙の予想印が◎か○で、1着か2着だった数

df_q = df.query("予=='◎' or 予=='○'")
print(df_q)
df_q = df.query("(予=='◎' or 予=='○') and (result=='1' or result=='2')")
print(df_q)

21978÷40862

53%

レースごとのカウントを正確にする

これだと、レースごとのカウントができていないので、さらに、、、

念の為、重複データがないかチェックする。

df=df.drop_duplicates()

あったようだ。

20181レースを対象にここから分析し直す

df_index = df.set_index(["開催日","レース場",'何日目','レース'])

レース別単位にして、

df_q = df_index.query("(予=='◎' or 予=='○') and (result=='1' or result=='2')").sum()

着順(1,2着だから)を足すと、レース毎に合計3になる。

それを全て足して、3で割れば、何レースが予想印通りだったかわかる。
(はずだ)

いろいろ集計の関数を使ったんですが、これがいちばん簡単な気がする。

10316レースがそれ。

10316÷20181=0.51117387641

適当に買っても51%当たる。

※ここではオッズをまだ鑑みていない。

儲けの期待値(計算間違い)

100円買って、毎回51%で勝つ。
オッズが1.1倍以上だと110円戻る。

100円買って、「110円戻ったり、100円マイナスになったり」を繰り返し続けることになる。

100円かけて+10

100円かけて-100

破産だ、、、
ただ、儲けの最低ラインはこれでもわかる。

10円儲かって、

儲けの期待値

うまくQueryが動いていないだけなので、あれこれ修正。

df_index = df.set_index(["開催日","レース場",'何日目','レース'])
df_q = df_index.query("(予=='◎' or 予=='○') and (result=='1' or result=='2')")
df_q = df_q.reset_index()
level_0 index 開催日 レース場 何日目 レース 予 result
0 0 0 2019-02-27 hiratsuka 1.0 1.0 ○ 2.0
1 1 1 2019-02-27 hiratsuka 1.0 1.0 ◎ 1.0
2 2 2 2019-02-27 hiratsuka 1.0 2.0 ○ 2.0
3 3 3 2019-02-27 hiratsuka 1.0 2.0 ◎ 1.0

重複を切って、

print(df_q.head(20))
print(df_q[df_q.duplicated(subset=['開催日','レース場','何日目','レース'])])
level_0 index 開催日 レース場 何日目 レース 予 result
1 1 1 2019-02-27 hiratsuka 1.0 1.0 ◎ 1.0
3 3 3 2019-02-27 hiratsuka 1.0 2.0 ◎ 1.0
9 9 9 2019-02-27 hiratsuka 1.0 7.0 ◎ 1.0
11 11 11 2019-02-27 hiratsuka 1.0 8.0 ○ 1.0
13 13 13 2019-02-27 hiratsuka 1.0 9.0 ○ 1.0

何をこのノンプログラマーがやっているかというと、予想印◎と○で、着順が1と2の人を、レースごとに区切っておく。

その中で、レース単位の重複があったものを数えた。

重複があった=1つのレースの中で「◎が1着か2着」「○が1着か2着」が同時に存在した。

6447回/20181レース

予想印通りにワイドを買って当たる確率

31%

では、弊社予想(機械学習予測)はどうか?

13回中8回的中:的中率61%

1300円購入で回収1090円:回収率83%

回収率

これは賭け方とオッズが関連してくるので、なんともいえないが、、、

的中率

予測を外さないというもともとのコンセプトに則っていくと、今の何も考えない賭け方で、73%以上の正解率でトントンの儲けとなる。

勝つと100円が今の所、平均136円(1090÷8)になるから、10回当たれば、1300円の購入額を超えていたはずだ。

70%くらいの正解率なら、なんとかプラスになりそうだ。



いつもお読みいただき、ありがとうございます。 書くだけでなく読みたいので、コメント欄で記事名入れてもらうと見に行きます。