サッカーを通じて観戦力と分析力を上げていくブログ

基本的にはサッカー×データに関して試してみたことをまとめています。最近はもっぱらPythonを使った可視化中心。時々自分の好きなガジェットも。

【データ分析】機械学習周りの用語を整理してみる(初心者)

1ヵ月間「Kaggle Masterによるデータ分析技術者養成講座」なるセミナーを受講していました。DeNAでデータサイエンティストとして働く@yukrai17さんが、Pythonを使った機械学習のモデル作りについて教えてくれる講座で、データの作り方やモデルの検証方法まで分かりやすく説明して頂き非常に有意義な時間でした。

機械学習初心者の私にとっては「AUC」「クロスバリデーション法」「リーク」などこれまで聞いたこともない単語のオンパレードだったので、今回は復習も兼ねて講座で出てきた機械学習周りの用語を簡単にまとめておきます。

前提として自分の機械学習に関する知識は、教師あり学習教師なし学習強化学習などの用語の概念を何となく知っている程度で、裏側で実際どのような作業がなされているのか全く知りませんでした。今回はそこから一歩先の、データサイエンティストと呼ばれる方が実際何しているの?という具体的な手法の解説となります。

機械学習の手法

そもそも機械学習とは、データからアルゴリズムを使ってパターン(モデル)を見つけ出すこと。過去のデータから導いたパターンを結果が未知のデータに適用することで、未来を予測するという使い方が出来ます。今回講習では「決定木」と「ロジスティック回帰」という2つのモデルの作り方を習いました。

決定木

2つのクラスに分類する課題に対して、その確率を算出するモデル。例えば、ある選手がゴールを決めるか決めないか、怪我をするかしないか、移籍するかしないか、のような2択の事象について、過去のその事象に関係するデータと実際の結果を使って予測することが出来るようになります(実際にサッカーの例で正しく予測出来るかは別として)。

アウトプットは下記のようなビジュアルで表現してくれるため、結果の解釈がしやすいのが特徴。(各分岐点では、例えば「ポジションがFWであれば50%で得点する→右に分岐、それ以外であれば10%で得点する→左に分岐」というような意味合いの記載がされており、どの変数が影響を与えているのか分かりやすい。)

f:id:virgilvd:20190729224132p:plain

交互作用と呼ばれる、2つの要因が重なって初めて現れる相乗効果も見つけられる可能性があるのも強みだそうです。

交互作用をサッカーで例えるならば、年齢が高いほど怪我をしやすい、DFの選手は怪我をしやすい、という独立した2つのデータがあるとします。この時通常は高齢のDF選手は怪我する確率が高くなりそうですが、実はセルフケアをしっかりしている人が多いなどの理由から、DFで年齢が高い選手の怪我率が低くなっている場合、これを交互作用と言います。 

弱みとしては、既存のデータを分類するモデルのため、過去にない値を元にした予測が出来ない点が挙げられます。先の例では、これまでにいなかった100歳のサッカー選手に対しては、怪我をしやすいのか予測することが出来なくなります。

ロジスティック回帰

決定木と同じく2つのクラスに分類する課題に対して、その確率を算出するモデル。しかし決定木とは異なり、こちらは数式の形を取るので値を代入すれば過去にないデータでも予測することが出来ます。例えば、身長と体重の比が2:1の時に活躍するという結果が得られた時に、身長300cmというこれまでのデータにはなかった選手が現れた場合でも「活躍するには150kg必要」と求められるイメージです。

 一方で変数間の関係性は考慮されないため、決定木と異なり交互作用を見つけることは出来ないという弱みを持っています。

モデル 結果 強み 弱み
決定木 2値に分類する時の確率 結果が視覚的に分かりやすい
交互作用を見つけられる
過去データ外の予測が出来ない
ロジスティック回帰 2値に分類する時の確率 過去データにない値でも予測することが出来る 交互作用は見つけられない

アンサンブル学習の手法

機械学習での予測の精度を上げる方法として、複数のモデルを組み合わせて精度を上げるアンサンブル学習(集団学習)という方法があるそうです。Kaggleで上位の成績を納めるには必須の方法で、ビジネスの世界でもAIを謳っているツールの内部で採用されていたりします。ただしアンサンブル学習を行うと、作業工数が増える割りに劇的に精度が良くなるわけではなく、またモデルの解釈が難しくなるので、実務で使われることよりは、Kaggle等のコンペで上位を狙うために使われることが多いとのことです。

平均

アンサンブル学習の手法の1つが「平均」と呼ばれるもの。その名の通り、複数のモデルの予測結果を平均することで、一つのモデルで精度が悪く出てしまう値に対しても補うことが出来る。

メタモデル

メタモデル」は、作成したモデルらに既存データを予測させ、その結果を新たな変数として再度モデルを作成する手法。例えば、選手の怪我率を予測するモデルを、決定木とロジスティック回帰で作った時に、まずそれぞれのモデルにそれを作る元となったデータで予測をさせます。すると元データに対する予測の列(決定木での予測結果列とロジスティック回帰での予測結果列)が出来るので、その2つの列を変数にして再度ロジスティック回帰などをする手法となります。こうすることで、それぞれのモデルに重み付けがなされ、より最適な結果が出るようになります。

バギング

「バギング」は、元となるデータから重複ありでいくつかのグループを作り、それぞれに対してモデルを構築し、その結果を平均する(集団学習する)ことによって 精度を上げる手法。

スタッキング

「スタッキング」は言葉で説明するのが非常に難しいのですが、メタモデルの弱点を補完するための手法と思われます。メタモデルは、元データを使って再度予測をさせますが、モデル作成時点ですでに元データを使っているため「答え」の情報がモデルに考慮されてしまっています。そのため、モデルが予測データに適用しすぎる(=過学習)可能性があり、未知のデータに対して精度が出ない恐れがあります。

そこでスタッキングでは、まず元データを再度学習させる際に元データをK個に分割。K-1個でモデルを作り、残りの1個を予測させる、ということをK回繰り返すことで答えの情報を含まずに元データの予測結果を出力することが出来ます。これを複数モデルで行い、あとはスタッキングの要領で重み付けしてあげれば精度が上がるといった算段です。

ブースティング

講習では名前の紹介程度でしたが、「ブースティング」と呼ばれる手法もあるそう。これが中々強力とのことで、とりあえず使うだけでもかなり精度が上がるのだとか(詳しい仕組みはよく分かりませんが)。 

モデルの評価手法

作成したモデルの精度を評価する指標がいくつかあります。単純に考えると正答率だけ見ればいいんじゃないのかな?と思いますが、例えば異常値を検出したいモデルで、1万件中数件の異常値しかない場合に、全てを正常と予測してしまうと正答率が100%近くなってしまうため、問題設定に合わせて適切な評価指標を選ぶ必要があるそうです。

ここは概念も難しく簡単に説明できそうもないので割愛しますが、評価指標にはAUCやLog Loss、RMSEなどがあるそうです。決定木やロジスティック回帰などの2群分類で使えるAUCを講座では使用していました。

モデルの検証方法

モデルを作成し評価するにしても、未来のデータでは結果が出るまで検証できませんし、モデル構築に使用したデータだと答えもモデルに入っているため、構築用データに最適化(過学習)している可能性があり正しく評価できません。しかし、モデルを作る際にデータの使い方を工夫することで、今あるデータだけでモデルの精度を評価することが出来るようになります。

ホールドアウト法

モデル構築用の答えが分かっているデータを予め「構築用」と「検証用」の2つに分けてからモデルを作成する方法。これによって構築用で作成したモデルで検証用データを予測させることで、先の評価指標を使用し未知のデータへの精度を測ることが出来ます。しかし元データを分割してしまうため、データがある程度ある時でないと、構築の精度が上がらなかったり、検証の精度が上がらなかったりします。

クロスバリデーション法

ホールドアウト法に対して、データ十分数ない時でも有効なのがクロスバリデーション法(K分割交差検証法)です。こちらはスタッキングと考え方は同じで、まず既存データをK個に分割 し、K-1個のデータでモデルを作ります。出来たモデルに対して、構築に使用したK-1個のデータと、未使用の1個のデータを予測させてその精度差を測ります。これをK回繰り返すし、それぞれの平均値をとり、大きく乖離していなければ、未知のデータに対しても同等の精度が期待できます。

その他

リーク

機械学習では「リーク」と呼ばれる注意すべき事象があります。その名の通り本来考慮すべきことが漏れている状態のことを言うそうです。例えば、未来を予測したいのに未来でしか手に入らない情報がモデル構築の際に利用されていたり、予測したい答えとほぼ同類のデータが入っていたりすることが該当します。

前者の具体例は、サッカーの試合結果を当てるモデルで、パス本数など試合をやってからでないと手に入らない変数を使っているなどです。また、後者の具体例は、将来活躍する選手のモデルに所属クラブなどが入っていて、強豪クラブに所属している選手ほど将来活躍するという結果が出た場合です。当然、強豪クラブの場合、スカウトの質が良かったり、育成が充実していたりするので、活躍する選手が多いかも知れませんが、だからと言ってこの結果から強豪クラブの選手を獲得するという補強方針では予測する意味がありません。

以上、今回自分が講座を通じて習った機械学習周りの用語でした。基本的にデータサイエンティストの方々は、

「課題とゴール設定」→「機械学習のモデルとその評価指標の決定」→「モデルに即したデータ加工」→「モデルの検証」→「モデルのチューニング」

といった工程を繰り返すそうです。どうしても技術的な要素が絡んでくるので、こうした簡単な説明では伝わらないと思いますが、「こんな用語があるんだ」くらいには参考になればと思います。自分ももう少し勉強を続けて理解を深めて、実務で使ってみたいと思います。

戦術や分析に関して、こういう見方もあるよ、こうして見た方がいいよ、などご意見等ありましたら、コメントで教えていただけると幸いです。ぜひよろしくお願いいたします!

(補足)

自分が習った講座と同じものが9月にも開講されるとのことなので、興味がある方は受けてみてください。この記事の100倍分かりやすく教えて頂けます笑