機械学習

機械学習機能を自前で行う事は可能です。現時点では3通りの方法があります。

  • さらだ自体での機能
  • さらだから外部プロセス起動
  • ML.NET Model Builder利用
さらだ自体はJV-Link対応アプリである為現状32bitアプリとなってます。ML.NETの機能の中には64bitアプリのみサポートされるものがある為にさらだ自体では不可能な部分がある為、外部プロセスとして64bitの機械学習アプリを使う事でML.NETの全てを利用しての機械学習を行えます。ML.NET Model BuilderはCSVファイルを用意すれば手軽に機械学習させる事が出来るものです。

学習させるCSVファイルを用意して、自分が納得いく機械学習をして予想させる事で自分だけの予想する事を可能にしてます。

さらだ自体で機械学習

[分析(A)]-[ML(M)]に新馬、走破タイム、順位の3つがあります。基本的な使用方法は3つとも同じ感じにはしてます。[新馬(S)...]を選択すると

この画面が表示されます。サンプルで学習用データ期間を指定して「CSV」ボタンを押すと学習用CSVデータファイルが出力されます。トレーニング秒数を希望の秒数にして「AutoML」ボタンを押す事で出力したCSVデータを学習して学習モデル(ShinbaTime.zip、上の様に60秒ならShinbaTime60.zip)が出力されます。

外部プロセスで機械学習

上の画面の「AutoML(x64)」ボタンを押すと

機械学習の外部プロセスが起動します。こちらのプロセスは64ビットアプリなのでML.NETのフル機能で学習可能です。良く分からない場合は準備したCSVファイルの大きさに対して適切な秒数を指定して5個ならんだチェックボックス全てにチェックを入れて繰り返し回数を指定して「開始」ボタンを押すと機械学習させる事が出来ます。

Model Builderで機械学習

この方法を行うには多少なりともVisual Studioが使える程度の知識は必要になります。Visual Studioも色々なバージョンがあるかと思いますが、Visual Studio Community 2022が基本学生または教育機関、なんちゃらな個人が該当するんですが、詳細はMSの該当サイトでご確認願います。現行バージョンのML.NET Model Builder Version 17.18.2.2415501では、学習用CSVファイルのサイズが1GB超えるとCSVファイル指定後次に進めない事を確認してます。さらだ Version 1.3.0で行ったフル順位予測用のファクター追加で標準偏差と各馬の偏差値を倍精度実数として1992.1.1~2023.12.31分のCSV出力すると1GB超えて、このトラブルに遭遇。元々Model BuilderやAutoMLではデータを単精度実数としてたと思うので、これらのデータも単精度実数としました。データ開始を1992.1.1にしてるのは1991年の日本ダービーが18頭超えたレースで現行競馬では18頭立てが上限なのでその辺りの制限からです。

Visual Studio起動して「新しいプロジェクトの作成」から適当なプロジェクトを選択してってのもプログラミングとかする訳ではないので

コンソールアプリでかまいません。この画面の見え方もVisual Studioのインストール時に選択してる内容で違ってくると思います。

インストール時に「.NET デスクトップ開発」にチェックは入れておかないとダメです。確かModel Builderの正式名は"ML.NET Model Builder 2022"だったかと。新しいプロジェクトの作成でコンソールアプリを選択して「次へ(N)」で進み

ここでプロジェクト名に好きに名前入れて「次へ(N)」で進み

ここでは多分.NET 8.0が最初から出てきてると思いますが、まあそれ程重要ではないはずなので「作成(C)」します。うちでは既にModel Builderがインストール済みなのでちょっと微妙ですが、[拡張機能]-[拡張機能の管理(M)...]

右上の「検索(Ctrl+E)」の所に"Model Builder"と入力すれば表示されるのでインストールを指定してVisual Studioを終了すると確かインストールされるんだったかと。無事にインストールされたらVisual Studioを起動して先程のプロジェクトを選択する。右側にあるソリューション エクスプローラーの中からプロジェクト名を右クリックして「追加(D)」

にある「機械学習モデル...」

「名前(N):」にある"MLModel1.mbconfig"を"ShinbaTime.mbconfig"に変更して「追加(A)」する。シナリオの選択で

「値の予測」を選び、トレーニング環境の選択ではそのまま「次の手順」で進み

データの追加で入力に「参照...」で、準備したCSVファイルを選択し

「予測する列(ラベル)」で"Souha"を選択し「詳細なデータ オプション...」

で、"Souha"以外の全て列のデータ型が"Single"に、"KaisaiKai"、"KaisaiNichi"、"Kyori"、"Waku"、"Tousu"、"BareiDays"、"Souha"のカテゴリ別のチェックが外れてそれ以外がチェックされている状態にして「保存」する。「次の手順」で進み

で「トレーニングする時間」に秒数してして「高度なトレーニング オプション...」

ここで「二乗平均平方根誤差(RMSE)」を選択し、トレーナーは"Light gradient boosted machine(LightGBM)"のみ選択で良いかと。これ、全てにチェック入れても問題はありませんが、結局成績が良い感じなのはLightGBMなのであえて他を使うと余分な時間が使われる気がするんです。で、「保存」で高度なトレーニング オプションを完了したら「トレーニングの開始」で学習させます。

これがModel Builderでの学習手順となります。新馬戦用("ShinbaTime.csv")の話で説明しましたが、他も同じ手順で可能です。使うCSVを該当するものに変えて予測する列の指定をし、予測する列以外の全てのデータ型が"Single"なのとカテゴリ別のチェックはイメージとしてはほぼ同じ感じです。学習完了するとプロジェクトフォルダ下に同名のフォルダがあり、そこに機械学習モデルで使った名前で拡張子が.mlnetになっているのが出来ているのでそれを採用するならさらだをインストールしたフォルダ下の"ML"フォルダにコピーして指定すれば使えます。
さらだ Version 1.5.1で新馬用にもCKを追加してますので"ShinbaTimeCK.csv"を利用して"HahaHahaHaha"項目と"Kishu"項目の間に36項目が追加されてます。これら全てカテゴリ別は×です。

通常予測の学習では"SouhaTime.csv"を利用して"Souha"以外の全ての列のデータ型が"Single"にカテゴリ別は

カラム名 カテゴリ別
JouCD
KaisaiTuki
KaisaiKai ×
KaisaiNichi ×
TrackCD
Course
Kyori ×
Waku ×
Tousu ×
Tenko
Baba
Barei ×
Sex
Blinkers
Kinryo ×
Chichi
Haha
ChichiChichi
ChichiHaha
HahaChichi
HahaHaha
ChichiChichiChichi
ChichiChichiHaha
ChichiHahaChichi
ChichiHahaHaha
HahaChichiChichi
HahaChichiHaha
HahaHahaChichi
HahaHahaHaha
Kisyu
Chokyosi
PrevJouCD1
PrevTuki1
PrevKai1 ×
PrevNichi1 ×
PrevTrackCD1
PrevCourse1
PrevKyori1 ×
PrevWaku1 ×
PrevTousu1 ×
PrevTenko1
PrevBaba1
PrevBarei1 ×
PrevSex1
PrevKinryo1 ×
PrevKishu1
PrevJuni1 ×
Prev1Corner1 ×
Prev2Corner1 ×
Prev3Corner1 ×
Prev4Corner1 ×
PrevAto4Furlong1 ×
PrevAto3Furlong1 ×
PrevDate1 ×
PrevChakusa1 ×
PrevTimeSa1 ×
PrevSouha1 ×
PrevJouCD2
PrevTuki2
PrevKai2 ×
PrevNichi2 ×
PrevTrackCD2
PrevCourse2
PrevKyori2 ×
PrevWaku2 ×
PrevTousu2 ×
PrevTenko2
PrevBaba2
PrevBarei2 ×
PrevSex2
PrevKinryo2 ×
PrevKishu2
PrevJuni2 ×
Prev1Corner2 ×
Prev2Corner2 ×
Prev3Corner2 ×
Prev4Corner2 ×
PrevAto4Furlong2 ×
PrevAto3Furlong2 ×
PrevDate2 ×
PrevChakusa2 ×
PrevTimeSa2 ×
PrevSouha2 ×
PrevJouCD3
PrevTuki3
PrevKai3 ×
PrevNichi3 ×
PrevTrackCD3
PrevCourse3
PrevKyori3 ×
PrevWaku3 ×
PrevTousu3 ×
PrevTenko3
PrevBaba3
PrevBarei3 ×
PrevSex3
PrevKinryo3 ×
PrevKishu3
PrevJuni3 ×
Prev1Corner3 ×
Prev2Corner3 ×
Prev3Corner3 ×
Prev4Corner3 ×
PrevAto4Furlong3 ×
PrevAto3Furlong3 ×
PrevDate3 ×
PrevChakusa3 ×
PrevTimeSa3 ×
PrevSouha3 ×
PrevJouCD4
PrevTuki4
PrevKai4 ×
PrevNichi4 ×
PrevTrackCD4
PrevCourse4
PrevKyori4 ×
PrevWaku4 ×
PrevTousu4 ×
PrevTenko4
PrevBaba4
PrevBarei4 ×
PrevSex4
PrevKinryo4 ×
PrevKishu4
PrevJuni4 ×
Prev1Corner4 ×
Prev2Corner4 ×
Prev3Corner4 ×
Prev4Corner4 ×
PrevAto4Furlong4 ×
PrevAto3Furlong4 ×
PrevDate4 ×
PrevChakusa4 ×
PrevTimeSa4 ×
PrevSouha4 ×
PrevJouCD5
PrevTuki5
PrevKai5 ×
PrevNichi5 ×
PrevTrackCD5
PrevCourse5
PrevKyori5 ×
PrevWaku5 ×
PrevTousu5 ×
PrevTenko5
PrevBaba5
PrevBarei5 ×
PrevSex5
PrevKinryo5 ×
PrevKishu5
PrevJuni5 ×
Prev1Corner5 ×
Prev2Corner5 ×
Prev3Corner5 ×
Prev4Corner5 ×
PrevAto4Furlong5 ×
PrevAto3Furlong5 ×
PrevDate5 ×
PrevChakusa5 ×
PrevTimeSa5 ×
PrevSouha5 ×
Souha ×

として頂ければと思います。

さらだ Version 1.5.0で追加されたCKでは"SouhaTimeCK.csv"を利用して上記に追加で"HahaHahaHaha"項目と"Kishu"項目の間に378項目が追加されてます。"HirachiShokin"から"CSChakuX"までです。これら全てカテゴリ別は×です。

順位予測の学習では"RaceJuni.csv"を利用して「予測する列(ラベル)」で"Juni"を選択し、"Juni"以外の全ての列のデータ型が"Single"にカテゴリ別は

カラム名 カテゴリ別
JouCD
KaisaiTuki
KaisaiKai ×
KaisaiNichi ×
TrackCD
Course
Kyori ×
Tousu ×
Tenko
Baba
KyosouShubetu
KyosouJouken
JuuryoShubetu
Uma1Souha ×
Uma2Souha ×
Uma3Souha ×
Uma4Souha ×
Uma5Souha ×
Uma6Souha ×
Uma7Souha ×
Uma8Souha ×
Uma9Souha ×
Uma10Souha ×
Uma11Souha ×
Uma12Souha ×
Uma13Souha ×
Uma14Souha ×
Uma15Souha ×
Uma16Souha ×
Uma17Souha ×
Uma18Souha ×
Umaban ×
Juni ×

として頂ければと思います。

フル順位予測の学習では"RaceJuniFull.csv"を利用して「予測する列(ラベル)」で"Juni"を選択し、"Juni"以外の全ての列のデータ型が"Single"にカテゴリ別は

カラム名 カテゴリ別
JouCD
KaisaiTuki
KaisaiKai ×
KaisaiNichi ×
TrackCD
Course
Kyori ×
Tousu ×
Tenko
Baba
KyosouShubetu
KyosouJouken
JuuryoShubetu
StandardDeviation ×
Uma1Barei ×
Uma1Sex
Uma1Blinkers
Uma1Kinryo ×
Uma1Kishu
Uma1Chokyosi
Uma1Souha ×
Uma1DeviationValues ×
Uma2Barei ×
Uma2Sex
Uma2Blinkers
Uma2Kinryo ×
Uma2Kishu
Uma2Chokyosi
Uma2Souha ×
Uma2DeviationValues ×
Uma3Barei ×
Uma3Sex
Uma3Blinkers
Uma3Kinryo ×
Uma3Kishu
Uma3Chokyosi
Uma3Souha ×
Uma3DeviationValues ×
Uma4Barei ×
Uma4Sex
Uma4Blinkers
Uma4Kinryo ×
Uma4Kishu
Uma4Chokyosi
Uma4Souha ×
Uma4DeviationValues ×
Uma5Barei ×
Uma5Sex
Uma5Blinkers
Uma5Kinryo ×
Uma5Kishu
Uma5Chokyosi
Uma5Souha ×
Uma5DeviationValues ×
Uma6Barei ×
Uma6Sex
Uma6Blinkers
Uma6Kinryo ×
Uma6Kishu
Uma6Chokyosi
Uma6Souha ×
Uma6DeviationValues ×
Uma7Barei ×
Uma7Sex
Uma7Blinkers
Uma7Kinryo ×
Uma7Kishu
Uma7Chokyosi
Uma7Souha ×
Uma7DeviationValues ×
Uma8Barei ×
Uma8Sex
Uma8Blinkers
Uma8Kinryo ×
Uma8Kishu
Uma8Chokyosi
Uma8Souha ×
Uma8DeviationValues ×
Uma9Barei ×
Uma9Sex
Uma9Blinkers
Uma9Kinryo ×
Uma9Kishu
Uma9Chokyosi
Uma9Souha ×
Uma9DeviationValues ×
Uma10Barei ×
Uma10Sex
Uma10Blinkers
Uma10Kinryo ×
Uma10Kishu
Uma10Chokyosi
Uma10Souha ×
Uma10DeviationValues ×
Uma11Barei ×
Uma11Sex
Uma11Blinkers
Uma11Kinryo ×
Uma11Kishu
Uma11Chokyosi
Uma11Souha ×
Uma11DeviationValues ×
Uma12Barei ×
Uma12Sex
Uma12Blinkers
Uma12Kinryo ×
Uma12Kishu
Uma12Chokyosi
Uma12Souha ×
Uma12DeviationValues ×
Uma13Barei ×
Uma13Sex
Uma13Blinkers
Uma13Kinryo ×
Uma13Kishu
Uma13Chokyosi
Uma13Souha ×
Uma13DeviationValues ×
Uma14Barei ×
Uma14Sex
Uma14Blinkers
Uma14Kinryo ×
Uma14Kishu
Uma14Chokyosi
Uma14Souha ×
Uma14DeviationValues ×
Uma15Barei ×
Uma15Sex
Uma15Blinkers
Uma15Kinryo ×
Uma15Kishu
Uma15Chokyosi
Uma15Souha ×
Uma15DeviationValues ×
Uma16Barei ×
Uma16Sex
Uma16Blinkers
Uma16Kinryo ×
Uma16Kishu
Uma16Chokyosi
Uma16Souha ×
Uma16DeviationValues ×
Uma17Barei ×
Uma17Sex
Uma17Blinkers
Uma17Kinryo ×
Uma17Kishu
Uma17Chokyosi
Uma17Souha ×
Uma17DeviationValues ×
Uma18Barei ×
Uma18Sex
Uma18Blinkers
Uma18Kinryo ×
Uma18Kishu
Uma18Chokyosi
Uma18Souha ×
Uma18DeviationValues ×
Umaban ×
Juni ×

として頂ければと思います。
さらだ Version 1.5.4で追加されたCKでは"RaceJuniFullCK.csv"を利用して頂き"Uma1Kyakusitu1"、"Uma1Kyakusitu2"、"Uma1Kyakusitu3"、"Uma1Kyakusitu4"という4項目が各馬18頭分追加されてますのでこれら全てカテゴリ別は×です。

さらだ自体で機械学習もしくは外部プロセスで機械学習した場合はさらだがインストールされたフォルダの下にあるMLフォルダに学習モデルファイルが出来ます。Model Builderでは作成したプロジェクトフォルダの方に学習モデルファイルが作成される。
実際の予想で作成した学習モデルを利用するには[ツール]-[オプション]で「ML選択」タグにある「新馬戦」、「全般」、「順位」にそれぞれ学習モデルファイルを指定します。

自分自身は学習モデルファイルにRMSEを入れてますので上記の様になってます。(単純にエクスプローラーで名前の変更してるだけです。)何回か学習させて検証を見て選択しやすい様にする為の工夫です。

種別 学習モデル
新馬戦 ShinbaTime.mlnet,ShinbaTimeCK.mlnet,ShinbaTime.zip,ShinbaTimeCK.zip等
全般 SouhaTime.mlnet,SouhaTimeCK.mlnet,SouhaTime.zip,SouhaTimeCK.zip等
順位 RaceJuni.mlnet,RaceJuniFull.mlnet,RaceJuniFullCK.mlnet,
RaceJuni.zip,RaceJuniFull.zip,RaceJuniFullCK.zip等

学習モデル比較

Version 1.6.2ではAutoMLとModel Builderの学習モデルを添付してますのでちょっと選択のヒント的に比較してみます。対象は2024.7.1~2024.9.8です。 75R ShinbaTimeCK.zip ...