MATLABでボートレース解析をする6番目の記事です。
昨日の毒島選手はさすがのSG制覇でしたね!という時期に書いております。というか、いつの間にかもう9月か。。。歓迎会で飲みながら書いております。
ここまでの振り返り。
1番目の記事でダウンロードができて、2番目の記事で出走表を読み込んで、3番目の記事で結果を読み込んで、4番目の記事で配当データを取ったり、5番目の記事で学習をさせたりしました。
気が向いた順に書いてるからか、なんかバラバラだな。。まあいいや。。
配当のデータを触ってないので、触ってみよう。
1番目の記事のやり方で2013年1月から2019年8月までのデータをごっそりダウンロードさせてみました。4番目の記事のやり方で配当データを取ってみると、358609個のデータがあったので、これを試しに解析してみよう。
まずは出現確率の分布なんかを見てみればいいよね。
3連単って全部で120パターンありますけど、どんな出現確率で出てくるのかしら。
T_div っていうテーブルにまとまっていればこうですね。
figure(1)
histogram(T_div.trifecta,'DisplayOrder','Descend','Normalization','Prob')
title('3連単の割合')
左から順に、[123] が約6%, [124], [132] が約4.5%, [134], [142], [125] が約3.5% ですね。逆に [645],[635],[652],[654],[653] あたりは 0.1% くらいかな。
ボートは内枠が有利なので、偏っちゃいますね。
配当金の分布も見たいかも。
200円区切りくらいで10000円まででいいかな。
histogram(T_div.trifecta_d,200:200:10000)
600円~800円が一番多く出てきてますね。
平均値も求めよう。
>> nanmean(T_div.trifecta_d)
ans =
7461.57
7461円ですね。
他の買い方も見てみよう。
3連複は20通りでこう。
figure(2)
histogram(T_div.trio,'DisplayOrder','Descend','Normalization','Prob')
title('3連複の割合')
2連単30パターン。
figure(3)
histogram(T_div.exacta,'DisplayOrder','Descend','Normalization','Prob')
title('2連単の割合')
2連複20パターン。
1-2 が全体の24%ですね。
figure(4)
histogram(T_div.quinella,'DisplayOrder','Descend','Normalization','Prob')
title('2連複の割合')
ワイド15パターン。
ワイドと複勝の場合、同じようにヒストグラムをプロットすると母数が増えちゃう(histogram コマンドは、行列の全要素で平均を取っちゃう)ので、histcounts でデータを求めて行数で割るといいですね。
figure(5)
[x,ed] = histcounts(T_div.wide);
histogram('Categories',categorical(ed),'BinCounts',x./height(T_div),'DisplayOrder','Descend')
title('ワイドの割合')
複勝6パターン
1 を買っときゃ 65% 当たる。
[x,ed] = histcounts(T_div.show);
histogram('Categories',categorical(ed),'BinCounts',x./height(T_div),'DisplayOrder','Descend')
title('複勝の割合')
print -dpng boat_show.png
単勝6パターン
50% くらい 1 。
figure(7)
histogram(T_div.win,categorical(1:6),'DisplayOrder','Descend','Normalization','Prob')
title('単勝の割合')
というのが 6年半のデータから見えますね。
1-2-3 ばっかり買ってみよう!
15% くらい当たるんなら、1-2-3 の3連単ばっかり買ってればいいね!
と思いついたら、行動に移す前にプログラムを作ってみよう。
MATLABのテーブルだと、簡単に書けますよね。
a = '123';
allR = height(T_div) - nnz(ismissing(T_div.trifecta)); % (全レース) - (不成立)
tr = sum(T_div.trifecta_d(T_div.trifecta == a))/allR
コマンドウィンドウにこんな答えが出ました!
tr =
82.8425
毎レース100円 123 を6年間買うと、82.84円の配当が期待できます。損ですね!
allR が 358456 だったので 3584万円賭けたら、2969万円 (allR*tr) だけ返ってきました。
じゃあ 124 にしようかな。
さっきのプログラムを編集して、全部試せばいいよね!
a = '123456';
a = a(perms(1:6)); % 全通りの着順 (720通り)
a = unique(a(:,1:3),'row'); % 1,2,3位だけ取って重複を捨てる
a = categorical(cellstr(a)); % カテゴリカルに変換
tr = zeros(size(a));
allR = height(T_div) - nnz(ismissing(T_div.trifecta)); % (全レース) - (不成立)
for x = 1:length(a)
tr(x) = sum(T_div.trifecta_d(T_div.trifecta == a(x)))/allR;
end
bar(a,tr)
縦軸が100円あたりの配当なので、どれもダメということが分かりました!
[123], [132] あたりは80円くらいで、あとはそれより下ですね。
じゃあ3連複でいいか。
3連複だと nchoosek 関数をよく使います。こんな感じ。
a = categorical(cellstr(nchoosek('123456',3)));
tr = zeros(size(a));
allR = height(T_div) - nnz(ismissing(T_div.trio)); % (全レース) - (不成立)
for x = 1:length(a)
tr(x) = sum(T_div.trio_d(T_div.trio == a(x)))/allR;
end
bar(a,tr)
これでもダメですよね!他のは省略しますけど、継続的に買うと何でもダメなんですよね。
参考:6年間のデータで蛭子買いをしてみよう。
蛭子買いは、蛭子さんが編み出した [1256][235][245] のボックス買い36点をして大穴を狙うという買い方です。
ebisu = categorical(cellstr([perms('125');perms('126');perms('156');perms('256');perms('235');perms('245')]));
allR = (height(T_div) - nnz(ismissing(T_div.trifecta)))*length(ebisu); % ((全レース) - (不成立)) * 点数
ebisu_d = sum(T_div.trifecta_d(ismember(T_div.trifecta,ebisu)))/allR
結果は、
ebisu_d =
62.41
まあそうよね。
ギャンブル豆知識
頻繁に当たったり外れたり儲かったり儲からなかったりするギャンブルは、ずっと同じパターンを買い続けるとどんどん期待値に収束していきます(=コツコツと負けます)。こういうのを大数の法則とかいいますよね。
またもや、ダメであることを発見しました!
というわけで戦略的に、固いレースを見つけるとか荒れるレースを見つけるとかしないとダメなんです、ということを再確認しました!(前向き)
ただ、図を貼りまくったら長くなったので、続きはまた今度にしますね。続きが見たい人は「いいね」してね (いいねがほしい病気)