![見出し画像](https://assets.st-note.com/production/uploads/images/22385846/rectangle_large_type_2_058c92524a14ec0a47470981790a1a98.jpg?width=800)
適当に買った場合の的中確率と機械学習での予測の的中確率: #機械学習 #競輪予想
ガチの分析プロからするとハイハイやってんねーくらいかと思うのですが、これを見て私より気付きを得られる人も多いと思います。
※これは経験からの予測
お世話になっております。
合同会社ムジンケイカクプロ 代表ムジンです。
予想紙の予想印◎の数を数える
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%くらいの正解率なら、なんとかプラスになりそうだ。
いつもお読みいただき、ありがとうございます。 書くだけでなく読みたいので、コメント欄で記事名入れてもらうと見に行きます。