AIと作成すれば、プログラムを知らなくても、作成できる
最近は、AIがやたら、広告で放送されています。
AIを知らなければ、仕事がなくなる可能性があります。
難しい、わからない、できない、ではありません。
プログラムを知らなくても、機械学習システム作成できるようにしましょう。
競馬の機械学習システムを作成する
私は、7年前までは、まったくの素人でした。
今の素人かもしれませんが・・・・
しかし、機械学習システムを作成するスキルはありません。
でも、欲しい。
そんな時に有効になるのは、ChatGPTです。
なので、ChatGPTに質問しながら、競馬の機械学習システムを作成しようと思います。
このブログはこんな人にお勧め
- AIを利用したい人
- AIを利用したいが、プログラムのスキルがない人
- 競馬で大儲けをしたい人
このブログを読み終わるころには・・・
今回の内容
機械学習システムを作成するために環境を、作成していきます。
特に難しくありません。
費用は、ChatGPTの有料版の料金のみです。
競馬に関するものですが、作成する過程は、皆さんの実務でもきっと利用できるはずです。
ChatGPTに質問してみた 競馬のオッズを分析して学習させることは可能ですか?
- データ収集
まず、過去の競馬データを収集する必要があります。 具体的には、以下のデータが有用です:
- オッズ情報(単勝、複勝、馬連、馬単、三連単など)
- レース結果(着順、タイム、騎手、馬場状態)
- 馬の成績(過去の戦績、騎手との相性、距離適性)
- 馬場や天候情報(芝・ダート、重・良、気温)
- データの前処理
収集したデータを整理し、機械学習に適した形に変換します。例:
- オッズを数値データに変換
- カテゴリ変数(騎手、馬場状態など)をエンコーディング
- 損値の処理(平均値補完や削除)
3.機械学習モデルの選択
以下のような手法が考えられます:
- 回帰分析(オッズと実際の勝率の関係を予測)
- 分類モデル(勝ち馬や馬券の中確率を予測)
- ディープラーニング(過去データからパターンを学ぶ)
使用できるモデルとしては、
- ランダムフォレスト
- XGBoost
- ニューラルネットワーク(TensorFlow、PyTorch)などが
有効です。
- モデルの学習と評価
過去のデータを使ってモデルを学習させ、検証データで精度を確認します。
- ROC-AUC(的中確率の評価)
- 戻り間違い(実際の勝率とオッズのズレを測る)
- バックテスト(過去データで仮想的に馬券を買った場合の収益)
- 実際の予測と活用
学習したモデルを用いて、新しいレースのオッズを分析し、
- 過小評価されている馬を発見
- 期待値の高い馬券を選ぶ
などに活用できます。
注意点
- 競馬は多くのランダム要素が関与するため、完全に予測することは非常に困難です。
- オッズは市場の反映であり、情報がすでに織り込まれていることが多い
- 回帰や機械学習を活用しても、当面の利益が出るとは限らない
このような回答でした。
★ChatGPTが提示した学習モデル
ロジスティック回帰(単純な勝率予測)
特徴:シンプルな分類モデル
利点:計算が軽い・解釈しやすい
ランダムフォレスト / 決定木(特徴量の影響を流動化
特徴:馬の成績、騎手、馬場状態などの中断を継続できる
リット:特徴量の重要度を確認しやすい(「どの要素が勝敗に影響するか?」が判断)
XGBoost / LightGBM(予想でよく使われる)
特徴:過去成績・オッズ・馬場など複数の特徴を学習できる
利点:精度が高い・過学習を恐れやすい
ニューラルネットワーク(ディープラーニング)
特徴:馬の過去成績や調教データを非線形なパターンで学習できる
利点:複雑な関係性(馬の適性、展開の影響など)を学習可能
★XGBoost / LightGBM(勝率予測・馬券予測)を選択
この機械学習システムの特徴です。
XGBoostとLightGBMは、競馬の勝率予測や馬券予測に使用される機械学習モデルです。
これらのモデルは、過去の成績、オッズ、馬場状態などのデータを学習し、高精度な予測を行います。
これにより、高期待値の馬券や過小評価されている馬を見つけることができます。
当面のデータ量:過去5~10年分のレースデータ(1万~3万レース以上)
理由:
多くの特徴量(オッズ、馬場、距離適性、騎手、血統)を使うため、データ量が多いほど安定
データが少ないと「過学習(特定の傾向に偏る)」のリスクが高まる
★データを保存する場所 SQLiteデータベースに保存する
大量のデータを保存するには、データベースが必要です。
ACCESSではダメです。
っていうか、ACCESSは、もう卒業しないといけません。ACCESSの時代ではありませんね。
★SQLiteをインストールする
ここで必要なものが、ダウンロードできます。
64ビット版と、32ビット版がありますので、注意してください。
ダウンロードすると下記のようなフォルダが作成されます。
私は、すべてインストールしました。
★コマンドブロンプトで、SQLiteの設定をする。
cd SQLlite\sqlite-tools-win-x64-3490100
このコードで、SQLliteにアクセスします。
データベースの名前を決める
sqlite> .open keiba.db
「keiba.db」というデータベースファイルが作成され、今後もデータを保持できるようになります。
★テーブルを作成する
CREATE TABLE wood_training (
レースID馬 TEXT PRIMARY KEY, -- ユニークなレースID
レースID TEXT, -- レースID
馬名 TEXT, -- 馬名
調教師 TEXT, -- 調教師名
場所 TEXT, -- 調教場所
コース TEXT, -- コース種類
回り TEXT, -- 右回り or 左回り
年月日 DATE, -- 調教日
性別 TEXT, -- 性別(牡・牝・セ)
年齢 INTEGER, -- 年齢
10F REAL, -- 10Fタイム
9F REAL, -- 9Fタイム
8F REAL, -- 8Fタイム
7F REAL, -- 7Fタイム
6F REAL, -- 6Fタイム
5F REAL, -- 5Fタイム
4F REAL, -- 4Fタイム
3F REAL, -- 3Fタイム
2F REAL, -- 2Fタイム
1F REAL, -- 1Fタイム
Lap9 REAL, -- Lap 9
Lap8 REAL, -- Lap 8
Lap7 REAL, -- Lap 7
Lap6 REAL, -- Lap 6
Lap5 REAL, -- Lap 5
Lap4 REAL, -- Lap 4
Lap3 REAL, -- Lap 3
Lap2 REAL, -- Lap 2
Lap1 REAL, -- Lap 1
関連データ TEXT, -- 関連データ(レース情報)
順位 INTEGER -- 調教順位
);
こんな感じです。
ここは、SQL文を記載しないといけませんが、ChatGPTが教えてくれます。
でも、SQL文は、データベースを扱うには、必要な知識です。
覚えて損はありません。
- hill_training ⇒坂路調教
- wood_training⇒ウッド調教
- race_summary⇒レース情報
- hill_training_summary⇒坂路調教の重複を削除
- wood_training_summar y ⇒ウッド調教の重複を削除
- training_summary⇒坂路調教、ウッド調教の重複を削除したテーブルを結合
- training_race_summary⇒ training_summaryとrace_summaryを結合
- training_summaryとrace_summary⇒学習対象のデータ
ここがポイント

本日紹介した知識は、私にはありましたが、一人でやったら、時間がかかると思います。
端的な、質問を、ChatGPTに繰り返して、確認しましょう。
AIの良い所は、感情的になりませんし、上から目線で、回答しません。
わかるまで教えてくれます。
まとめ
ここまで、準備は完了です。
見慣れない言葉があったかもしれませんが、気にしないで進めてください。
理解することも重要ですが、いったん完成させることが重要です。