【競馬AI⑨】目的変数と説明変数の相関係数を計測し、特徴量を選別する

競馬AI

今回は目的変数(着順)に対する説明変数(特徴量)相関係数を計測し、予測に良い影響を与えていない特徴量を特定します。

相関関係がなく、確かに不要だと思った特徴量は削除していきましょう!

本当はもっと最初にやっておくべきことだったのですが、忘れておりました。。。

相関関係とは

まずは相関関係について簡単に説明します。

相関関係とは、二つの変数がどのように関連しているかを示す統計的な概念です。具体的には、一方の変数が変化すると、もう一方の変数もどのように変化するかを示します。相関関係は以下のように分類されます:

  1. 正の相関: 一方の変数が増加すると、もう一方の変数も増加します。
  2. 負の相関: 一方の変数が増加すると、もう一方の変数は減少します。
  3. 無相関: 二つの変数間には明確な関係が見られません。

相関の強さは通常、-1から+1の範囲の数値で表され、この数値は相関係数と呼ばれます。+1に近いほど強い正の相関、-1に近いほど強い負の相関、0に近いほど相関は弱い、または無いことを示します。

一般的には以下のような基準で相関関係は評価されます。

  • 0.0 – 0.2: 非常に弱いまたは無関係
  • 0.2 – 0.4: 弱い相関
  • 0.4 – 0.6: 中程度の相関
  • 0.6 – 0.8: 強い相関
  • 0.8 – 1.0: 非常に強い相関

特徴量の相関関係を計測する

コード

コード自体はとても簡単なものになります。

import pandas as pd
import numpy as np

# 行の表示数を設定(例:None は制限なし)
pd.set_option('display.max_rows', None)

df = pd.read_csv('encoded/encoded_data.csv')

# 「着順」と他のカラムとの相関係数を計算
correlations = df.corr()['着順'].sort_values()
print(correlations)

# 相関係数の絶対値が0.01以下のものを抽出する
sample_correlations = correlations[correlations.abs() <= 0.01]
print(sample_correlations)

上記コードでは、すべての相関係数を計算し出力するとともに、相関係数が0.01以下の特徴量も出力しています。(0.01の部分は調整してみてください)

結果

一例ですが、私の方では以下のような特徴量がヒットしました。

特徴量相関係数
天気3-0.000548
芝・ダート2-0.00083
芝・ダート1-0.00101
距離差1-0.001128
天気2-0.00149
天気40.001823
芝・ダート30.002463
クラス10.002645
天気-0.002745
天気50.003085
場id0.003307
回り-0.003896
天気10.00406
開催0.004355
race_id-0.004357
-0.004804
馬場0.006172
馬場20.00646
日付-0.0067

まとめ

抽出された特徴量は一括で削除するわけにはいかないですが、参考にはなりそうです。

例えば、レースの日付・開催・天気・場id・回りなどは対象レースのすべての馬で同一のものが設定されるので解析のしようがありません。

改善するのであれば、それぞれの天気・回りで馬ごとに平均順位を出して得意な天気や周りを新たに特徴量に追加するなどが考えられます。

ちょっとずつモデルをアップデートし、より良い競馬AIを作っていきましょう!

コメント