俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

【2位解法】Nishika開催「Jリーグプレイヤーの出場時間予測」の振り返り。

データサイエンスコンペティションサイトのNishikaで開催されたJリーグプレイヤーの出場時間予測に参加し、2位の成績を残せました!

今回は、PublicLBの6位から、PrivateLBでの2位の初めてのShakeUpでの入賞でした。ShakeUpしたということは、汎用性能が出てないともとれるので、モデル精度的には望ましくないかもしれないですが、心情的にはとてもうれしいです!

f:id:kanriyou_h004:20201019184613p:plain

 

スポーツコンペは、プレイしている選手たちを想像しながら取り組めるので、とても楽しく参加することができました。

では、振り返って参りたいと思います。

1.全体構成

今回のコンペは、複数のファイルのデータを結合しながら取り組むコンペティションでした。

時系列データとしてもとらえることができたかもしれませんが、単純に結合したテーブルデータとして前処理したデータを複数のモデルに学習・予測させてアンサンブルをとるという手法をとりました。

その代わり、データの前処理については、いつも以上に力を入れて取り組みました。

(実際一番、精度がアップしたのは前処理を入れたときでした。)

f:id:kanriyou_h004:20201019210637p:plain

Score推移は以下の通りで、特徴量追加でぐっと下がっりました。

それ以降、クロスバリデーションなどいろいろ試したのですが、時系列データに近いということもあり、うまく分割できず思うようにスコアが伸びませんでした。

終盤で他のコンペで利用したハイパーパラメータをモデルに適用することで最後の一押しの精度向上ができました。

f:id:kanriyou_h004:20201019213803p:plain

2.前処理

前処理については、最初はいつもの通り、欠測補完とターゲットエンコーディング程度の学習データで実施していたのですが、それでは不十分と思い、以下のような前処理を行って特徴量を追加しました。

【eventデータ】         

データ種類

処理内容

出場記録

選手毎にフル出場, 途中出場, 途中退場,途中出場途中退場, 出場停止,ベンチ入りの回数を集計し、試合数で割って正規化したデータを年度ごとのファイルに保存しました。

 【trainデータ】

データ種類

処理内容

選手名、登録ボジション、国籍 

sklearnの LabelEncoderで、数値化。

国籍については、Nullの場合は日本として補完。

チーム名、過去シーズン在籍チーム

辞書を作成し、数値化。

また、過去のシーズン在籍チームについては、'・'の有無で、チーム移籍有無を表す特徴量として追加。

生年月日

年を抽出して誕生年の特徴量を追加。

ユース出身

0または1で数値化。

過去シーズン出場試合数、得点数、出場時間

欠測[-]を-1で補完。

過去シーズン所属リーグ

欠測[-]を0で補完。

推定年俸

欠測[na]を中央値で補完。

3.モデル構築

 今回は、モデル構築には、LightgbmとRandomForestとXGboostを使いました。

ニューラルネットワークも活用したり、時系列処理も試してみたかったのですが、時間の関係で、木モデル中心の構成となりました。

クロスバリデーションについては、KFold等いろいろ試してみましたが、うまくいかず、評価は2018年度のデータを検証データとするホールドアウト法などで行いました。

また、ハイパーパラメータについては最終的に、過去のコンペで使用したパラメータを用いることで良い結果がえられました。

f:id:kanriyou_h004:20201019210637p:plain

 

5.感想

今回のコンペは、実際に実名の選手のデータが登場するコンペだったので非常に盛り上がりました。サッカーは、中継での観戦が中心なのですが、時差の関係で深夜や早朝になる国際大会であってもリアルタイムで見る派なので、知っている名前が出てくる度に嬉しくなっていました。

データ分析としても、欠測の補完のパターンやラベリングのパターン、数値を正規化したりしなかったり等、基本的な手法をいくつも試すことができて面白かったです。

ただ、同時期に取り組んでいたスプラトゥーンコンペとは対象的に、モデルのパターンは余り試せなかったのは心残りでした。

一方で、過去のコンペで使用したモデルのパラメータが活用できたのは、最後の追い込みで非常に役に立ちました。コンペ毎に完結するのではなく、コンペで培った資産は、次に活かしていくことも大切と改めて感じました。

また、今回は、ガイドラインhttps://www.nishika.com/guidelines)に従った成果物の提出が必要であったため、提出物の作成に非常に苦戦いたしました。

順位等確定後、提出物が即時に提出できるよう普段から成果物の管理を実施しておくことの重要性も再認識いたしました。

今回のコンペでの教訓も今後に活かしていきたいと思います。

6.謝辞

最後となってしまいましたが、本コンペを運営してくださいました、Nishika の運営の皆様、一緒にコンペに取り組んでいらっしゃった皆様に心より感謝申し上げます。

また、データのもととなっているJリーグ関係者の皆様には、いろいろと大変な時期ではございますが、エキサイティングなゲームをご提供いただけることに感謝を申し上げます。

私も、皆様に感動を与えられるような実績を残せるよう精進してまいりたいと思います。

 

【過去記事】

G検定、E資格の取得から、これまでに取り組んできた道のりは以下にまとめております。何かのご参考にしていただければ幸いです。

oregin-ai.hatenablog.com

oregin-ai.hatenablog.com