競馬予想に使えるPythonライブラリ5選
競馬予想に使えるPythonライブラリ5選
競馬データベースを構築したら、次はPythonで分析・予測です。この記事では、競馬予想で実際に役立つPythonライブラリを5つ紹介します。すべて無料で使えます。
1. pandas — データ操作の基盤
競馬データ分析で最も使うライブラリです。SQLで取得したデータをDataFrameとして扱い、集計・フィルタ・結合・変換が自在にできます。
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@localhost/keiba')
df = pd.read_sql('SELECT * FROM umagoto_race_joho WHERE kaisai_nen >= 2024', engine)
# 騎手別の勝率を一発で算出
df['is_win'] = df['kakutei_chakujun'] == '01'
df.groupby('kishumei_ryakusho')['is_win'].mean().sort_values(ascending=False).head(10)
使いどころ: データの読み込み・前処理・集計・特徴量作成。競馬分析のほぼ全工程で使います。
2. LightGBM — 予測モデルの定番
勾配ブースティングの実装で、競馬予測で最も使われているモデルです。学習が速く、カテゴリ変数をそのまま扱え、欠損値にも対応しています。
import lightgbm as lgb
train_set = lgb.Dataset(X_train, y_train)
valid_set = lgb.Dataset(X_valid, y_valid, reference=train_set)
params = {
'objective': 'binary',
'metric': 'binary_logloss',
'learning_rate': 0.05,
'num_leaves': 31,
'verbose': -1,
}
model = lgb.train(params, train_set, num_boost_round=1000,
valid_sets=[valid_set], callbacks=[lgb.early_stopping(50)])
使いどころ: 「3着以内に入るか」の二値分類、着順の回帰予測。特徴量の重要度も確認できるので、どのデータが予想に効いているかを把握できます。
3. Optuna — ハイパーパラメータ自動チューニング
LightGBMの num_leaves や learning_rate などのパラメータを自動で最適化してくれるライブラリです。手動で調整するよりはるかに効率的です。
import optuna
def objective(trial):
params = {
'objective': 'binary',
'metric': 'binary_logloss',
'learning_rate': trial.suggest_float('lr', 0.01, 0.1),
'num_leaves': trial.suggest_int('num_leaves', 15, 63),
'feature_fraction': trial.suggest_float('ff', 0.5, 1.0),
'bagging_fraction': trial.suggest_float('bf', 0.5, 1.0),
'verbose': -1,
}
model = lgb.train(params, train_set, num_boost_round=500,
valid_sets=[valid_set], callbacks=[lgb.early_stopping(30)])
return model.best_score['valid_0']['binary_logloss']
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)
print(study.best_params)
使いどころ: モデルの精度を最後の数%詰めたいとき。100回の試行で最適なパラメータの組み合わせを自動探索します。
4. matplotlib / seaborn — データ可視化
分析結果をグラフで可視化するライブラリです。数値だけでは見えない傾向やパターンを視覚的に発見できます。
import matplotlib.pyplot as plt
import seaborn as sns
# 距離別の勝率をグラフ化
distance_stats = df.groupby('kyori')['is_win'].mean().reset_index()
plt.figure(figsize=(10, 5))
sns.barplot(data=distance_stats, x='kyori', y='is_win')
plt.title('距離別勝率')
plt.ylabel('勝率')
plt.xlabel('距離(m)')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('distance_win_rate.png')
使いどころ: 特徴量の分布確認、モデルの予測結果の分析、回収率の推移グラフなど。分析の「見える化」に欠かせません。
5. SHAP — モデルの判断根拠を可視化
「なぜこの馬が高評価なのか」をモデルに説明させるライブラリです。各特徴量がどの程度予測に寄与しているかを数値化・グラフ化できます。
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# 特徴量の重要度を可視化
shap.summary_plot(shap_values, X_test)
# 特定のレースで特定の馬の予測根拠を表示
shap.force_plot(explainer.expected_value, shap_values[0], X_test.iloc[0])
使いどころ: モデルのデバッグ、予想の根拠説明。「上がり3Fが速かったから高評価」のような説明ができるようになり、モデルの改善ポイントも見つけやすくなります。
まとめ
| ライブラリ | 用途 | インストール |
|---|---|---|
| pandas | データ操作・集計 | pip install pandas |
| LightGBM | 予測モデル | pip install lightgbm |
| Optuna | パラメータ最適化 | pip install optuna |
| matplotlib / seaborn | 可視化 | pip install matplotlib seaborn |
| SHAP | モデル解釈 | pip install shap |
これらを組み合わせれば、データの取得から予測モデル構築、チューニング、結果の可視化まで一気通貫で行えます。
まずは JvLink To Importer でデータベースを構築し、pandasでデータを眺めるところから始めてみてください。
この記事をシェア