【第2話 アーキテクト】現役データサイエンティストが機械学習でtotoを当てるまでの物語

スポーツアナリティクス

第2話をご覧いただきありがとうございます。第2話では、第1話で構想している全体感をアーキテクトとして落とし込んでいこうと思います。

第1話はこちらからどうぞ

アーキテクトが実現すること

このアーキテクトが実現することは、pythonファイルを実行すればtotoの対象試合の予測結果を返すことです。予測してtotoを購入するあたりまで行ければよかったのですが、そこまではやりません。(できません)

ということは、モデルを構築し、totoの予測結果を返すことがシンプルなアーキテクトです。

totoの予測をするためには、totoの開催試合を取得する必要があります。また勝敗の予想に最新のデータは必要不可欠です。常に新しいデータからモデルが構築され、予測したい試合を取得する必要があります。

つまり、上記のシンプルなアーキテクトに加え、常にデータが新しく更新されるようなデータの取得のアーキテクトも必要であると考えられます。
取得するデータは2種類。モデルを構築するためのデータと、モデルを適用するためのデータです。これらを取得するために、スクレイピングによる処理を噛ませます。

以下のような感じになります。

もう少し具体的に

ここからは、今イメージできているアーキテクトの部品をどのような形で実現したりしていくかを書いていきます。

試合結果など

こちらは、Jリーグのサイトからデータを取得してきます。こちらは以前記事に書かせていただきました。

この記事と同じことをします。Jリーグの公式サイトには、これまでの試合結果が格納されています。この試合結果をスクレイピングにて取得してデータとしてローカルに保存していきます。

データ

ここでは、取得したデータの前処理と特徴量エンジニアリングを行うフェーズです。本記事では具体的な言及は致しませんが、モデル構築前の重要なフェーズであることには変わりありません。

前処理の部分は、細かく丁寧に処理するとして、特徴量エンジニアリングはモデルに喰わせるために非常に重要であり、試行錯誤が必須になるフェーズで柔軟性を持たせることが必要だと考えられます。

特に特徴量エンジニアリングの部分については、限られたデータでやっていく必要があり、必要以上に複雑にするとメンテナンス性が低下するためできれば避けたいところ。いったんはまず、Jリーグのスクレイピングから生成できそうなデータに限ってトライしていく必要があると考えられる。

機械学習モデル

この点については、あまり深く考えずに、「LightGBM」でとりあえず回すというアプローチでトライする。

今回のタスクとしては、分類問題。「勝ち」「負け」「引き分け」を予想するので、多クラス分類のタスクとなる。totoが求めるのは、『ホームチームの』「勝ち」「負け」「引き分け」。とはいえ対戦相手のある勝負の世界なので、ホームチームの勝敗だけを予想するのは少し現実問題から離れていると感じるため、ホームチームとアウェイチーム両方の勝敗を予想し、その結果から、最終的なtotoの予測とすることにする。

この点は、まず実装して実際の予測を行ってから、改良をしていけば良い。まずはモデル構築をして予測結果を返せるように手軽に実装してトライしていく。

toto対象試合

この部分については、以下の記事を参考にさせていただきました。ありがとうございました。

ほとんど同じコードで欲しかったデータを取得できました。本当に助かりました。多少アーキテクトの全体に沿うような形で編集を加えていますが、かなり助かりました。

予測結果

今回は予測をシンプルにするために、「勝つ」か「勝たない」かを予測します。そうすることで2値分類のタスクに落とし込めます。

ホームのチームが勝つか勝たないか、アウェイのチームが勝つか勝たないかを予測して、確率を出します。下図のようなイメージで算出します。

算出しているエリアを予測の全体として、合計が100%になるように再計算して、「勝ち」「負け」「引き分け」の確率を再計算します。

この時、どのエリアが最大化されるかで、予測がいずれになるかを判断する形で問題を設定します。

まとめ

以上のような形で、アーキテクト全体を設計し、コードに落としこんでいきたいと思います。

データの取得はスクレイピングにてデータを蓄積させ、前処理と特徴量エンジニアリングを行い、機械学習モデルを構築する。取り急ぎのモデルはLightGBMで、多クラス分類ではなく、単純化するために「勝つか勝たないか」を判別する2値分類の問題に落とし込みました。

以上のような形でアーキテクチャーを構築し、まずは予測をしてみるというのが当面の目標です。totoはおよそ1週間に1回開催されます。1週間に1回のペースでモデルを試行錯誤できるように色々と試していこうと思います。そちらも順次記事化していきます。

データサイエンティストの書評ブログ
趣味が読書くらいしかない駆け出しデータサイエンティストの書評ブログです。日々の勉強のアウトプットや趣味の読書のおすすめをしていきます。
総合トップページ|スポーツくじオフィシャルサイト
スポーツくじ「WINNER・toto・BIG」オフィシャルサイト。 購入方法・当せん確認・販売スケジュールはこちら!

コメント