u++の備忘録

【ベンチマーク編】機械学習を用いた大相撲千秋楽の勝敗予想

はじめに

前回は、「Sports Analyst Meetup #4」でのLTに向けて、「Sumo Reference」から収集したデータを用いて特徴量作成のための簡単な可視化を実施しました。

upura.hatenablog.com

本記事では、ベンチマークとなる機械学習モデルを構築します。ベンチマークに新しい特徴量を加えることで、性能の変化も確認します。

github.com

ベンチマークの構築

特徴量

特徴量としては、前回の記事で取得した「1〜14日目の勝敗」と、可視化を通じて予測に寄与しそうだと確認した「14日目終了時点での勝数」を用います。

  • day_1, day_2, ... , day_14: N日目の勝敗(1 or 0)
  • wins_at_day_14: 14日目終了時点での勝数

目的変数

  • final_day: 15日目の勝敗(1 or 0)

機械学習モデル

Kaggleでテーブル形式データを扱う上での定番になっている「LightGBM」を用います。

Validation の構築

今回2000〜2019年のデータを取得していますが、test検証用に2015年以降のデータは学習に用いないことにします。

split_datetime = 201501
train = df[df['datetime']<split_datetime]
test = df[~(df['datetime']<split_datetime)]

その上で、Validationは下図のように時系列で切りました。具体的には、validationに用いる28場所分のデータを、1場所ずつズラしていくことで複数の {train, valid} のペアを作成しています。それぞれでvalidationのデータセットに対する性能を今回はAUCで測り、それらの平均をCVスコアとして採用しています。ペアの数をいくつにするかは計算量との兼ね合いですが、現時点ではさほど計算量が多くないので30組を作成しました。

f:id:upura:20190804130114p:plain

評価性能

CVスコアはAUC: 0.52895で、二値分類なのでランダムよりは僅かに良い程度の性能になりました。 "gain" で測定した feature importanceは次の通りです。「wins_at_day_14」が圧倒的に高い値で、その他は相対的に0に近いです。(強いて挙げれば「day_1」が高く、定性的には「初日の結果が場所全体の調子に影響を与え得る」くらいの解釈ができるかもしれません)

f:id:upura:20190804170551p:plain

testデータセットでの性能を見たところ、AUCはCVとほぼ同様の0.54になりました。(こんなにcurve感のないAUCも珍しいですね)

f:id:upura:20190804171048p:plain

0.5を閾値にした場合、正答率と混同行列は次の通りでした。

from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_sub)
0.5304761904761904
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_sub)
array([[333, 187],
       [306, 224]])

新しい特徴量の追加

追加する特徴量

追加する特徴量は「千秋楽の対戦相手の14日終了時点での勝数」です。理由は単純で、本人の「14日終了時点での勝数」が効くなら、同様に対戦相手のものも効くだろうという発想です。

評価性能(新しい特徴量の追加)

CVスコアは0.554915で、特徴量追加前よりも微量ですが向上しました。feature importanceを確認すると、追加した特徴量が上位に来ていると分かります。

f:id:upura:20190804173559p:plain

testデータセットでのAUCも0.57に上昇しました。

f:id:upura:20190804172605p:plain

0.5を閾値にした場合の正答率と混同行列は次の通りです。

0.5476190476190477
array([[302, 218],
       [257, 273]])

おわりに

本記事では、「Sports Analyst Meetup #4」でのLTに向けてベンチマークとなる機械学習モデルを構築しました。新しい特徴量を追加することで、予測モデルの性能が向上することも確認しました。

次回以降、次の2つの方向性で取り組んでいく予定です。

  1. 新しい特徴量を加えて、ベンチマークのLightGBMモデルを改善する
  2. 時系列性を扱える機械学習モデルを利用する別のアプローチを試す