今回は主観ではなく、データを用いた話をしていきたいと思います。
――――――――――――――――――
※NOTE
慎重に言葉を選んでいるつもりですが、万が一分析手法への理解や結果の解釈など何か誤っている箇所がある場合は教えて頂けると大変助かります。よろしくお願いいたします。
――――――――――――――――――
私事ですが、最近ランダムフォレストとかいう機械学習を勉強しました。そこで何かのデータを使って実用してみたいなと思い、タイトルのようなテーマで分析をしてみました。
まずランダムフォレストとは何かということなんですけど、ぼくの理解度で大雑把に説明すると、ランダムフォレストとは与えられたデータをもとに分析対象のグループ分けをしてくれたり、分析対象の予測をしてくれるものです。例えば、ある商品Aをよく買う客はどんな属性を持っているのかを分析してくれたり、おおまかな天気予測などもできるようです。正しいデータがあればですが
ランダムフォレストの面白いポイントとして、それぞれのデータが分析結果にどれだけ影響を与えているのかを簡単に確かめることができます。例えば先述の商品Aの例でいうと、どうも若い男性に人気であるという結果が得られた場合、データのうち "性別" と "年齢" のデータが大きな影響を与えていることになります。このデータの影響度、つまりグループ分けや予測にそのデータがどれだけ貢献をしたのかを簡単に確かめることができるため、分析結果の考察がしやすいというわけです。
さて、そんなランダムフォレストを用いて今回どんなことをやってみたかというと、
「過去5シーズン(15-16シーズン ~ 19-20シーズン)のレギュラーシーズンについて、
各チームのチームスタッツと勝率をデータとして与える。このデータを参考にして、
20-21シーズンの各チームのチームスタッツからそれぞれの予想勝率を計算する」
というものです。要するにチームスタッツと勝率の間には果たしてどのくらい関係があるのかを確かめてみたということです。
まず使用したデータについて説明します。
データは全て "Officail NBA Stats" に載っているものを参考にしました。
Official NBA Stats | Stats | NBA.com
今回は、勝率を予測していくにあたってチームスタッツを使用しています。これは自然な選択だと思うので、特に説明することもないかと思います。そして、データとして使用したスタッツについてですが、トラディショナルスタッツだけではなくアドバンスドスタッツも含めました。理由としてはアドバンスドスタッツにも興味深いデータがあるかもしれないためです。というかせっかく分析するんだし、使ってみたいデータは使うに限ります。
使用したデータは以下です。スクショで失礼します。
次にデータの整理を行います。今回は勝率を予想していくんですが、勝率に全く関係ないデータだったり関係しすぎているデータは取り除く必要があります。例えばトラディショナルスタッツの "W" は各チームの勝利数を表しているのですが、これは勝率にもろ関係してますよね。このようなデータが残っていると、パソコンもこのデータのみを使って勝率を予測しようとしてしまうため、取り除く必要があります。
今回は取り除くべきデータとして、トラディショナルスタッツの "GP" 、"W" 、"L" 、"MIN"、"+/-" 、アドバンスドスタッツの "NETRTG" 、"PIE" です。"+/-" と "NETRTG" は勝ちに直結するスタッツであると判断したため消しました。実際これらを含めて分析すると、この2つのデータの分析結果への貢献度が非常に高くなり、他のスタッツはノイズみたいな結果になりました。勝率予測の精度はだいぶ良かったんですけどね。
"PIE" に関しても同じような理由で削除しました。PIEをよく知らなかったので調べてみたところ、強いチームほど大きな数字が出がちらしいので取り除く方がいいのかなと思います。
それでもって残りのスタッツは取り除くべきではないと判断しました。例えば、平均得点が高いからと言って勝てるわけではないですし、ターンオーバーが多いからと言って負けるわけでもないからです。
ここまでやってやっとこさ分析に入ることができます。
改めて今回の分析の目的と予測のために参考にするデータを整理します。
―目的―
20-21シーズンのレギュラーシーズンについて、それぞれのチームのチームスタッツから各チームの勝率を予測したい
―参考にするデータ―
過去5シーズン(15-16シーズン ~ 19-20シーズン)のレギュラーシーズンにおける各チームのトラディショナルスタッツとアドバンスドスタッツ
今回、各チームを数字で表しています。理由としてプログラミングがめんどくさかったのとグラフに書くと文字が多すぎて潰れたからです。
数字とチームの対応表を次に示します。アルファベット順に0から対応してます。ATLが0でWASが29です。
ATL | BOS | BRN | CHA | CHI | CLE | DAL | DEN | DET | GSW |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
HOU | IND | LAC | LAL | MEM | MIA | MIL | MIN | NOP | NYK |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
OKC | ORL | PHI | PHX | POR | SAC | SAS | TOR | UTA | WAS |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
得られた分析結果がこちらになります!
横軸がチームを表しており縦軸が勝率を表しています。また、青い折れ線は20-21シーズンの実際の各チームの勝率を、赤い折れ線は分析した結果の予想勝率を表しています。
こうしてみると、スタッツからだけでもなんとなくチーム勝率を予測できているのが分かります。今回の分析で得られた予測モデルの決定計数は0.783で、まずまずな出来だといえそうです。
予想がドンピシャだったチームtop3はチーム5(CLE)、チーム11(IND)、チーム21(ORL)で、それぞれ誤差が-0.102%、0.359%、0.364%でした(誤差 = 予測勝率 ー 実勝率)。OKC(チーム20)の予測精度も悪くないぞ!
一方予想をだいぶ外したチームも多くあります。外した順top3はチーム2(BRN)、チーム7(DEN)、チーム24(POR)でそれぞれ誤差が16.864%、14.566%、9.571%でした。
そして、気になるそれぞれのデータの貢献度ですが、こうなりました。
左の数字は貢献度の順位です。右の数字がいわゆるそのデータの貢献度合いを表していることになります。全部足すと1になります。
分析した結果、順位予測にはDEFRTGとOFFRTGが大きく貢献していることが分かりました。この結果はある程度予想できましたし、NETRTGも含めたRATING指標はチームを評価するうえで重要であることが再確認できたことになりますね。その次に貢献度が高かったスタッツはTS%で、これはフリースローも考慮したシュート効率を表したスタッツになります。近年はフリースローを獲得する技術も重要になっており、それに伴うフリースローの重要性も上がっています。この情勢を科学的に裏付けることができたのかもしれません。
ここまでで既に貢献度のうち83.5%が説明されました。さらにEFG%とFG%も合わせると89.5%です。他の28個のスタッツは順位を予測するうえでごくわずかな貢献しかしていないことが分かりました。よって簡単な考察すらしません。何か気になるスタッツありますか???
さて、以上の分析いかがでしたでしょうか。今後の方針として、OFFRTGとDEFRTGのデータを取り除いた場合、予測モデルの精度はどうなるのか、各スタッツの貢献度はどうなるのかを調べてみたいと考えています。
他にも、面白そうなデータとか予測してみたいことがあったらやってみたいです。今回の順位予測は実用的ではなく、例えば「レギュラーシーズンのスタッツから予測するプレーオフでの勝利数」とかならチーム作りの観点だったりラスベガスだったりで役立つと思うんですけど、今回のはそれぞれのスタッツの重要性を確認してみただけですので、結局自由研究の域を脱しないのです。
しかし、単純な平均得点や平均失点はチームの成績を予測するうえで重要ではなく、OFFRTGやDEFRTGを見る必要があること、そして単純なシュート確率を見るのではなく、フリースローや3Pも考慮したスタッツであるTS%やEFG%を重要視することが大切であるということをしっかり結論づけられたのは良かったです。
次はもう少し深堀した考察記事をあげるつもりですので、続きもまた読んでいただけると幸いです。
それでは!