2023/05/18

第84回優駿牝馬オークス

 AutoMLによる予想を出馬表に表示する部分が書けたので試しに動かそうとした所、ん?5月21日が表示されるので、え?なんかバグ入れ込んだ?って感じで開くと確かに木曜日だし既に枠順とかが発表になってるんですね。

別に何じゃないが、今回のAutoMLのファクターには枠と騎手があれば出るので表示されました。ああ、今の時点で良さそうな1時間を使ってます。

◎ 6枠11番 ミッキーゴージャス 戸崎圭太 2'31"63
○ 5枠9番 コナコースト レーン 2'31"63
▲ 7枠14番 ペリファーニア 横山武史 2'31"76
△ 8枠17番 シンリョクカ 吉田豊 2'31"89

って感じに出てます。◎と○は同タイム的な僅差って事ですかね。ってふとタイムが全然らしくないですね。東京芝2400mはもっと早いな~😣 昨年は2'23"9だし。ああ、ファクターに天気と馬場コンディションを入れているからそれ無しでの予測にはなってるとはいえ。まだまだ全然調整不足って事かな😫

追記 2023/5/20 9:22
ささっと思いつきで書き上げたりしてるのでいっぱいバグ有ったっぽいです😖

◎ 3枠5番 リバティアイランド 川田将雅 2'27"47
○ 5枠9番 コナコースト レーン 2'27"49
▲ 7枠14番 ペリファーニア 横山武史 2'27"59
△ 6枠12番 ハーパー ルメール 2'27"96

1時間でもこれと同じ感じでしたが、これは10時間使ってます。まあ、相変わらず現時点では天候と馬場無しですけど。不動の○▲は偶然なのかな~😜

追記 2023/5/20 20:41
この時間だと現時点での天候と馬場は拾えるので予想内容は変わらない感じはするけど、予想されている走破タイムが若干変わってきてる。◎は2'25"21、○は2'25"31、▲は2'25"44、△は2'25"69になってます。これなら昨年の勝ち時計に大分近づいたのでそれっぽいかな。

追記 2023/5/21 10:43
何かを間違えてたのかちと分かりませんが、諸々のバグ処理って他の部分関連だったと思うけど、まあ、再度出馬表開くと

◎ 5枠9番 コナコースト レーン 2'25"17
○ 7枠14番 ペリファーニア 横山武史 2'25"24
▲ 6枠11番 ミッキーゴージャス 戸崎圭太 2'25"30
△ 3枠5番 リバティアイランド 川田将雅 2'25"33

とガラッと変わってました。ただ、自分としては昨夜の予想としては18→11→14かな~っとか思ってたり。最後まで悩むかも😅

トレーニング済みモデル(2)

 昨夜の続きです。朝から取り敢えず1時間終わらせて今2時間を。

60分 > 422KB
予想[1200] 的中[524] (43.67%) 購入[¥840,000] 払戻[¥566,830 (67.48%)]

この1時間なんですが、終わり方はログ確認すると'Time budget exceeded'からの'failed'で終わってるんですが、25分の時の様にファイルが膨れ上がる事はなかった。更にいうと、現在のファクターで1時間の検証はしてたりするんですが、前回のより向上してる😁 考えられる原因はMLContextクラスの使い回し。今回からは学習前に毎回newしてるのでフレッシュな状態に戻ってるのが良いのかな。2時間の結果次第で5時間もしくは4時間でも良いけど試そうかな。的中率は随分上がってきてるけど、5割に届いたらヤバいね😉

こんな作業をしてるので待ち時間長いから本来のアプリの作業も進めます。これ出来るのもAutoMLを分離した恩恵だ。出馬表にこのAutoMLの結果を表示させて予想の参考にしようかと思います。

120分 > 66KB
予想[1200] 的中[448] (37.33%) 購入[¥840,000] 払戻[¥2,971,840 (353.79%)]

う~む、これってトレーニング済みモデルのサイズが小さくなったからなんとなく下がるのかな~っとは思いながら検証したんですけど...前にも1時間より2時間が悪化してたんですよね。ここは3時間で様子見ようかと思います。

追記 2023/5/18 14:49
3時間が終わりました。が、ちと本体側に問題があり、結局フルセットアップ中で後2年分程度で終わるのでその後検証です。

180分 > 182KB
予想[1200] 的中[460] (38.33%) 購入[¥840,000] 払戻[¥601,670 (71.63%)]

これも時間切れで終わってましたがそれ程肥大化はしてません。結局微妙な感じですね。2時からよりは良いが1時間よりは劣る。現在は4時間のトレーニング中です。

追記 2023/5/18 19:27
無事に4時間も終わり、タイミングも良かった感じでした。

240分 > 60KB
予想[1200] 的中[495] (41.25%) 購入[¥840,000] 払戻[¥532,600 (63.40%)]

コンパクトですが1時間に次ぐ成績です。夜通しは避けて明日朝から一気に10時間とか見てみたくなりました。まあ、次の書き込みにも微妙なタイムの誤差はあるもののレース内での順位決め的にはまだまだ期待出来るかも?

2023/05/17

トレーニング済みモデル

 ちょっと疑問なのが、ここまで30分、1時間、2時間、5時間と学習させてみた。で、その出来上がりはzipファイルで保存されてる。

30分 > 5,960KB
1時間 > 180KB
2時間 > 2,952KB
5時間 > 157KB

学習時間には無関係に大きさが異なる。これが正常なのかどうなのか。そもそも何か失敗とかミスしてるのか不安になりました。

予想[1200] 的中[433] (36.08%) 購入[¥840,000] 払戻[¥481,400 (57.31%)]

これが5時間の検証結果なんですが、また悪化してるし2時間よりもなんか検証が早く終わった気がするんですよ。そこで実験してみようかと😏 ってここで不安材料が...この機械学習の根底にあるのがMLContextクラスなんですが、これをフォームのLoadイベントでnewしてるのみで後は使い回してるって事になるけど、一回一回アプリ止めないとこのままだと問題があるかも。なので学習させる度にnewしてみます。

余談ですが、今回AutoML専用アプリを作ったので学習中でも開発中のアプリの作業したり予想したりが出来るのは良かった。ただ、少し前のビルドではあるが、単一ファイルにビルトしておいたやつで試してた所終了時間になっても何やら延々とエラーメッセージ吐いてる状態になつたので、デバックモードで現在は諸々作業してます。これだと特に問題は無く、普通に動作してるかと。

まあね、C#での開発とかその昔はnewするとかって無かった時代でしばらくプロして、現役退く頃からオブジェクト指向とかでC++がとか、なんかそんなタイミングでしたので、はっきり言えばオブジェクト指向は素人です😅 その後、VB6とか諸々ってか、確かVisual Basic 6は自腹で購入してるし、Visual Studioのどのバージョンだったか迄は正規ユーザーだったりとかね。EntityFrameWorkとかなんかデザインファーストとかでJRA-VANのデータ全部作ったり、その当時にもSQLiteがあり、当たり前だけどそのEntityFrameWorkでSQLiteを的な事で苦労したり。今回の取っ掛かりもコードファーストでの何だ、諸々をVisual Studio community 2019で始めて、Visual Studio community 2022のリリースイベント参加しながらVB.NETに見切りをつけ、C#に転向。ってコードファーストとか捨てて素のSQLiteのアクセスじゃなきゃって感じで現在なんですよ。ああ、処理待ちで暇なんでだらだら書いてました😁 学習と検証別アプリなんで同時実行とか出来てるからまだ効率は前より良い。

1分 > 25KB
予想[1200] 的中[267] (22.25%) 購入[¥840,000] 払戻[¥368,500 (43.87%)]
2分 > 25KB
予想[1200] 的中[267] (22.25%) 購入[¥840,000] 払戻[¥368,500 (43.87%)]
5分 > 25KB
予想[1200] 的中[267] (22.25%) 購入[¥840,000] 払戻[¥368,500 (43.87%)]
10分 > 39KB
予想[1200] 的中[267] (22.25%) 購入[¥840,000] 払戻[¥368,500 (43.87%)]
25分 > 5,817KB
予想[1200] 的中[462] (38.50%) 購入[¥840,000] 払戻[¥623,610 (74.24%)]

う~む、ここまで順調でしたが、この25分がね😔 ログ見ると、ってここまであまり注意深くログ見てないのも問題だったかも。でもね、このログが何ともな奴でね~。まあ、毎回秒指定で実行してるのでタイミング的に良いとか悪いとかは本来はやめて欲しいが、今回25分の終わりには

75 cancelled. Time budget exceeded.

75 failed with exception One or more errors occurred. (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.) (Operation was canceled.)

てな感じの終わり方。これ自体は時間が来たから打ち切りねって普通だと思うけど。一方、直前の10分なんかだと、

Trial 48 finished training in 7320ms with pipeline ReplaceMissingValues=>OneHotHashEncoding=>Concatenate=>SdcaRegression

ってなまあ、'failed'とかではないんですよね。タイミングが良かったかなぁ。でも、そんなタイミングは時間指定した時点では予測不能だし、もしそれが原因なら終了時に何かしらその事象を知って何か手を打つようにこちらがするべきなのか謎です。確かにログは残してるので、プログラム的にログチェックしてこの構文的なものを検知してってのも不可能ではないとは思うけど、TrialResultクラスでAutoMLExperimentクラスのRunAsyncメソッド戻り値取得してるけど、このTrialResultクラスでその辺りを判別して、今回の学習結果を採用するかしないかの判断しなきゃなのかなぁ。

30分 > 287KB
予想[1200] 的中[488] (40.67%) 購入[¥840,000] 払戻[¥559,290 (66.58%)]

そもそも、このAutoMLがVersion 0.20.1ってのも何かまだ微妙なのかもですけどね。ちと疲れて1時間のを終わらせて、終わったって終了しちゃったのでログ見なかったorz ログをセーブする様に改造明日しようかと思います。

2023/05/16

ファクター更に追加

 今回の追加でCSV出力は4時間半掛かりました。生データは95MB程度。まずはAutoML30分と60分をやって120分は結果で考えようかと。久しぶりに30分の結果見たんですが

予想[1200] 的中[267] (22.25%) 購入[¥840,000] 払戻[¥368,500 (43.87%)]

なんか随分的中率が低い😨 悪いもの入れたかな~。まあ、それでも我慢して60分待って

予想[1200] 的中[468] (39.00%) 購入[¥840,000] 払戻[¥482,910 (57.49%)]

まあ、待ったかいがあったかな😅 ただ、ここまでの最高には届いてないので120分してみますが、一旦書き込んで追記します。

追記 2023/5/16 20:43
そろそろ終わる頃かなっとログに目をやると😱 ログの半分過ぎた辺りから'Out of Memory'の文字が...ダメだな~。最悪の場合、AutoML部分のみを単にJV-Linkとは切り離して学習のみ行う様に64ビットアプリとして書かないとダメかも。

追記 2023/5/17 7:21
昨夜、ここでめげる訳には行かないので早速64ビット版のAutoML専用アプリ作成。これ、別にAutoML専用で書いたのでSQLiteもJV-Linkも関係ないし、更にはCSV生成も無関係なのでコード自体はシンプルなものであっという間に出来ました。まあ、また、夜通しでの5時間とかも可能でしたが、Microsoft Rewardsの件とか、起きて確認したら'Out of Memory'だったとか最悪なので、朝まで待って、起床後にまずは2時間。既に前回の実行でエラー出始めた1時間半は経ちましたが無事に処理中😁 やはり32ビットなのが原因確定かな。

追記 2023/5/17 8:30

予想[1200] 的中[509] (42.42%) 購入[¥840,000] 払戻[¥716,550 (85.30%)]

なんか感覚的に検証時間が長くなった気がする。まあ、当たり前ですがAutoML実行時間長くしてるので、実際にそれ使うと時間も掛かるのかも。取り敢えず、時間延ばせば結果良くなったので一気に5時間試してみます。

2023/05/15

AutoMLの途中でOut of Memoryとなり停止

 5時間設定して多分4時間程度までは行けてたんですが、ふと気が付くとログにエラーが出ていて止まりました😱 早速アイビー先生に確認したらマイクロソフトの公式見ろと言われ見に行くとFAQが用意されているレベル。まあ、単純に生データの10倍程度のメモリをって事でした。今の生データ、92MB程度のファイルです。うちの現在のPCは64GBメモリ積んでます。あっ、10倍って1GBにも満たないのに...。ただ、ちと気になるのは今のアプリは前にもちらっと触れたと思うけどJV-Linkの32bitが足かせになっていてターゲットがx86なんです。32ビットだと2GBの制限とかあったかな?アプリで他の部分もあるから余分にメモリ喰ってて足りない可能性はあるのかな。アプリ自体はまだこれから更に肥満化すると思うのに...JRA-VANさん、本当に出来るだけ早くJV-Linkの64ビット化お願いします!

単に時間が長ければ良くなる訳じゃない

 2時間も学習させて

予想[1200] 的中[442] (36.83%) 購入[¥840,000] 払戻[¥665,020 (79.17%)]

的中率ダウン😨 なかなか奥が深い機械学習です。一応現時点では10時間まで指定可能にしてますが、どうせ放置しておいて確認するだけなので、取り敢えず5時間試して夕方には分かるかな。ちと別の工夫も必要かな~😓

ファクターの選択

 昨夜から追加した斤量ですが、検証結果から書きます。

予想[1200] 的中[490] (40.83%) 購入[¥840,000] 払戻[¥748,610 (89.12%)]

回収率ってもちろん重要なんですが、やはり的中率が高くないとってのは長年の経験からってか、長年じゃなくても的中率が重要なのは当たり前? 直前の結果が的中率42.58%でしたから若干ですが下がってます。斤量は重要なファクターなのは間違いなく、ハンデ戦なんかで斤量なしでは問題外だし。斤量がファクターとして無い状態で的中率が上ってのはもしかするとファクターが増えた分、学習時間が余計に掛かるのに同じ時間しかしてないので調整が十分じゃないと考えるべきかも。なので倍の120分ってのも試してみます。

夜通しPC稼働

 昨夜も遅くまで作業。寝る前にそもそも斤量がファクターに入っいない事に気が付き、こりゃダメだって事でまたソースデータ出力なのでそれを動かしたまま就寝。まあ、今朝無事に終わってました。今回は4時間と少々掛かってました。でまあ、AutoMLを60分で実行中。

で、日課となってるMicrosoft Rewardsを開けると日が変わってるが今日のデイリーストリークとかが出ない。もしかして3月末にデイリーストリークが飛んだのもこれが原因だったかも。なんだろ?これ夜しっかりとPC落としておかないとダメなのかな😓まっ、ちと処理終わったら一度PC休憩させます。

追記 2023/5/15 15:32
何気なくMicrosoft Rewards開けたら普通にデイリーストリークが復活してた😃 単に時差の関係なのかな? マイクロソフトの本社はワシントン州だったかな?まあ、カリフォルニアの北の方だから今だと16時間の時差かな。サマータイムで15時間って事だとまあ確かに日本の15時にあちらは日付が変わるけどね。

2023/05/14

CsvHelperで可変項目数のレコード出力

 ターゲット用外部指数出力は以前ダビジェネ予想をターゲットで表示させる為に作ったりしてたので今回のアプリにも機能を載せてます。その際にはCsvHelperなしで作ったりしてたツールのイメージそのままで作りこんだので馬単位でした。これだと単純に1レコードに3項目固定なんです。レースID、指数、順位ですね。まあ、これ指数だけってのもありなんですが、なんとなく順位も入れてました。今回はまあ、他のアプリでも多いレース単位にしようかと思い、まあ、それが原因で躓いてました。

アイビー先生に何度もお願いして試しましたがイメージとしては可変な部分はList<>にすれば良いって事で取り掛かったんです。

internal class TG_Uma
{
    public int Shisu { get; set; }
    public int Juni { get; set; }
}

internal class TG
{
    public string RaceID { get; set; }
    public List<TG_Uma> Umas { get; set; }
}

てな感じで定義しておいて出力しても何故かってかそれが本来の動作なのかは別として、このTGクラスを

List<TG> TGs = new List<TG>();

として出力に使おうと、データ準備して

TG rc = new TG();
TG.RaceID = "202301050501";
for (int i=0; i<Tousu;i++)
{
    TG_Uma uma = new TG_Uma();
    uma.Shisu = shisu[i];
    uma.Juni = chaku[i];
    rc.Umas.Add(uma);
}
TGs.Add(rc)

1日分のレース分用意出来たら

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    HasHeaderRecord = false
};
using (StreamWriter sw = new StreamWriter(this.TG_Folder + @"¥" + CurKaisaibi + ".csv", false))
using (var csv = new CsvWriter(sw, config))
{
    csv.WriteRecords(TGs);
}

で行けるものと試すが"202301050501,プロセス名+TG_Umas,プロセス名+TG_Umas,プロセス名+TG_Umas,..."てな内容に。Listが全然上手く出力出来ないじゃんってね😨 まあ、今回はそのListが別クラスってのが悪かったのか

internal class TG
{
    public string RaceID { get; set; }
    public List<int> Umas { get; set; }
}

にして

rc.Umas.Add(shisu[i]);
rc.Umas.Add(chaku[i]);

って感じで入れ込んで出力する事で思った出力にたどり着けました。これ、もし、実数の指数と順位だったらどうすれば良かったのか...

今回の不調な状況

 今回SSDとHDDを新調した背景ですが、JV-Linkのサービスキーをまあ当然設定してるんですが、にもかかわらず認証エラー的なものがJV-Linkから返された。なんか、ネットに繋がってはいるものの、微妙に速度が...😓 で、起動ドライブのSSDを疑ってみた訳ですが、実際頻繁に発生していたJV-Linkのサービスキー関連は今の所なくなった。実際にはもっと長い期間問題出なければ解決って事になるかとは思う。

で、昨日結局2004年~2022年のサンプルデータ出力実行してたんですが、5時間半掛かりました😨 新たなファクター追加とかがなければやらない事とはいえ、長いってか遅い。インデックスの追加とかで改善出来れば良いんだけど、まあ、現状としては次のステップに進めながら検討していこうかと思います。

取り敢えず30分AutoMLしてみました。今年初めから4月末まで検証すると

予想[1379] 的中[493] (35.75%) 購入[¥840,000] 払戻[¥627,980 (74.76%)]

こんな感じの結果です。

追記 2023/5/14 10:12
AutoMLを60分にしてみたんですが、同範囲の検証結果は

予想[1379] 的中[430] (31.18%) 購入[¥840,000] 払戻[¥436,380 (51.95%)]

って感じになりました。時間延ばせばいい結果が得られるとは限らないですね。まあ、これって多分ファクターにもよるかと思いますが、今回待っている間に前走のタイム関連入れてるんですが、そのレース間隔入れてないのでこれはダメだなぁっと😓 この為にCSV再出力に5時間半は辛いのでちとインデックスとか工夫してみようかと思います。

追記 2023/5/14 14:57
インデックスちょっと追加して前回と同様な期間のサンプルデータ出力してみた所、3時間40分に短縮されてました。でもね~、まだまだ長いorz 実は今日のレースの予想しようと眺めてたんですが、ターゲットのデータがまた変だ。BLITZさんに報告しても良いんですが、前回も微妙な反応だったので、まあ、普通に削除してクリーンインストールしてます😜 次にトラブったら報告しようかと。でも、このクリーンインストールなんですが、たまたま使った過去データ込みなインストーラーが昨年の何月分だかまでの奴で今そこから今日までの分の取得をしてるんですが長い😨 もう1時間以上やってますが昨年6月辺りから取得してるようですが、今やっと9月orz JRA-VANお薦めのソフトって言ってももう何十年前のアプリだよってね。自分の今のアプリがある程度の段階まで来たら間違いなく放置するかと。お世話にはなったけど、これで馬券当てられたとかはないのでね。予想は常に他のアプリと自分自身かな。その自分自身を超えるものを今回のアプリに期待したいね。

若干検証部分に間違いがあったのを修正してAutoMLを30分した検証結果は

予想[1200] 的中[491] (40.92%) 購入[¥840,000] 払戻[¥669,490 (79.70%)]

でした。今60分のAutoMLスタートしたのでその結果も書きます。

追記 2023/5/14 16:58
なにか違う気がしなくもないが、検証済みました。

予想[1200] 的中[511] (42.58%) 購入[¥840,000] 払戻[¥1,080,700 (128.65%)]

的中率は然程上がってないのに回収率が😮 まあ、なにかデカい大物が当たったんでしょうね。ちょっと検証部分が貧弱なんで、取り敢えずちょっとした機能追加してみます。

2023/05/13

新たな環境完了

 昨日は帰宅後に無事に宅急便受け取り、早速作業してOSのクリーンインストールから諸々の復旧作業してまあね、こんなのは何度かやって来たのであっという間に完了しました。Visual Studioのインストール後に今回のプロジェクト試そうとするとJV-Link関連が認識されずにあれ?な感じになり、ちょっとだけ焦りましたが、.NETの開発環境を選択してたと思うけどC#で普通にWindowsアプリが新規プロジェクトに出てこないのでセットアップ修正して仮に新規のJV-Linkアプリってして、もう一度の今回のプロジェクト開くと問題解決してた😉

地方競馬のUmaConnサービスキー入れ直す時に今月既にってメッセージが出た気がしてたが、別に悪い事してないからスルーしてたんですが、諸々のアプリで認証エラーとか😖 2個あるキーで同一キーの再取得は月1度だけとかなんとかって制限があるらしい。まあね、不正利用防止か何かの策だとは思うが正規ユーザーに支障が出るのはやめて欲しい。今回はそもそも1つしか使ってなかったので2つ目を使う事で難は逃れたけど、これ、今月もう一度トラブルとかでクリーンインストールしたらアウトって事かと思うと微妙だなぁ。

クリーンインストール自体は本当になれたものですが、歳で諸々忘れてたりなのが面倒でした。まあ、本日朝にはほぼ完了して作業進めてました。バグもいつくか見つけて修正して取り敢えず現在は通常のリソースとなるCSVの出力中です。17時に始めてますが、2004年から2022年末までで4時間経過した今も多分2018年辺りを処理中っぽいorz 19年分の出力で5~6時間は掛かる感じですが、1986年~現在のフルセットアップが2時間掛からないのに、ごにょごにょしてるとはいえ、時間掛かり過ぎです。何度もやらないので我慢してますが、これ基にAutoMLしていい結果が得られれば報われますがどうだろうね~

2023/05/12

SSDとHDDを新調

 既に書いてましたが、予定通り金曜日になった深夜にAmazonに発注するとなんと本日配達予定。が、午前中に済むとふんでいた予定が午後に😱 配送業者が不明でなんともですが業者さんには申し訳ないけど、不在だったらまたお願いします。

シリコンパワー SSD 512GB 3D NAND M.2 2280 PCIe3.0×4 NVMe1.3 P34A60シリーズ 5年保証 SP512GBP34A60M28 ¥3,861
サンワサプライ M.2 SSD用ヒートシンク TK-HM5S ¥597
Western Digital ウエスタンデジタル WD Blue 内蔵 HDD ハードディスク 2TB SMR 3.5インチ SATA 5400rpm キャッシュ256MB PC メーカー保証2年 WD20EZAZ-EC 【国内正規取扱代理店】 ¥7,971
セメダイン タイルエース 120Ml RE-358 120ml ¥682
合計¥13,111
ギフト券¥4,900
ポイント¥1,323
差引¥6,888

まあ、こんなんです。最後のは自宅の風呂場の修繕用。最後まで4TBと悩みました。金額差は二千円に満たないのでね。しかし、4TBは大き過ぎると判断しました。現状1TB+1TB+500GBなのでまあ、500GBの所を2TBにすればしばらくは問題ないかと。

新馬戦用ファクター追加して

 新馬戦用のファクターにそもそも馬の性別入れてないとか、まあ、それを追加するついでに父馬にプラスして母馬と母父馬を追加してAutoMLの時間も30分に延長してやってみました。

予想[301] 的中[158] (52.49%) 購入[¥210,700] 払戻[¥395,200 (187.57%)]

そんなに悪くないのかな😉 全体的な予想用にもファクター追加して試してみようかと思います。