競馬AI開発について第10回です。
今回は作成したAIを用いて実際に予測や馬券購入するにあたっての流れやポイントについて記述します。
目次
そもそも競馬AI開発で必要なシステムとは?
AI(人工知能)の定義は曖昧であり、人または時代によって解釈が異なりますが、私の場合は
機械学習手法を用いたプログラム処理(システム)
だと思っています。
競馬AIにおいては基本的に、あらかじめ用意されたデータを用いて予測をする部分のみです。
つまり、データを自動的に収集・加工する部分や自動馬券購入、予想結果集計といった処理についてはAIではなく、あらかじめ人間が定めた処理を実行するようプログラムに記述したにすぎません。
(意思決定を自らしないロボットのようなもの)
なので、たまに聞く「AI投票」というのは私の中で少し違和感を覚えています(投票処理自体はあらかじめ人間が定めたルールに基づき行われているため)。
昔は入力の予測変換なども"AI"と呼ばれている時代がありましたが、今ではそれが当たり前になり予測変換を"AI"と呼ぶ人は今日ではほとんど見かけません。
安易に「AIを使った」と謳った製品がありますが、結構怪しいのも多いですね笑
話がそれましたが何が言いたいかというと、「競馬AI開発」と一口にいってもそれを実際に運用するにあたっては"AI以外"の処理をするシステムをしっかりと作成しなければならないということです。
逆に、この運用部分をできる限りすべてシステム化してしまえば、手動で運用する手間や時間・ミスをするリスクを減らすことにもつながります。
現在、”競馬AI”が注目されつつあるのは
機械学習手法によって予測の精度が向上
されたからであり、それ以外の部分については昔からさほど変わっておらず、多くの方が取り組んでいるためWEB上や書籍などにより簡単に情報を入手することができます。
私自身、あまりこの部分の開発経験が少なかったので実際にほとんどの処理がプログラムで自動化できることを体感できてとれも嬉しいです^^
また、こういった手動作業の自動化は競馬AI開発に限らずさまざまな部分で応用できるので学んでおいて損はないと思います。
運用プログラム処理について
ではAISSのシステムが実際にどんな処理をしているかを説明します。
自動化処理の種類と実行タイミング
処理 | 実行 タイミング |
データ収集~学習用データ作成~予測 | 毎日 |
オッズ収集/馬券購入 | 毎日 |
結果集計 | 毎日 |
DB更新 | 毎日 |
俺プロ入力 | 基本土日 |
ざっと処理を挙げましたが、実行は基本的には毎日ですね。
昔は、中央のみ対応(基本土日運用)で一部は手動で作業していましたが現在では全体の95%以上は自動化できています。
バッチ処理
上述の処理は基本的には毎日自動化されており、それを実現するには
- 各処理を実現する(python)プログラム
- 対象のプログラムを一定期間ごとに実行するためのバッチファイルとタスクスケジューラー設定
が必要です。
ただし、これは第2回の開発環境について説明している通り、AISSはwindowで開発しているため他のOSの場合は異なる対応になります。
下図は、実際のタスクスケジューラーの設定画面です。
各タスクの中で、実行するタイミングやファイルを指定するだけなので非常に簡単ですね。
ただし注意点として、
- (python)プログラムファイルではなくバッチファイルを指定する
- 1日の中で定期的に実行する処理がある場合、タスクスケジューラーの設定からでなく(python)プログラム内で記述する
に気を付けました。
1についてはそのままの意味なのですが、実行するプログラムを直接指定すると失敗する場合がありますので下図のようにバッチファイルを用意し、そちらを指定するようにしましょう。
※コマンドの説明は省略します。2行目でpythonを実行する環境を構築していますが、PC環境によっては必要ないかもしれません。
2については、自分が自動化に取り組んだ当初にかなりつまづいた点なのですが、
タスクスケジューラーのトリガー詳細設定での定期実行は失敗する場合があります!
開発当初、バッチファイルを5分ごとに実行するみたいな設定をタスクスケジューラーからしていたのですが、指定した時間にバッチファイルが起動しないことが頻発し、頭を悩ませていました。。。
従って、現在は1日のどこかのタイミングで1回実行し、そのあとの定期実行はプログラムに任せるようにしています。
例えば私は、
のようにpythonプログラムで実行タイミングを制御しています。
※プログラムの説明は省略します。
自動処理化に必要な技術
最後に、自動処理のプログラムを作成するにあたり必要な技術を簡単に紹介します。
ファイル入出力全般
AIモデル構築時は、あらかじめ必要なデータをデータベースなどに保存しておきそこから抜き出しますが、運用時はテキストファイルなどに収集したデータや予測値などを出力・読み込みしながら次のフェーズへ進んでいくためファイルの入出力全般の知識と技術が必要です。
スクレイピング・クローラー技術
こちらについては第4回で説明した通り予測に必要なデータを収集したり、ブラウザを自動操作することで馬券購入などを行います。
言うまでもなくこの技術を使う/使わないで作業の効率が全くといっていいほど異なります。
エクセル加工技術
主に結果の集計や分析用に利用しています。
基本的なエクセルの加工(データの読み込みや書式設定など)はpythonのライブラリでほぼ対応できるので知っておいて損はないと思います。
ちなみに私はopenpyxlを使用しています。
下図のように、あらかじめ出力テンプレートエクセルを用意して、予測値や結果などをセルに書き込み、場合によっては集計などもしています。
サポート技術
サポートというのは実際に運用するにあたって何かシステムエラーが発生したときなどに少しでも自分が対応を楽にするための機能です笑
主に
- エラー発生時自動メール送信(プログラムの例外処理)
- 処理ログ出力
の2点です。
これが結構役に立っています。
もちろんエラーがないに越したことはないのですが、ウェブサイトのHTML構造変更でうまくスクレイピングできない、といったこともあり得るのでそのような場合にメールや操作ログを見てすぐにプログラムを修正するようにしています。
ただ、日中エラー発生メールが迷惑メールばりに大量に送り付けられてくることもあり、たまに焦ります^ ^;)
並行処理技術
こちらに関してもプラスアルファの内容で、私自身も開発をはじめてしばらくしてから手を付け始めたのですが、一通りの処理の中で時間がかかる部分(予測用データ作成など)があればマルチスレッドでプログラムを処理すると時間短縮につながります。
PCのコア数やメモリ容量によっては、処理時間の大きな改善になるので余裕があれば試してみると良いです。
以上、ざっと実運用に役立ちそうな技術をまとめましたがそれぞれの技術のコーディング例などは改めて紹介できればと思います!
上記の事柄を全般的に学べるおすすめ書籍は以下です。
退屈なことはPythonにやらせようーーノンプログラマーにでもできる自動化処理プログラミング
プログラムを用いて日常の業務や手動でのPC作業をpythonで自動化するための知識と技術が盛りだくさんで大変おすすめです。
まとめ
今回は、
- 競馬AIを実際に運用する場合に必要な処理
- 処理自動化に必要な技術
について説明しました。
今回の内容は、実際に私がこれまで運用するにあたって考えたこと・取り組んだことや躓いた点などをまとめたものとなります。
AISSは個人での開発ですが、複数人で開発する場合は色々なアイデアを出しながら、もっと効率の良い方法で運用されていることでしょう!
それでは次回は地方競馬のAI開発について解説したいと思います!