まずは@A検索部をちょこちょこ書く。
ついでにベイズ最適化とハイパーパラメータ最適化の勉強
optuna+Postgresのやり方調査
→optuna lightgbmTunerというのもあるみたい。Stepwise Tuning
optuna側のlightgbmを使うわけだけど、最適化にかかる時間とか考えると絶対こっちのが楽だし速いな。
optuna.integration.lightgbmのAPI良く見たらlightgbmのtrainのみサポートとなってる(泣
Dataframe+fit版できたらDatasetを使うtrain版も作るか・・・
→train。LambdaRank用Datasetを作る際にgroup=でQueryデータ渡すだけ。あまり違いは無さそう。
ただしoptuna.integration.lightgbm.trainの戻り値はAPI見ても良くわからない。
optuna.integration.lightgbm.LightGBMTunerにはget_best_booster()はあるがセット方法は不明。
lightgbm.trainの互換ならoptuna.integration.lightgbm.trainのinit_modelでBoosterクラスをセットできるかな?
自己解決
optuna.integration.lightgbm.trainのソースを読むと
auto_booster = LightGBMTuner(*args, **kwargs)
auto_booster.run()
return auto_booster.get_best_booster()
auto_booster.run()
return auto_booster.get_best_booster()
となっているので、trainで渡された引数をそのままLightgbmTunerに渡してインスタンス生成し、最適化しbest_boosterを返してくれるっぽい。よって保存ロード学習継続もノーマルLightgbmと同じ。
という訳で取りあえずDataSetのtrain版を先に作ることに決定。
まずはAを回帰で実装し古いデータで学習。Aの学習モデルで@の特徴量追加するよう@をランク学習で実装
Aはマルチ目的変数になりそうなのでJetson AGX XavierのcuDNN使ってやってみたい気もする。
@着予測モデル
ある程度の固まり単位でレース/評価スコアを検索 ※各環境の学習速度でレース数を調整
出走馬/競走馬を検索
各出走馬の過去レース/評価スコアを検索 ※当該レース日未満のレース対象で3~5走くらい
目的変数を色々試す。※着順はいまいち面白味ないし、標準化した着タイム差あたりも試したい。
ハイパーパラメータ探索調整
ある程度の固まり単位でレース/評価スコアを検索 ※各環境の学習速度でレース数を調整
出走馬/競走馬を検索
各出走馬の過去レース/評価スコアを検索 ※当該レース日未満のレース対象で3~5走くらい
目的変数を色々試す。※着順はいまいち面白味ないし、標準化した着タイム差あたりも試したい。
ハイパーパラメータ探索調整
A順荒れ予測モデル
ある程度の固まり単位でレース/評価スコアを検索 ※各環境の学習速度でレース数を調整
各券種の的中データと配当を検索
目的変数を色々試す。※結局は着馬の人気順/単複オッズ合成か配当でみるしかないと思うので、単勝と馬連の配当予測か1-3着の単オッズ平均あたりでまずやってみる
ハイパーパラメータ探索調整
ある程度の固まり単位でレース/評価スコアを検索 ※各環境の学習速度でレース数を調整
各券種の的中データと配当を検索
目的変数を色々試す。※結局は着馬の人気順/単複オッズ合成か配当でみるしかないと思うので、単勝と馬連の配当予測か1-3着の単オッズ平均あたりでまずやってみる
ハイパーパラメータ探索調整
B買い目予測モデル
@Aのトレーニング検証が終わってから。@Aの検証対象レースより後のレースを学習対象にしないとまずい気がする。
各レースで@A予測。馬券毎に@の着スコアの組とAの予測配当で学習
目的変数は未定 ※取りあえず当たりハズレの0/1か的中馬券とのユークリッド距離を標準化したものを想定
@Aのトレーニング検証が終わってから。@Aの検証対象レースより後のレースを学習対象にしないとまずい気がする。
各レースで@A予測。馬券毎に@の着スコアの組とAの予測配当で学習
目的変数は未定 ※取りあえず当たりハズレの0/1か的中馬券とのユークリッド距離を標準化したものを想定