見出し画像

競馬予想支援システム開発記 #2

こんにちは、ようへいです。

競馬予想システム開発の奮闘記です。

当初の目的は競馬予想AIを作ること。
AIを作るには学習データ(レース結果)が必要になります。
今回は、レース結果を取り込むための、発走結果取込み機能の開発で、以下の記事の続きになります。

システムの概要

競馬予想支援システムの見た目やデータモデルは以下の記事にまとめていますので、ご興味あればご覧ください。

開発環境

開発環境はこちらにまとめました。

発走結果取込み機能の開発

システム概念図

今回の記事は、赤枠で囲った部分の話です。

開発期間

2019/11/1~2020/6/22
約8ヶ月も掛かってたんですね。
家族みんなが寝静まった後の数時間だけが開発に使える時間なので、期間は長くなっています。

最初の一歩

この開発がシステムの最初の1歩なので、システムのグランドデザイン設計、データベース設計、超ざっくりと機能設計をはじめに行いました。
また、どこのサイトからレース結果を取り込むか、取り込むならどうやって取り込むのか、一から色々と検討しました。

自画自賛する訳ではないですが、さすがSEというだけあり、ある程度の調査は時間かからず整理できました。
1つのやりたいことに対し、実現方法が複数あった場合どれを採用するか、折衷案とするのか、この技術選択に時間が掛かりましたね。

データベースの設計も、事実をどうデータモデルに落とし込んでいくか、結構考えました。
レース名、発走日、競馬場、競走馬、着順、タイム、着差、騎手、調教師など、目に見える情報は全てデータベースに盛り込んでいます。
楽しかったですね、こういう頭の使い方は。

データモデルのほんの一例(ERD)

開発着手

レース結果を公開している某ページのURLから、そのページに掲載されているレース結果(HTML)をスクレイピングし、システムに登録する機能の開発です。

バッチ用ライブラリclickを使って、それっぽくバッチジョブが作れるようにフレームワークのFlaskを拡張しました。
取り込みたいレース結果のURLをファイルに羅列し、一気にシステムに取り込む手法を採用しています。

スクレイピングしたデータを一度ワークテーブルに書き込み、それをもとに調教師や騎手、競走馬のマスタデータを作り、最後にレース結果やレース名、配当金などのトランザクションデータを登録する流れです。
この流れの中で、調教評価や5世代まで遡った血統も登録しています。

サイト上に見えているデータだけを管理するのは簡単ですが、それだけでは分析には使えません。
公開されている情報はごくごく表面的な情報でしかなく、予想できるだけの材料は揃っていないと思っています。

その気づきはあったので、目に見える情報から導出される情報、例えば、レース毎の走破タイムの平均や標準偏差、ペース、ラップギア理論でいうラップのパターン、上がり3ハロン地点の入線順、上がり3ハロンタイム順位なども計算し、分析しやすいようにシステムで管理しています。

まとめ

この機能の開発で、AIの学習に必要なレース結果をシステムに蓄積することができました。
今後の記事のAI作成の過程で、分析に必要な情報の不足はちらほら出てきたので、対処療法的に分析観点を追加して、必要な情報を導出するような改修を行ってきました。
扱うデータ種やデータ量が多かったことと、仕様が複雑だったので、品質が安定するには時間が掛かりましたが、貴重なデータを蓄積するフェーズは無事に完了です。


この記事が気に入ったらサポートをしてみませんか?