毎年恒例のアップル・イベント。リアルタイムで視聴してたけど、途中で眠くなりリタイア。まあ、昨年iPhone16 Pro Max(妻は無印iPhone16)に買い替えたので5年以上は頑張ってもらう予定ってのもあり、あまり興味が無かったってのもありましたが、それ程な内容ではなかったので眠くなった気もします。

Windows11もそろそろ25H2がリリースされます。インサイダーは既に出てる様ですが、前には試した事もあるインサイダーも今は態々って感じで通常のリリースに乗ります。ただ、自分の場合はWindows Updateではなく、クリーンインストールを毎年選択してきました。ただ、今年はちょっと迷ってます。Windowsのクリーンインストール自体は慣れたものでそれ程苦ではないのですが、それ以外のアプリやツールの再インストールと諸々の設定、ブラウザのキャッシュ関連からの入力履歴なんかが微妙に毎回気になったり、まあ、再インストール漏れする様なのは利用頻度が低くてってのも悪くはないのですが、年々老化で忘れてるだけだわってのもねぇ。

今週自作アプリの変更申請をJRA-VANにしてるので今週末には承認されてってなるとは思うけど、今後フレームワークも.NET10とかになるだろうし、このフレームワークが上がるとML.NETもまあ既にpreviewが出ていてそれ程大きなアップデートにはならないとは思うけど、5.0が正式リリースになると思う。Visual Studioは前回19→22だった事を考えると今年? こちらは頻繁にアップデートされているのでしばらくは22のままなのかも? まあ、いずれにせよ諸々上がれば追従して自作アプリもアップデートしていきます。

試していた新馬戦用の新たな5時間学習は昨日の日付に変わった頃に終わり起床時にRMSE 1.9663だったのは確認してました。今回のリリースに使ったモデルはRMSE 1.9662だったのであまり期待はしていなかったんですが、

77R 1点 芝(63R) ダート(14R) 8頭以下(20R) 9~12頭(29R) 13頭以上(28R) 多点
単勝 29.87%
(128.96%)
30.16%
(87.78%)
28.57%
(314.29%)
40.00%
(114.50%)
27.59%
(117.93%)
25.00%
(150.71%)
62.34%
(111.47%)
複勝 59.74%
(97.14%)
60.32%
(93.49%)
57.14%
(113.57%)
65.00%
(90.50%)
62.07%
(87.24%)
53.57%
(112.14%)
90.91%
(86.15%)
枠連 12.00%
(61.80%)
15.79%
(81.32%)
0.00%
(0.00%)
--
(--)
6.90%
(23.79%)
14.29%
(85.71%)
26.00%
(85.73%)
馬連 9.09%
(45.58%)
11.11%
(55.71%)
0.00%
(0.00%)
15.00%
(68.00%)
6.90%
(22.76%)
7.14%
(53.21%)
22.08%
(141.56%)
ワイド 22.08%
(69.87%)
25.40%
(66.35%)
7.14%
(85.71%)
30.00%
(51.50%)
31.03%
(128.28%)
7.14%
(22.50%)
42.86%
(73.85%)
馬単 6.49%
(61.30%)
7.94%
(74.92%)
0.00%
(0.00%)
15.00%
(124.00%)
3.45%
(21.03%)
3.57%
(58.21%)
22.08%
(115.95%)
三連複 2.60%
(13.51%)
3.17%
(16.51%)
0.00%
(0.00%)
5.00%
(11.50%)
3.45%
(27.93%)
0.00%
(0.00%)
11.69%
(33.73%)
三連単 1.30%
(9.61%)
1.59%
(11.75%)
0.00%
(0.00%)
5.00%
(37.00%)
0.00%
(0.00%)
0.00%
(0.00%)
11.69%
(41.02%)
総合 62.34%
(60.93%)
63.49%
(59.92%)
57.14%
(65.36%)
65.00%
(71.00%)
62.07%
(53.62%)
60.71%
(60.31%)
90.91%
(67.15%)

予想に反してかなり良い物でした。単勝と複勝の的中率がやっと合格点(笑) 回収率は検証期間が短いのでそれ程気にしてないのですが、これなら通常用ももう少し良いモデル出るまで頑張るかって事で昨夜24時間学習をスタートさせてます。ただ、そんな簡単には行かないとは思ってますので何度も試すしかないのですが、24時間は長いorz

基本的には競馬は確率ゲーム。どんな予想ロジックでも100%は無理でってそりゃ未来予知は誰も出来ないからね。多分ってかこれはあくまで持論でしかないけど、これまで色んな予想アプリを利用した経験はあるし、それを利用して色んな方法も試みてきました。理想論的には高確率で的中出来るまたは出来そうなレースで勝負する? これ、本命路線に乗っかるのかそれともって話もありますよね。本命サイドで行くには的中率的に相当高いと可能なのかもなんだけど、当然回収率が低いのでちょっとしたミスを回復しきれない事が多い。逆にまさにギャンブルな穴狙いは爆発力で一気に回収したりって可能性に頼る訳です。

馬券の発売金額的にもGIとなると桁違いになったりします。このおかげでギャンブル性も上がるんだと思うけど、実際にはGIだからといっても当てやすさとか儲けやすさが伴うとは限らない。確かにメインレースでガツンと大穴で当てて気分が良い時もあるし、自慢話にもしやすかったりするけど、別に自慢する必要ある? 本来ひっそりと確実に利益を上げて自分が良ければ良いだけの話なので、どんなレース条件が自分が利用する予想アプリが得意でそこに狙いを絞るのが一番勝つための近道のはず。ただね、それをする事で収支に余裕がある状態を維持して、その余裕の中でGIで遊ぶのが理想だと思ってます。

しかし、現時点ではあまりにもまだまだ秘策がない学習モデルなので今もひたすら学習させてます。今回使った新馬戦用の学習モデルのRMSEは1.9662です。1時間の学習で得られたものなんですが、実は5時間でRMSE 1.9632という学習モデルも今回得られたものにあるんですが、今回使ったモデルには及ばなかったんです。基本機械学習は運もって事でまた5時間学習させてます。限られた時間内に出来る限り試すしか自分が出来る事はないので、ひとつひとつこなして行きます。

自作アプリでは4種類の学習モデルを利用した予測する機能をつけてます。新馬戦、通常用、順位予測、人気予測です。でまあ、やっと2004.1.1~2025.6.30(21年半)分のデータをもとに学習させたモデルが揃ったので新たなバージョンのリリースに至った訳ですが、先日も書いてますが決して最適とは言えないけど、ここまで得た最良のモデルとしてのリリースです。

例えば、今回通常用の単勝的中率は22.71%って微妙にちょっと短いですが2カ月ちょいの検証結果としてですが、これを使ってWIN5に挑んだ時に1点でだと0.2271^5(こんな書き方が分かる人はプログラマーのみ?これ、5乗って事です)は0.06%の的中率なので1,655回で1回当たる確率って事は年50回程度のWIN5では33年に1回ですね(笑) これ単勝3点だと53.5%の的中率なんで、0.535^5だと4.38%なので22.8回に1回当たる確率です。でも、3^5は243点買いでこれ22.8回続けると5,540点だから¥554,000円投資して1回当たるって事なんですが、これがプラス収支になる保証はなかったりします。その昔、ちょっとした知り合いが400万円投資したのちに38,000,000円程度のWIN5を当ててました。いや、プラス収支ですが、一般的には400万円馬券に投資するのはって感じですよね。

まあ、半年で55万円だとザックリと10万円/月となる訳ですが、これも随分な負担です。現実的ではないので自分は当然試しません。今回のバージョンで添付した学習モデルでいうと、枠連が1点で回収率118%程度(通常用)なので試しても良いかも? 的中率的には13.44%という事は36Rで新馬戦が2R×3場の6Rだとして30R×0.1344だと4R的中ならまあまあ当たる感じもしながら3,000円投資して118%だと540円/日の利益。

しかし、逆に言えば他には特に狙えない? って事で、既に新たな学習は始めてます。つまり、現在のモデルでは簡単に儲かる術はないのが現実です。まあね、簡単に100%勝てるとなれば、それは理想だけど、AI以前に人類の頭脳を絞っても不可能だった事をAIとか機械任せで簡単には出来ないのかも?

ML.NETでAutoMLを利用しだしてやは2年以上。ブロガーに機械学習について書き始めてました。手探りで始めた頃にはってか、まあ、未だに手探りなのは変わらない気もしますが、流石に2年以上もやっていると、ほんとの少しだけど自分自身も学習してます。しかし、腑に落ちない事は、時間を掛けたからより良い結果が得られる訳じゃなく、運です(笑) まあ、世の中全て運なのは否定しません。ただ、努力の中で得る運と本当のまぐれで得る運。違って欲しいと思うのは弱者? ギャンブルでも、投資でも、まあ学業でも運はありますよね。

機械学習始めた頃には普通にPCを1週間とか稼働させて学習させたりもしました。沢山すれば、それに報いがあると信じて試したり、でも、そんな中でWindows Updateで強制再起動させられて無駄になるのも運が悪かった? 実はAutoMLとかではint型の42億通りの学習が引数として渡す事でスタートさせる事が出来るのですが、自分は普段これを指定せずに行ってます。この場合、ランダムに学習がスタートして、そこから何らかの法則で進んでくんだと思います。なので、例えば同じ学習データを使って同じ時間の学習をさせたとしても毎回違う学習モデルが出てきます。厳密には毎回違うのではなく、万が一には同じ場合もあるんだと思うけど、流石に42億レベルで万が一は中々体験は出来ないとは思います。

ただね、ここが運に頼ってるのはちょっと気になるんですよ。幸運の持ち主なら1発で良い学習モデルに巡り合うけど、運が無いと何度やっても良いものに巡り合えない。この辺りAIなら、そもそも学習して運任せじゃなく確実に良いものに近づく術をと思いたいのですけどねぇ。もしかすると、ディープラーニングとかだとまた違ってるのかも? その辺りがまだ理解出来てないから所謂ディープラーニングといえばTensorFlowとか言われてる気がするけど、こいつを使いこなせてないのがそもそもの原因なのかもなんですけどね。まあ、TensorFlowとディープラーニングは現時点では別次元の話として...

先日からAutoMLとModel Builderでこれまで昨年末までの学習データを使った学習モデルを提供してましたが、プラス半年分の学習データを追加して今年の6月末までの学習データで学習させて次期バージョンで提供しようと時間を費やしてます。で、これが運任せなので苦労してる訳です。例えば昨日行ったAutoMLでの3時間×5回の学習では結局1回目で得た学習モデルが一番精度が高く、以降はこれを超える事が出来ませんでした。つまり、3時間×4回の12時間は単に電気代と時間の無駄遣いですorz うちのPCは750W電源で機械学習させているとCPUがフルにブン回るので冷却ファンもブンブン回って電気消費してると思われるので、以前copilotに質問した時にザックリと20円/hだった記憶があります。って事で、240円分の電気の無駄遣いだった訳ですが、これ、結果論なんですよね。その直後にModel Builderで24時間学習させてまして、そろそろ終わるんですが、こちらは480円分の電気使って取敢えずというか、学習モデルの精度の目安として自分がよく利用しているRMSE(0に近いほど良い)がAutoMLでは1.4213だったのですが既にRMSE 1.3952というモデルが見つかってます。しかし、以前にはModel Builderで72時間学習させてRMSE 1.3887というのもありましたので、今回も2度ほど挑んだのですが、1回目は1.4523で2回目は1.4407でした。学習時間が長ければその分良いものがなら良いのですが、保証されている訳では無いので72時間学習では1,440円分の電気代が無駄に終わります。この額は決して安い金額ではないのが辛い。

競馬自体は30年以上前に手を出し始めました。当初は自分好みのアプリを色々試しながらでした。でも、そもそも高校生の頃にプログラミングし始めた頃に雑誌で目にしていたApple ][での競馬予想プログラムは当時全く理解せず、ただまあ、そんなコンピューターの利用方法もあるんだなぁ的に流してました。そんな訳でPCアプリで競馬予想とかは普通に入り込んで検証してみたりしてましたが、自分でも書いてみたいと思い、確か一番最初はAccess仕様のDBにデータを取り込んだりしたものをってザックリ何も出来ないものなのに、確かJRA-VANで予想アプリのコンテスト的にやってるのに参加賞目当てに出した記憶があります。

その後もプログラミング環境が変わり、その時々の新しい技術に挑んで何度も挫折しました。ソフトウェア・エンジニアとして働いていた時にはあまりデータベースに関わる仕事はしなかったので十分な知識が無かったのもそうなんですが、新しい事は良い事だ的に色々と手を出したりしたのですが、そんな形から入ってもなかなか良い物が出来ないというか、そもそも使えるレベルになかなか出来なかったのが何年も続きました。最終的には現在のSystem.Data.SQLiteを素に扱う、いや、当初はEntity Frameworkとかも試したのですがSQLiteがトランザクション入れないとアクセスが激遅でEntity Frameworkではそのトランザクションをうまく入れ込めないので、普通にSQL投げる形にたどり着きました。その後もJV-Linkでフルセットアップが14時間とか掛かったりしてたものを有識者の方達にアドバイス頂きながら改善して先日の最新バージョンでフルセットアップ行った時には2時間2分チョイで終わる感じになりました。例えば、JRA-VANが一押しにしているTARGET frontierでこのフルセットアップを行うとはっきりとした時間の記憶は曖昧ですが、同じPCでも10時間以上掛かったかと。なので、JRA-VANは押しているアプリなので既に直近までのデータを取込み済みなものを提供する事を許可してます。基本一般なアプリはこの提供を許可してません。なので、自分のアプリではユーザーがダウンロード及びインストールしてからフルセットアップを行い利用する事になります。

実はこのフルセットアップ自体は必須ではないです。JV-Linkで取得可能な全てのデータを取込むのをフルセットアップと勝手に書いてますが、自分のアプリでも例えば票数とか全く利用していません。今後機能追加で利用する様になる可能性がない訳じゃないので一応取り込んでますが、ユーザーが割り切って取込まない選択すれば時間短縮も可能だし、そもそもデータベースが14GB超えなのも抑えられます。

ちと前置きが長くなりましたが、出来たデータベースを利用して競馬予想するのが目的です。長年多くの開発者が苦労して独自にアプリに入れ込んでそのアプリの売りにしてきたものなので、その部分をどうするかなんですが、世の中には既に多くのAIをうたったアプリもありますが、自分もAIに頼ってます。Microsoftは(厳密には表現が違うかも?)ML.NETというものを提供して開発者がより身近に機械学習を利用出来るようにしてます。自分もこれ利用してます。Visual Studio Community2022でC#を使って書いてます。ここ最近の大きなきっかけがVisual Studio Community2019でVisual Basicを使ってSystem.Data.SQLiteに巡り合い、Visual Studio Community2022のリリースでMicrosoftがメインをC#にした感じがしたのでVB→C#を行いやっと自作アプリのリリースにこぎつけた感じです。

ここで、まず、Visual Studio2019とVisual Studio2022の大きな違いなんですが、VS2019は32bitでVS2022は64bitへと変わりました。まあ、Windows10までは32bitと64bitが用意され、Windows11は64bit専用です。それでもWOWとかで32bitアプリも動くのは当然なんですがね。で、中央競馬のデータはJV-Linkを利用して取得するのですが、これが32bitなのでJV-Linkを利用するには32bitアプリにする必要があります。JRA-VANの説明ではVS2019でJV-Linkを利用する方法が書かれてますがVS2022ではその説明通りには行きません。で、自分でも忘れない様にブロガーの方で書いてます。

ML.NETでAutoML利用してモデルの学習させる時に利用されるトレーナーの1つであるLightGBMは64bit必須でJV-Linkと共存出来ません。なので、苦肉の策として外部プロセスとしてAutoMLを利用する様にしてます。このAutoMLと似たというか、確か同じFLAML(Fast and Lightweight AutoML)でModel Builderがあるのでこちらも利用してます。学習済みのモデルは32bit環境のML.NETでも利用可能なので自作アプリ予想はそうしてます。

ただ、このモデルが大きいと32bit環境ではメモリ不足でロード時にエラーになる事も多いのが難点で、64bitアプリの開発に取り組んでいるのもそのためです。これまで何度も長時間掛けて出来たモデルがサイズ的に利用出来ずに無駄にしてきた経験からやむを得ずにですけどね。

あっ、LightGBMなんですが、ML.NETがトレーナーとして利用するのに採用してたバージョンが古くて、ほんの少し前までこのLightGBMも外部アプリとして個別に用意してたりしましたが、先日ML.NETの最新previewで最新のLightGBMが利用される様になりましたので削除してAutoMLを最新のML.NETにしてます。

これら以外にも実はGoogleが音頭を取った(?)TensorFlowというものもあるんですが、これ、基本はPythonです。まあ、現在のAIはPythonベースが多いのかな?で、実はPythonでTensorFlow使ったモデル学習もしてまして、これを自分のアプリの予想で利用する試みもしてるのですが、Python→C#がなのか、そもそもTensorFlowでの学習が上手く出来ていないのか躓いてます。まあ、Pythonもまだまだ(自分のPythonの理解が)なのは当然ですが、更にTensorFlowもとなるとねぇ。先日TensorFlowもバージョンアップしてたのでその辺りも気にしながら...時間が足りないorz

こんな感じなのが現状です。