【リメイク版#9】競馬予想AIがついに完成!実際の予測時のコードを作成する
Summary
TLDRこの動画スクリプトでは、競馬予想AIの開発プロセスが詳細に解説されています。2023年のレース結果をもとに機械学習モデルを学習させ、予測精度を高める方法が紹介されています。実際の予測時には、成績データだけでなく、出場馬の体重や人気データなどのリアルタイム情報を取得し、特徴量を作成することが重要です。スクリプトでは、データのスクレイピング、加工、前処理、そして予測のための特徴量の作成までを解説しており、データサイエンスの基礎を学ぶことができる内容です。
Takeaways
- 😀 スクリプトは、競馬予想AIの開発プロセスとその詳細について説明しています。
- 🤖 AIは、netb.COMの過去データベースから2023年のレース結果を学んで予測を行っています。
- 🔍 学習と実際の予測の間にデータの不一致があるため、注意が必要です。特に、馬の体重や人気データはレース直前にしか入手できません。
- 📈 予測の精度を高めるために、学習時に使用したデータと予測時に使用するデータが完全に一致することが重要です。
- 🛠️ スクリプトでは、Pythonを使用して予測募集団を作成し、レースIDとホースIDを取得するプロセスが解説されています。
- 🌐 スクレイピング技術を使って、出馬表などのウェブページから必要な情報を抽出しています。
- 📊 特徴量の作成には、過去のレース結果や天候、馬場の条件などを含む多岐にわたるデータを使用しています。
- 🔧 予測の精度を上げるために、特徴量エンジニアリングを通じてデータ前処理を行っています。
- 📝 スクリプトには、データフレームの保存や読み込み、そして予測結果の出力を含む、一連のプロセスが含まれています。
- 🔄 学習と予測の間でデータの更新が必要な場合、その更新プロセスも解説されています。
- 🎓 このチャンネルは、機械学習やデータサイエンスの基礎を学ぶための教育的な内容も提供しています。
Q & A
このスクリプトはどのような目的で作成されていますか?
-スクリプトは競馬予想AIの作成を目的に、機械学習モデルをトレーニングし、レースの結果を予測するプロセスを自動化しています。
スクリプトで使用されているデータベースのURLはどのような形をしているか?
-スクリプトではnetb.COMというデータベースのURLが使用されており、過去のレース結果が含まれているとされています。
機械学習モデルはどのようにしてレースの着順を予測するのですか?
-機械学習モデルは、netb.COMの過去のレース結果データを学習させ、その学習済みモデルを使ってレースの着順を予測します。
実際の予測時に必要なデータはどのように取得するのですか?
-実際の予測時には、別ページの出場表から馬の体重や人気などのデータを取得する必要があります。
スクリプトで使用されているライブラリやツールには何がありますか?
-スクリプトではBeautifulSoupなどのライブラリが使用されており、HTMLのスクレイピングやデータの加工に利用されています。
予測の精度を上げるためにはどのようなアプローチが必要か?
-予測の精度を上げるためには、学習時に使用したデータと予測時に使用するデータが完全に一致することが重要です。また、データの前処理や特徴量の選択にも注意が必要です。
スクリプトの解説はどのようなチャンネルで行われているか?
-スクリプトの解説は、機械学習やデータサイエンスの勉強ができそうなチャンネルで行われています。
スクリプトのソースコードはどこで入手できますか?
-スクリプトのソースコードは、動画の概要欄やコメント欄にリンクされた記事からダウンロードできます。
スクリプトの実行前に必要な環境設定には何がありますか?
-スクリプトの実行前に必要な環境設定には、Pythonの実行環境や必要なライブラリのインストール、そしてデータベースへのアクセス権限などが含まれます。
スクリプトの解説で触れられている主なポイントは何ですか?
-スクリプトの解説では、データのスクレイピング、機械学習モデルのトレーニング、予測結果の生成、そして実際の運用における課題や実験の方法が触れられています。
Outlines
🤖 AIによる競馬予想の流れとデータの取り扱い方
この段落では、競馬予想AIの開発プロセスとデータの取り扱いについて解説しています。AIは過去のレースデータから学習し、予測モデルを作成しています。netb.COMのデータベースから2023年のレース結果を用いて機械学習を行い、実際の予測時にはnetg.COMの出場表ページからデータを取得する必要があると説明されています。また、予測の正確性には、学習時に使用したデータと同一の形式でデータを取得することが重要であることが強調されています。
🔍 スクレイピングを用いた出馬情報の取得
第二段落では、スクレイピング技術を使ってレースの出馬情報を取得する方法が説明されています。結果払い戻しテーブルからデータを抽出する代わりに、レース前にも公開される出馬表ページからフースIDを取得することが求められています。スクレイピングの過程でBeautifulSoupを使ってHTMLを加工し、必要な情報だけを抽出しています。
📊 予測募集団の作成とデータフレームの操作
第三段落では、予測募集団の作成方法とPandasのデータフレーム操作について説明しています。開催日、レースID、フースIDを取得し、それらをデータフレームにまとめるプロセスが紹介されています。関数の作成とその使い方、そしてデータフレームへのデータの入力方法が詳細に説明されています。
📈 データの前処理と保存
第四段落では、スクレイピングしたデータを前処理し、ファイルに保存するプロセスについて説明しています。日付、レースID、ホースIDを含むデータフレームを作成し、それをCSVファイルに保存する手順が詳細に説明されています。また、保存時に日付形式への変換やディレクトリーの作成などにも触れられています。
🏇 馬の過去成績の取得とテーブルへの変換
第五段落では、馬の過去成績を取得し、テーブル形式に変換するプロセスについて解説しています。スクレイピングを用いてHTMLファイルを取得し、それらをテーブル形式に加工する関数の作成方法が説明されています。また、取得したデータを新しいファイル名で保存することで、古いデータとの干渉を避ける方法も紹介されています。
🔧 特徴量の作成と前処理
第六段落では、機械学習モデルに入力する特徴量の作成と前処理について説明しています。過去成績のテーブルを前処理し、必要な特徴量を抽出するプロセスが紹介されています。また、事前に集計できるデータと当日更新されるデータの取り分け方、そしてそれらを特徴量テーブルに結合する方法についても詳細に説明されています。
🛠️ 予測時の特徴量作成クラスの構築
第七段落では、予測時の特徴量作成プロセスを効率化するためのクラスの構築方法について説明しています。事前に集計できる特徴量と当日更新されるデータの取り扱い方、そしてそれらを統合するクラスの骨組みの作り方が詳細に説明されています。また、クラスの利点として、関数の再利用性や実行効率の向上が強調されています。
🏁 予測当日の処理フロー
第八段落では、予測当日に行われる処理の流れについて説明しています。事前に集約されたデータと当日取得するデータを組み合わせ、特徴量テーブルを作成し、機械学習モデルに入力するプロセスが紹介されています。また、スキップ可能な処理やクラスのメソッドを使って効率的なデータ作成を行い、最終的な予測結果を得る方法についても詳細に説明されています。
Mindmap
Keywords
💡機械学習モデル
💡予測
💡スクレイピング
💡特徴量
💡データベース
💡前処理
💡競馬予想AI
💡出場表
💡精度
💡クラス
Highlights
AIを用いた競馬予想の流れをコードにまとめる方法が解説されています。
機械学習モデルに2023年のレース結果を学習させ、そのモデルを用いて着順を予測するプロセスが紹介されています。
学習時に使用したデータと実際予測時に使用するデータの差異が説明されています。
予測の時に必要な最新の馬体重や人気データの取得方法が解説されています。
実際の予測時に必要なデータの取得方法とそのタイミングについて説明されています。
学習データと予測データの整合性について、同じ列とデータの意味を保つ必要性が強調されています。
初心者向けに機械学習やデータサイエンスの基礎を学べるチャンネルが紹介されています。
競馬予想AIの精度を上げるために行う実験やシミュレーションの方法が説明されています。
動画の概要やコメント欄にソースコードのダウンロードリンクが提供されている旨が案内されています。
レースIDの取得方法とその重要性が説明されています。
スクレイピングを用いたフースIDの取得方法が詳細に解説されています。
予測募集団の作成方法とそのデータフレームの形式が紹介されています。
スクレイピングモジュールの使い方とその利便性が強調されています。
関数を用いたデータの自動取得と待機時間の扱い方について説明されています。
データフレームの作成とその活用方法が解説されています。
ファイル保存時のディレクトリーの設定方法が紹介されています。
最新の馬の過去成績を取得し、それをテーブル形式に加工する方法が説明されています。
前処理のコードとその活用方法、そして特徴量の作成方法が解説されています。
特徴量エンジニアリングのクラスを作成し、予測時の特徴量作成プロセスを効率化する方法が紹介されています。
事前に集計されたデータと当日更新されるデータの扱い方とその重要性が強調されています。
予測時の特徴量作成の流れとそのコードの骨組みが解説されています。
予測結果のテーブルがどのように得られるかのプロセスが紹介されています。
詳細編の動画や記事へのリンクが提供され、さらに深い解説が期待できる旨が案内されています。
Transcripts
と4110411041あすげえすげえ
すげえ今番4当たってますね41これで
学習から予測までの競馬予想AIの1連の
流れをコドにまとめることができましたね
ということでこっからはだんだんあの制度
を上げていったりするフェーズに入って
いき
[音楽]
ますはい今回はですね実際の予測の時の
行動を書いていって競馬予想AIを完成さ
せたいと思います今どんなことをやってる
かって言うとこのnetb.COMのこの
過去のデータベースから2023年の全部
のレースの結果を機械学習モデルに学習さ
せてその学習させた機械学習モデルを使っ
てこの着順のところを予測するっていうの
をやってますでですねただ1個難しい
ところがあってあの学習の時に使ったのは
このnetg.COMののデータベースの
ところにあるこの過去の成績のデータなん
ですけど実際予測する時にはた別のページ
のこの出場表っていうページのところから
データを取ってこなきゃいけないですねで
しかも今あの収録してるのが6月1日なん
ですけどこれ6月2日の例えばデータを
取ってこようとするとまだこの馬体重とか
が発表されてないんですねあとはもっと
言うとこの予測の予想ウッツ単勝ウッツと
か人気のデータっていうのはレンスの直前
に更新されたりするものになるのでもう
直前にならないと処理できない部分って
いうのがあるんですねなのでそういうのを
どうやって扱っていけばいいかとかどう
いうコードを書いていけばいいかっていう
のを今回解説していきますあとは予測の時
に大事になってくるのは学習の時に入れた
データと全く同じデータを作んないといけ
ないんですね同じ列でと列の数とか方とか
を揃えてで中に入ってるデータの意味もと
同じように作っていかなきゃいけないので
そういうところどうやって揃えていけば
いいかっていうのも今回やっていきます
はいこのチャンネルはこんな感じでですね
競馬予想AIを作ることを通して機械学習
とかデータサイエンスの勉強ができるよう
なチャンネルになっていますでこういう
機械学習のやつって大体その1回だけ機械
学習で競馬予想してみたっていうで終わっ
てしまうパターンとか多いんですけどと
このリメイク版っていうのはとちゃんと
本格的に運用してと長く使ってくKY想
AIにするにはどういう風にコドをまとめ
ていけばいいかっていうところだったりと
かこれ作って終わりじゃなくてどんどん
精度を上げていかないといけないんですね
なのでそういう時のと実験ってどういう風
にやっていけばいいのかとか
シミュレーションのコードどうやって書け
ばいいかっていうところまで踏み込んで
まず初心者向けにコドを書いて解説して
いってるようなチャンネルになってますで
今回の動画で使うソースコードですね概要
欄とコメント欄の記事の中にコ
ダウウンロードするところがありますので
そこから見ることができますあとはあの
動画の詳細編だったりとかあとはあの動画
の補足とか解説とかも記事の中で載せてる
ような形になるので興味ある方是非見てみ
てくださいはいということで早速やって
いきたいんですがとさっき言ったように
えっと本番ってこの質表のデータから取っ
てこないといけないんですねこういう馬
体重とかとオッツとか人気のデータって
いうのは直前にならないと取れないんです
けど事前にそのどの馬が出走するかって
いうデーはここに入ってきているのでこの
予測したいレースの日にどの馬が走る
かっていう情報をテーブルで取得していき
ますレース前日準備っていうところでの
事前に取れるところとかのデータは準備し
ておくようなイメージですね予測募集団の
作成っていうのをやっていきます何をする
かって言うとと
日付レースIDどのレースを予測するの
かっていうのとフースIDどの馬が出走
するのかっていう予測したい日のこのペア
のデータを取得していくっていう感じです
でまずはこのレースIDのところなんです
けどとこれちょうどすでに作ってあるこの
スクレイプレスIDリストこの関数を利用
すればとこれ開催開催日を入れるとここに
説明書いてありますね開催日をリストで
入れるとレースIDの一覧が返ってくる
ような関数になってるのでとこれでまず
レースIDまでは取得することができます
なので使っていき
ましょうこういうにやですね関数に
ちゃんとまとめておいたのがかなり聞いて
て便利なソースコードになってますねはい
でレースID
リストはスクレイプレースIDリストので
えっと今回の動画では例としてあの6月1
日のデータに対して予測をしていく時の
場合を考えていきますなので
20204年の6月1日っていう風にやる
とまずこれであのレースIDの一覧を取得
してくれます
はいリスト見ていきましょうこんな感じ
ですね全部で長さ
が24個でさっきのところに戻ると6月1
日はえっと2つの競馬場で開催されてて
それぞれ12レースまであるので24で
オッケーですねこれでレスIDの一覧が
取得できましたでじゃそしたら次にとこの
IDですねそれぞれのレースIDに対して
このフースIDどの馬が出走するのかって
情報を取っていきますそれがどっから
取れるかって言うとこの結果払い戻しって
いうテーブルはこのレースの後に知れる
データなのでこの出馬表ですねここがあの
レース前にも明かされてる情報になるので
このページから取っていき
ますこのURLから取得していくんですが
えっとここはパラメーターなので無視して
このURLですねこのURLに対してまず
スクレイピングをしていきますはいこれで
スクレイピングです
ねこれでえっとこのページのこのこういう
HTMLの一覧が取得できます
GoogleChromeの右クリック
から検証でこの中身見ることができるん
ですがこの今こうやって書いてある
HTMLの一覧が今ここで取得できてい
ますねこの辺りのスクレイピングの方法と
かあの前の動画とかでも詳しく解説してる
ので是非見てみてくださいね
スクレイピングできたら今まで通り
ビューティフルスープで加工していき
[音楽]
ますはいこうです
ねで今取得したいのがえっとこのフース
IDこのうめって書いてあるここのえっと
フースIDっていうのが多URLの情報の
ところにあるんですよねこうやって遡っ
てくとえっとここにありましたねこの
URLの中のとこの数字ですねここを取得
していきたいですなのでえっとそれを取得
するために上の方に遡っていってこのタグ
ですねこのタグに注目しましょうこのTD
タグでクラスの名前がホースインフォって
なってるタグに注目してあげてスープの
フイン
オールこの辺りのスクレイピングの方法と
か結構あのいろんな動画で解説してたり
するのと結構今回その内容が盛になるので
ちょっと飛ばし気味にいきます
ねはいこれでうですねこのTDタグの中身
っていうのがを取り出すことができたので
このリスト型で入っていいので例えば1番
最初のTDタグだったらとこんな感じの
ものが入ってるのでこれに対して正規表現
でえっとここの数字を取っていきますどう
するかっていうと今ロでも表示してくれ
ちゃってるんですがとまずAタグですね
この中からこのAタグをまずここで抽出し
てでAタグのHレフ属性っていうところに
とこのURLがまず入ってますこれだけ
ちょっと見てみます
かここにURLが入ってるのでこのURL
に対してとこのレースIDの部分10桁の
数字になってるのでそれを取り出して
くださいっていうコードを書いてますそう
するとこのレースIDが取り出せますねな
のでこんな感じをで今1つのTDタグに
ついてやったんですがこれを全部のこの
最初に取得したリストについてやっていっ
てかつそれをまた全部のレースIDに対し
てこの24個のレースIDに対してえっと
ホースIDを取得していくっていうのを
そういうコードを書いていきますとコモン
ソースの中でクリエイト
プレディクションポピュレーション測
[音楽]
ポピュレーションていうのは英語で募集団
ですねと予測募集弾を作成する
Pythonのスクリプトを書いていて
この中にあの関数で書いていきます今使っ
たパッケージをスクリプトの中でも
インポートしていっ
てでスクレイプフースIDリストっていう
関数を作っていきますレスID
を入れる
とリスト型でとフースIDが返ってくる
ような関数ですねはいレースIDを指定
するとそのレースIDの出走場のIDの
一覧が返ってくる関数ですねでまずURL
がこれ
ででえっと今このとべた書きでレースID
を指定してるんですがここ
をとこうやって中括弧で書いてここにFを
つけてあげることによってこの入ってきた
レースIDに対してURLを指定すること
ができます
でスクレイピングをし
てビューティフルスープのオブジェクトに
変換し
[音楽]
ますであとはさっきと同じ流れでTDの
リストまで取っていってここにまずからの
リストを定義しておいてフォア分で入れて
いくようなイメージですねはいまずこの
取得したTDのリストから1個ずつ回しで
ここがさっきのコードで言うえっとこれ
ですねこれでホスIDが取り出せるように
なってるのでここはこうですねうんこれで
いいですねTDが1つずつ回っていって
このフスIDリストっていうここで定義し
たからのリストの中に1つずつ入れていっ
てくださいこういうコードでオッケーです
ねでこの放送ididのリストを返して
あげるはいこれでまず実行してみましょう
インポートクリエイトプレディクション
ポレーション
インポートしてあげてスクレイプホス
ididリストに対してえっとじゃあ最初
の取得したさっき取得したレスIDリスト
この中から1番最初の
ものこれ
を入れてあげ
ましょうはいオッケーですねそうすると
フースIDの一覧をこれでリストの形で
取得することができましたそしたらここの
流れで今度はえっと1つのレースIDに
対して今フスIDリストを取得するコード
を書いたんですが最初に取得したこの
レースID全部についてと取得していって
とこういう日付とレスIDとフスIDの列
を持つあのパンスのデータフレームの形に
まとめていきますインポートパンスで
パンスをインポートし
て次
にクリエイトっていう関数を作って開催
ピを入れるとファダスのデータフレームが
返ってくるような関数を作りますでどんな
関数かって言うと開催日開催日を
yyyymmddの形式で指定すると
えっと予測募集団である日付レースID
ホース
IDのデータフレームが返ってくる関数
こういうのを書いていきますなのでまずは
えっと催が入ってくるのでそれに対して
さっきと同じようにさっき1番最初にやっ
たのと同じようにとまずレースIDの一覧
を取得してあげますこれです
ねまずはこれをやっていきたいんですが
えっとこれスクレイピングモジュールモ
ルっていうのはこのドッパって書か
れた形のものモルっていうんですが
このスクレイピングモジュールの中にある
関数を使いたいのでとこのスクリプトの中
でもさらにインポートスクレイピングに
やってあげますそうするとここにあると
関数が使えるようになりますねでさっき
ここ下書きしたんですがこれが今引数で
入ってくる開催デートになるのでこれで
レースIDの一覧が抜き出すれますでそし
たらレースIDinレースIDリスト
みたいな感じであってこの関数っていうの
がこの1つだけのレースID1つのレース
IDを入れることが想定されてる関数に
なるのでこれに対してスクレイプフスID
リストっていうのをこう使ってあげ
ますモスID
リストが返ってきますねこれ
ではいでえっと大事なのがここで1回
スクレイピングをすることになるので必ず
フア分とスクレイピングを組み合わせる時
は1秒間待機時間をあのネットKは.
COMのサーバーに負担かけないように
入れてあげましょうでえっとインポート
タイムですねはいで
やりたいのが日付レスIDホスIDって
いうデータフレームを作りたいのでパンス
のデータフレーム
で日付が入ってきたこの開催デートで
レースID列にと今フア分で回してるので
このレースIDを入れてホスIDにここで
取得したホスIDリストを入れ
ます
はい一旦ちょっとここまでであのこの
データクレームどんなものができるかって
いうのを見てみますそういう時はとリタン
DFってここでやってあげるとここであの
強制的に1回目のループでと関数が終了
するような形になるのでこういう感じで
確認していくとあの関数作りやすいですね
ここがデータフレームになってるしたら
これで1回今の関数実行してみましょう
これを書いておいたので
えっと更新したい時ははオートリロード
オートリロードっていうのを実行すればと
今の書いたこれが反映される形になり
ますでこれ
でクリエイト関数を実行してみましょう
ここに開催
日開催日
を
yyyymmddの形で入れる
とはいまずこれで最初にとレースIDをス
ピングしてくれてます
ねはい帰ってきましたこんな感じのデータ
クレームが返ってきましたねコア分の中の
このDFっていうのがっと帰ってきてます
ねここではい1つのレースIDに対して
こんな感じでそのレースそのレースの中で
出走する馬さっきサイト上で見たこの
レースですねこの馬の一覧がここで返って
きてます1つのレースIDだとこんな感じ
になるのでこれをえっと全部のレースID
に対してやってあげたいのでどうするかて
言うとこのDFをたくさん入れるっていう
意味でこのDXっていう自称型を作って
おいてそこにその自称型
にDFをこうやって入れていくような形に
しますでその自称型のデータに対し
てDXvalていう風にやってあげる
とやってあげるととさっきのこが縦に
どんどん繋がっていくような形になります
ねとこの方法についてはとこのクリエイト
ロディFの関数を作るところで詳しく解説
してるのでとその記事をぜひ見てみて
くださいはいこれでともう1度実行してみ
ますリロードして関数を実行してみます
今回は24個のレースididに対して
あるのでちょっと時間かかるかなって思い
ますねあれ
なんかエラーになった
キノットセッタデータフレームミス
マルチプルカムズカラムがダブってる
ぞって言われてますねなんでだろうあ
ここここDFSです
ねはいもう1回これで実行してみ
ますリロードして再実行してみますでこれ
あれですねちょっと時間かかっててどん
くらい進んでるか知りたくなるのでとここ
にtqdm入れてあげまし
qdmノートブックからtqdm
インポートして入れてあげましょうであと
はこのそれぞれのスクレイピングの処理の
ところにと何をやってる
か書いてあげるともっと分かりやすいです
ね
はいはいで結果返ってきてますねうんそう
ですねこんな感じでと日付ととレースID
今度全部のレースIDに対してとそれぞれ
ホスIDをスクレイピングして結合して
くれてますねはいそしたらえっと今度これ
をファイルに保存していくんですがそれも
関数の中で自動的にやってくれる形にし
ましょうでえっとファイルの保存場所なん
ですがこれは新しくとディレクトリーを
作ってしまいましょうこれ専用の
プレディクション
ポピュレーションみたいなディレクトリー
を作ってしまってその中にあの保存して
いく形にしましょうなのでそのファイル
パスを
まず定義してあげますファイルパス
はとパスリブのパス型で定義してあげると
環境の違いによってエラーを起こさずに
済むのでそれで定義してあげますね
プレディクションポピュレーション
[音楽]
いうディレクトリーを定義してあげ
ますでと初回の実行の時とかもしこの
フォルダーがない時にエラーになって
しまうのでここで作っておきましょうはい
そしたらこのクリエイト関数を実行する時
にセーブディレクトリ
とセーブファイルネームを指定してあげて
まプレディクションポピュレーションの中
の
まPO.CSVとかにしときますか
デフォルトの名前はでこのコンッDFに
対し
て2CSV
でのファイルに保存してあげ
ますでえっと区切り文字はタブがいいので
これを設定しますであとはえっと日付の列
ですねこれ文字列のままこうやって保存し
てもいいんですがこれあの日付型に変換し
ておきましょう
ということで
えッDF
の日付列はパンダのtoデータイムって
いうので日付け型に変換します確か
yyyymmの形はフォーマット
デフォルトのままで指定しなくても日付型
に変換してくれたはずなのでこれでもう1
回実行してみ
ますプレプレディクション
ポピュレーション
っていう変数で受け取りましょうはいこれ
でまずさっき書いたあのレースIDの
リストをスクレイピングしてますみたい
な進捗を表示してくれますねでホースID
リストをスクレイピングし
ていますっていうのを表示してくれるのと
このプログレスバーはさっきここに
tqdmっていうのを書いた影響ですね
これであのこんな感じで24分の何まで
スクレイピングが終わってるかっていうの
を表示して分かりやすくなりましたねはい
処理が終わりました中身同じさっきと同じ
ものが返ってきてるか確認するのと
オッケーそうですねであとはあれ
プレディクションポピュレーションが保存
されてないぞなんでだなんで
だなんで保存されてないんだろう
ポピュレーションディアであこれなんか
今日データとデート間違いやすいなデータ
なんかでそっかここにできちゃってんのか
これちょっと1回消してもう1回っと再
実行し
ますはい現れましたねここに
population.CSVがこんな
感じでできてきますはいこれで予測募集団
の日付とどのレース6月1日を予想しよう
と思ったらえっとどのレースがあってどの
馬が走るのかって情報をできたので次です
ねえっと今使ってる特徴量として何があっ
たかっていうのをもう1回確認していくと
このデータベースのえっとねあのレース
結果テーブルまずこのテーブルの中のと
こういうなんか金量とか性別年齢とかの
カムを使ってたのとあとこのレースの情報
テーブルテーブルっていうかこれまだ文字
ですけどえとレースの情報から色々天気と
かあのレースの芝なのかダートなのか障害
なのかっていうのを取ってきてたのとあと
はこの馬の過去成績ですね例えばこの馬
だったらこの馬がこの予測したいレースに
対してと直近3レース5レースでどんな
成績を上げてたかっていうのを集計して
ここら辺ですね3レス分5レース分10
レース分のも賞金と着順の平均をここで
中継してるんですが例えば今学習させてる
データって2023年の全部のレースの
結果学習させてて6月1日とかに予測し
たい場合っってモデルを学習させた時点
から馬の成績のデータが更新されてる可能
性っていうのが高いんですねなので予測の
時にまた今の過去成績を取得する必要が
ありますこのちょうど予測募集団の中に
ホースIDがあるの
でホースIDですねこの馬に対してえっと
また馬の過去成績テーブルこれを取得して
作ってあげるっていうのをやっていきます
でそのコードっていうのはもう既に作って
あるのでスクレイピングの中のと
スクレイプHTMLホースですねはいこれ
どんな関数かって言うととホースページの
htmlをスクレイピングしてと
ディレクトリに保存するでここに書いて
あるのがスキップトっていう風にすると
既にHTMLが存在してる場合はスキップ
されるんですが今回上書きしたい最新の
データに上書きしたいのでSKIPイ
フルスにして実行して行きますなので
ホースIDのリストっていうの
は
ユニークこの予測募集団に含まれるやつで
スキップはフルスにしますはい
HTML
パズ
コスいうのでこの取得したHTML
ファイルのパスが返ってくるのでそれを
受け取りますねはいこれでまず
スクレイピングをしますそうするとこの
関数はデータのHTMLの中のこのホース
このディレクトリにそれぞれの馬の過去
成績のこのhtmlを取得していってと
ファイルでこう保存していくようなこう
いうドッバイナリていうファイルで保存し
ていくような関数でしたねこれで1回あの
処理を待ちたいと思いますはい
スクレイピングが完了しましたで中身見て
みましょうこんな感じで取得した
バイナリーファイルのパスが返ってきて
ますね一応長さも
チェックはい入れた放銀の数だけ
スクレイピングがちゃんとできてますねで
そしたら次にとこのテーブル形式にする
ところですねこのファイルからテーブル
形式にしたいんですがとこれもすでにと
クリエイトLDFの中にとクリエイト
フースリザルツっていう関数を準備して
ますねなのでクリエーLDFの中でクエス
っていうのを準備してますでと説明出し
たいのでこう打ってみるとこれ何かって
言うと今取得したのホースページの
htmlを読み込んで馬の過去成績
テーブルに加工していく関数になりますな
のでこのパスのリストを入れてあげるのと
あとここで1個ポイントがあってこれこの
まま実行しちゃうととデフォルトがこの
fceRES.CSVこれ上書きされ
ちゃうんですよねこれ何だったかて言うと
学習の時に使った馬の過去成績テーブル
ですねこれ2023年に走る馬全部のと馬
の過去成績のデータが入ったテーブルに
なってるんですがこれを上書きしちゃうん
ですけどとこれはこれで取っておきたい
ものなのでと別のファイルネームに保存し
てあげることにしますでファイルネームは
これ引数でちゃんと用意してあげてるので
セーブファイル
ネームっていうのをとじゃあフース
リザルツプレディクションみたいな名前に
しますかこんな感じで定してあげることに
よってあこれデータクレーム返ってくるの
でちょっと受け取ってあげますかフス
リザルツ
プレディクション予測の馬の過去成績
テーブルでノットファンドって書いてある
のはまだあの走ったことない馬とかは
テーブルが見つかりませんにはなりますね
はいこんな感じでホースリザルツ
プレディクションていう別のファイル
ネームを指定しあげることによってその日
を足するデータはここに保存されることに
なりますこれがですね結構あの元々
クリエイトRDFテーブルデータ作る時に
関数にちゃんとまとめておいた効果になり
ますねこんな感じでとファイル名とかを
引き数で設定できるようにしたことによっ
てここを1個変えるだけであの別の
ファイルネームに保存することができ
るっていうこういうのは結構ねあのこの時
にちゃんと作った自分に感謝したい案件
ですねこういうのちゃんとまとめておく
ことによってまって後々使いやすくなって
いったりしますはいこれで上の過去成績
テーブルその日に予測したい日に走る馬の
と最新の過去成績を取ってくることができ
たのでと次に実際予測の時の特徴量の
データを作っていきたいと思いますで特徴
量のデータはこのそれぞれのバージョンの
フォルダの中にコードがあるのでそこに
書いていくことにしますなのでこの
バージョン3.0.0のとデブ
ノートブックに1回移っていきます一旦
消しますねこういう風にフォルダーを分け
てる背景とかはただこれも前の動画と記事
で解説しので参考にしてみてください即時
の処理ですね即時の処理の中のレース前日
準備さっき作ったこれはと馬の過去成績
テーブルのローデータこのままではあの
例えばこういうデータとかは機械学習に
入れられないのでそれをまずは前処理して
いきますでその前処理のコードもすでに
作ってあるのでこれがこのプリプロセッ
シンググっていうところにプロセスホース
リザルツっていう関数で作ってあるので
これ実行していきますでインポートプリ
プロセッシングでオース
リザルツプリプロセスはこのプリ
プロセッシングの中のプロセスかな
プロセスフォースリザルツっていう関数で
これ何かって言うと馬の加工績テーブルの
の未加工のデータをとインプット
ディレクトリから読み込んで加工してと
このアウトプットディレクトリに加工
えっと保存してくような関数ですね
デフォルトだとも01プリプロセスていう
ところに保存され出ていますでこれも便利
なのがえっとセーブファイルネームか
セーブファイルネームをこれもデフォルト
だとこのホースリザルツなんですがさっき
指定したとこのフースリザルツ
プレディクションっていうのに変えて
あげることによってえとこのファイルが
読み込まれて01プリープロセスのところ
にと加工されて保存されることになります
はいできましたね感じで前処理のデータが
一発で開けねこれどうですかだいぶ便利
じゃないですかこんな感じで1発で新しい
コードを書く必要はないですねと学習の時
は馬の過去成績の他にあのレース結果の
テーブルとレース情報のテーブルをここで
加工してたんですがこれはただ事前にでき
ないことになりますね最初に話したんです
けどこのオツとか人気とか馬退場のデー
タっていうのが事前に集計できなくてと
直前に取得しないといけないんですよねな
のでここからちょっと複雑になっては
しまうんですがここら辺の処理を予測時は
全部このフューチャーエンジニアリングの
ところでやっていきたいと思いますなので
どうするかって言うとこのフューチャー
エンジニアリングの中にクラスえっと
フューチャークリエイターってあるので
プレディクション
フューチャー
クリエイターっていうクラスを作り
ますでえっと先にクラスの骨格中身の具体
的な処理は置いといて骨格どんな感じで
やるかっていうのだけと書いていきますね
まずどんなイメージでやるかって言うと
ここですねこれ馬の過去成績の直近N
レースの着順と賞金を平均して集計する
ものなんですがこれはそのまま同じ処理が
できますでさらに言うとこれはえっと事前
にできる処理なんですよね馬の過去成績な
のでえっと当日更新されるデータていうの
は使わないのでこういうのは事前に集計し
ておくことにしますなので出走する馬が
確定した時点で先に実行しておいても
いいっていう風にしますねでここからなん
ですがどんな感じのイメージで特徴量を
作っていくかって言うと
まずフチ出馬テーブルHTMLっていう
関数を用意し
[音楽]
ますえどういう関数かっていうとレースを
1個指定するとそのレスIDの出場表
ページのHTMLが返ってくる関数
htmlをスクレイピングする関数こう
いう関数をまず用意しますこうすることで
この関数の中でと直前に例えばツとか人気
の値が更新されたらこの関数を実行する
ことによって更新できるっていうような
イメージですねでその結果をなんか例えば
えっとこのクラスの中のSF.HTML
みたいな感じにしておいてとこのクラス内
のHTMLとして使えるようにしておき
ますペッチっていうのはなんか取って
くるってい感じの意味ですねこの出場表の
htmlを取ってくるってい意味の関数
です同じ感じ
でその取得したhtmlを入れるとケトル
とレース結果テーブルを取得して学習時と
同じ形式に前処理する関数で学習時にやっ
てたえっとこのレース結果のテーブルを
取得して前処理するっていうの2段回に
分けてやってたんですがえっと予測の時
ってこのオツとか単勝が更新されるから
それを取得してすぐにそのまま前処理する
んですねなのでそれを1括でこの関数の中
でま予測の時はやってあげますからなんか
こういうイメージですねDFは=ファンス
のReHTMLでテーブル形式に変換して
あげてここで前処理をしてでこのクラスの
SF.RESとかに入れてあげるような
イメージです同じようにレースインフ
テーブルについても同じ感じでhtmlを
受け取ってレス情報テーブルを学習時と
同じ感じに前処理してあげ
るっていうことをやりますこれなどんな
イメージかって言うとビューティフル
スープでなんかhtmlを加工していく
ようなイメージですねで最終的にセルフ
レースインフォっていうところになんか
加工してあげたデータフレームとして入れ
てあげるっていうイメージですなのでこの
フェッチの処理っっていうのはレースの
直前にこう更新するようなイメージですね
でそれらの関数を全部実行してあげるメ
ソッドドっていうのを学習と同じように
ここに用意してあげる感じですね特徴量の
作成処理を実行してポピュレーション
テーブルに全部結合していくっていうです
でポピュレーションテーブルっていうのは
なこの関数のイニットとかで読み込んで
あげるイメージですねこれもなんかセルフ
オペレーションイコールBCSVこれまだ
書いてないんですけどなんかさっき保存し
たえっとこのプレディクション
ポピュレーションこれを読み込んであげ
ますこのレスIDフスIDっていうところ
から読み込んであげてそこに前処理した
レース結果テーブルとかレース情報
テーブルとかどこの作ってる特徴量ですね
馬の過去先の特徴量とかをどんどん紐付け
てくイメージですこれはあの学習時の時の
あのここら辺の処理と一緒ですねなので
基本的にはこれをコピーしてあげて同じ
感じで作ってくイメージですで1個違うの
がここ
でこの取得の処理が入るっていう感じです
ねエッチ出馬テーブルでhtmlを取って
きてあげ
てでレース結果テーブルを取ってきて前
処理もしてあげ
てあえっとフッチレースインフォレース
情報テーブルを取ってきて前処理をして
あげるそうするとこのセルフリザルツとか
セルフレースインフっていうのにえっと
それぞれの処理されたテーブルが入るので
あとは同じマジ処理で書けるっていう
イメージですねであとは例えば第7回の
動画でクラスにするメリットとして関数の
あの単体実行ができますよっていうのは
あったと思うんですがそれが生かせる場面
がついに来たっていう感じなんですよね
どういうことかって言うとえっとさっき
書いたようにこのaggフースNレズって
いうのは先に実行しておいてもいいんです
ねなので先に実行しておいた時にはこの
処理がスキップできる何がしたいかって
言うと後々このなんか事前の集計処理が
重くなったりする場合この単勝オッツとか
が更新されてあのすぐにデータ作りたい
ですよねそうしないと間に合わないので
なるべく直前のオとかを取得したいって
いう時に間に合わないのでここら辺の
データをこの処理を待ってる時間っていう
のが無駄なんですよねなのでそれを
スキップできるっていう意味でスキップ
AGコースとかやってあげてまデフォルト
フォルスにしてこの処理は実行してあげる
ことにして先に実行しておいた場合は
スキップできる
こんな感じでやってあげますなのでこの
関数をあらかじめ実行して外から実行して
あげた場合にはこのスキップAGフォース
ていう引数をトルーにしてあげればこの
処理がスキップできるっていうスキップし
ても事前に集計してたらこのクラス内の
AGフースNRACていうところにあの
ちゃんと入ってくるのでここであの
ちゃんと処理は行われるっていうこういう
仕組みにしようと思いますこれ結構なんか
若干複雑な話して
はいると思うのでなんかついていけなく
なったりとかわかんないよっていう方い
たら是非あのコメント欄とかであの聞いて
くれれば返しますのではいこんなイメージ
ですね先にこれを実行しておいた場合は
スキップできるはいこんな感じのこれが
このクラスの予測時の特徴量作成のコード
の骨の部分になりますなのでと先にこれど
実行するとどんな感じになるかっていう
イメージをちょっと見せていきたいと思い
ます予測当日はどういう処理をすることに
なるかっていうとまずは今作った
プレディクションフューチャークリエイ
ターっていうクラスを初期化してで馬の
過去成績集計だけ先にこうやってやって
おきますそうするとefcのえっとフース
リザルじゃなくてあなんだっけ
AGスNRDFっていうところにと事前に
こんな感じで直近3レス分5レース分とか
集計した結果っていうのが先にこう格納さ
れる形になるんですねでそしたらこのこの
スキッAGフォースっていうのをTRUE
にすることによってスキップしてこの特徴
量の更新をしています今この出場表の
ページからhtmlを取得してとレース
結果テーブルとレース情報テーブル
それぞれ前処理したものが入ってています
確認してみるといいと思うんですがECの
えっとリザルツっていうところには例えば
こんな感じでレース結果テーブルの前処理
の結果が入っていてレースインフっていう
ところにははいそうですね1つのレース
IDでやるので1つのレース情報の
テーブルがこうやって入ってくるイメージ
ですはいこんな感じで特徴量が返ってきて
学習時と同じような立で処理されたこの
特徴量のテーブルが入ってくるのであは
これを機械学習モデルに入れてあげるば
予測の結果が返ってきます予測のコードも
あのこの後作っていくんですがこんな感じ
でプレディクション.Piっていうのに
こうやってまとめて学習させたモデルを
あの読み込んでフィーチャーズが入ってき
たら予測するっていうスクリプトを書いて
あげればこれでこんな感じで予測の
テーブルが返ってくることになります
こんな感じの処理の流れで当日は予測する
ことになりますねはいということでえっと
ここからは正在編の方の動画に行ってこの
中身の処理ですねプレディクション
フューチャークリエイターの今ここに省略
してるここの部分完成させていってあの今
の処理作っていきたいと思います詳細編の
動画はあの概要欄とコメント欄の記事に
貼っておきますので是非興味ある方見てみ
てくださいはい概要編一旦ここまでにし
たいと思いますご視聴ありがとうござい
ました
[音楽]
Voir Plus de Vidéos Connexes
競馬【展開予想】3つのポイ ント(No.1) 有力馬を探し出す展開の考え方、基礎知識と予想方法の講義(全3回)です。競馬予想をする際に初心者の方から簡単に展開を楽しんでもらえるような講座を心がけました
Geminiでコンテンツマージ
【AI】津波の浸水を瞬時に予測! 東日本大震災の教訓生かし「南海トラフ地震」での活用に期待『every.特集』
【金鯱賞2024】田原成貴が展開予想 ドゥレッツァ、プログノーシスどちらが勝つ? 3着に狙える穴馬は?《東スポ競馬ニュース》
GPTとは何か Transformerの視覚化 | Chapter 5, Deep Learning
さらに賢くなる!Claude3におけるプロンプト術を解説してみた
5.0 / 5 (0 votes)