スピアマンの順位相関係数でスタッツを評価する
各選手のスタッツを独自の指標で評価したい、という話です。
はじめに
本コンテンツは以下の Twitter の投稿内容を自己満足的に補足するものです。
本命はこちら。
— 河井ジャイロ (@MarsOfBlue) 2020年6月3日
ExcelのPearson関数を順位に適用するとスピアマンの順位相関係数を得られるとのことだったので、またもや https://t.co/aLOhWTokmS からデータを拝借して、各スタッツと順位の相関を調べてました。 pic.twitter.com/s9G1WzBcA7
- 序段は独自評価指標を策定したい理由と目標
- 中段はその基礎となる内容
- 終段は得られた結果
という構成になっていますので、興味のあるところだけ読んでください。
全部読むとかなりの苦痛をあなたに与えます。
目次
序段:独自評価指標を策定したい理由と目標
数字を楽しむ
スポーツは一次的には観戦の興奮を共有するものではありますが、さらにスポーツを楽しむ一側面として、「数字」が新たな楽しみとして盛り上がりを見せてきているように感じます。例えば、野球における配球率とゾーンごとの打率による投打予測対決は新たな観戦の醍醐味と言えるでしょう。
Bリーグの開幕により、日本でのバスケットボールの認知が高まりました。そしてバスケットボールもまた「数字」の露出が比較的多いスポーツです。せっかく目に見える数字が多いのならば、それを使った楽しみを観戦にプラスして盛り上がろう! という趣旨です。
わざわざ新しい指標を作るとかバカなの?
バスケットボールには 4 Factors という有名な評価指標が既に存在します。
「ならばこれを使えばいいじゃないか」と言うのはもっとなお話。
ですが、少しひっかかることがありました。
- 4 Factors で選手は評価できるのか
- 4 Factors で選手を評価できる場合、適用可能な単位はどこまでか
- ファクターどうしの関連度
まず、4 Factors は「選手を評価する指標なのか or チームを評価する指標なのか」を判断できなかったこと、次に「異なるチームの選手を評価できるのか or 同じチーム内で評価すべきなのか」といった点が疑問でした。そして最も大きかったのが、最後の因子同士の関連と総合点としての評価です。
めちゃくちゃ単純化しますが、例えば eFG% の+1点と TOV% の-1点は相殺されないため「総合点としてその選手の通信簿を出せない」というところが悩みどころでした。
もっと単純化して、
- 3P を打ったら XX 点
- リバウンドを取ったら XX 点
- ターンオーバーしたら -XX 点
のような同一軸の評価項目を試行錯誤したい、という個人的な興味を持っていました。
そこで 2018-19 シーズン終了後に検討した内容を 2019-20 シーズン終了後にバージョンアップしたのが今回の指標となります。
どういうものを作りたいのか
指標を検討するにあたり、以下のことに留意しました。
- 単純明快、Excel で計算しやすい
- 元データは Basketballnavi.db で「簡単に」値が取得できる
- 現実に(ある程度)即したもの、納得感がある
まず今後の再検討を見据え、計算過程はできるだけシンプルにし Excel で計算できる範囲であることとしました。計算式が間違っていた場合に各選手への再適用が面倒だからです。
次に、愛用している Basketballnavi.db さんで公開されている数値であることと、これも計算式が間違っていた場合に数値の再取得が面倒なので、複数の画面を行き来せずに簡単に取得可能な数値であることとしました。
最後に、これが最も重要なのですが、取得できた値と現実の評価が何らかの形で一致することを水準としました。
数字は説得力を高めてくれますが、数字化されない項目は単純に零れ落ち、必要であったかもしれない要素を逃したまま自ら目隠しして納得してしまう危険性をはらんでいます。
数字を最重要項目として頼り切るのではなく、数字で分析/予測 → プレイで確認 → 数式を修正 というような両輪を回すような使い方を理想としたいと思っています。
今回の独自指標は評価結果と年間アワード表彰者と照らし合わせ、評価の適切さを検討するとともに、活躍したものの評価基準から漏れている選手や次世代のネクストブレイク選手を探し出すことも目標としています。
最終的にこんなふうになったらいいな
独自指標は次のことを目標としています。
- チームの総合力を評価し、早い段階で最終順位を予測する
- 異なるチームの選手を公平に評価する
- 結果を残したが脚光を浴びていない選手を再評価する
- ネクストブレイク選手を予測する
- 選手の移籍によるチームの狙いを予測する
中段 :独自評価指標の基礎となる内容
スピアマン先生
前述の通り独自指標は 2018-19 にも作成していましたが、2019-20 シーズンのバージョンアップ内容として大きく変わったのは 「スピアマンの順位相関係数」を取り入れたことです。
スピアマンの順位相関係数とは何かというと、単純に言えば
ある順位表(A)と、別のある順位表(B)が、相関があるかないか
を計算してくれる係数です。
その中身を見ていきます。
スピアマンの順位相関係数(じゅんいそうかんけいすう)は統計学において順位データから求められる相関の指標である。チャールズ・スピアマン(Charles Spearman)によって提唱され[1]、ふつうρ あるいは rS などと書かれる。
ピアソンの積率相関係数(普通に相関係数と呼ばれるもの)と違い、ノンパラメトリックな指標である。すなわち2つの変数の分布について何も仮定せずに、変数の間の関係が任意の単調関数によってどの程度忠実に表現できるかを、評価するものである。「変数間の関係は線形である」と仮定する必要も、また変数を数値的にとる必要もなく、順位が明らかであればよい。
初見はなんのこっちゃな話ですが、よく見るとかなり使い勝手のいい条件が書いてあります。ノンパラメトリックなので正規分布している必要がなく、よく分からない変数を一生懸命計算する必要もありません。
数式は以下となるようです。(同順位がある場合)
「ああああああああああ!!! クソめんどくせえええええ!!!」
と叫びたくなるところですが、実はこの計算には裏技があります。
ピアソンの積率相関係数を使います。
ピアソン先生
普通、単に相関係数といえばピアソンの積率相関係数を指す[6]。ピアソン積率相関係数の検定は偏差の正規分布を仮定する(パラメトリック)方法である
「あああ(略)
と叫びたくなるところですが、内容を理解する必要は全くありません。ピアソン先生も数式としては全く使いません。*1
ピアソン先生を使うのは以下の理由です。
一見ホンマでっか?な内容ですが...
「順位に対してピアソンの積率相関係数を使用すると、スピアマンの順位相関係数が得られる」と書いてあるネタがあったので、とりあえず全面的に信用することにしました。*2
2020.10.2 追記
python を少し使えるようになったので、Pandas を使って再計算してみました。
Excel の計算結果
Pandas
Excel の方はデータをコピペするときに小数点第4位で切っているので、小数点第3位までで差を比較してみます。
結果:完 全 に 一 致
驚いた。本当に驚いた。
ついでに Pandas のスピアマンの仕様を見ておくかと思い、順位に換算していない素のデータでも試してみたところ全く同じ値が出ました。実行時に同一順位ありでランクをつけている(Excel でいう RANK.AVG 関数)みたいです。*3
Excel での計算
面倒な計算はすべて Excel に任せます。
例えば、2018-19シーズンの順位と得点の相関を調べるときは、
だけです。
結果は「rs=0.801239136202777」でした。
rs は -1 ≦ rs ≦ 1 の範囲を取り 0 に近くなると相関レベルが低いと言えます。
相関係数の強さ -1≦ r ≦1
r 意味 表現方法 0 相関なし まったく相関はみられなかった。 0<| r |≦0.2 ほとんど相関なし ほとんど相関がみられなかった。 0.2<| r |≦0.4 低い相関あり 低い正(負)の相関が認められた。 0.4<| r |≦0.7 相関あり 正(負)の相関が認められた。 0.7<| r |<1.0 高い相関あり 高い正(負)の相関が認められた。 1.0 または-1.0 完全な相関 完全な正(負)の相関が認められた。
0.8 となると「得点はチーム順位と高い正の相関がある」と言ってよいと思われます。
あくまで 0 に近いほど相関レベルが低くなるので、-1 であれば「負の相関が高い」ことがポイント。そのため失点も、低い方から順位づけするのではなく、失点の多い方から順位をつけています。
また、スタッツの量からの相関ではなく、あくまでそれらを順位づけした場合の相関なので、その差が 1 ポイント差だろうが 100 ポイント差だろうが、順位の上下のみで評価をしていることに注意してください。
準備はすべて整ったので、値を算出していきます!
終段:得られた結果
で、何が分かったの?
苦労に苦労を重ね、夜も眠らず昼寝して、ようやく得られた 2016-17、2017-18、2018-19 シーズンの 3 年間の平均値は以下の画像の通りです。
よくあるマトリックス表ですが、左の項目と上の項目のクロスした部分が、各々の順位の相関レベルを示しています。赤が正の相関、青が負の相関、色が濃くなるほど強い相関となります。(1は比較対象自身なので完全相関の1が出ていますが無視してください)
以降は、この結果の気になるところを重点的に見ていきます。
シーズン順位
いきなりメインディッシュ。退屈なこの記事を読むほとんどの人がここしか興味ないと思うので最初に食べちゃいます。
その前に、追加で 2019-20 シーズン分を取得します。*4
1番上が 4 シーズン平均、1行離れて下段が上から 2019-20 ~ 2016-17 シーズンの結果です。
当然と言えば当然ですが、 シーズン順位と相関が最も高いのは Net Rating でした。
オフェンス効率とディフェンス効率の双方が高いチームが勝ちます!(ドヤァ)
では、オフェンス効率とディフェンス効率どちらがより大事ですか? となるとどうでしょう?
これはオフェンス効率の方が大事です。
Offence Rating の方が Defence Rating よりも相関レベル(絶対値を取った値)が高いからです。
よく考えれば、「シュートは水物」と言いますし、 ディフェンス強度は対戦相手によらないので、オフェンスの方が結果に影響するというのはまあまあその通りかも。
3 ポイントシュートは打ったら打っただけ順位が上がる傾向があります。3PA(試投数)だけで順位が上がるので、必ずしもシュートは入らなくてもいい(入ればもっといい)と言うのはかなりの魅力。
衝撃的なことに、2 ポイントシュートは打つと順位が下がる傾向があるかも知れません。2019-20 シーズンはほぼ相関なしとなりましたが、2017-18 シーズンは顕著に出ていてインサイドの選手を悩ませるばかりです。しかし 2P% は 3P% よりも高い相関を示しますので、ゴール下をいかに切り崩し決めきるかが勝敗のカギとも言えます。
スティールとブロックはリーダーズ項目ではありますが、勝利という面から見るとあまり役割を果たしません。
負の相関をする項目が固まっていたので一気に紹介します。
被ブロックは想定より逆相関が高く見えます。ターンオーバーは当然でしょう。ファウル数/被ファイル数もちょうど反転させたような値に。攻撃的な指標と思われた「ペース」が負の相関というのは意外。
あくまでも傾向ですが、
- やられたらとにかくやり返せ!
- ペースが上がって点がたくさん入るのが観客も盛り上がってサイコー!
- 守備を固めて相手の攻撃を無効化するのが最強!
- ファウルが多くなるのは強固なディフェンスの証拠!
これらは全て一部分では正解ですがベストのソリューションではなさそうです。
まとめとして、
B1 では「堅調なディフェンスはベースとしてそこそこあればよく、攻撃時には攻撃回数よりもターンオーバーを減らして 1 回の攻撃をより確実に決めきる、量より質を重視する攻撃偏重型のチーム」が勝つ可能性が高い
と言えそうです。
そもそも、ORtg とは「100 ポゼッションあったら何点取れるか?」という指標なので質が重要だというのは見えていたことなのですが、その内容がよりブレイクダウンされたような気がしませんか?
それ以外の項目
結果として算出した数字はチーム順位のみではありません。全ての順位間の相関も出していますので例えば得点と相関が高いスタッツも確認できます。
その中から気になった項目をピックアップしていきます。
得点 - Pace:0.015398297
失点 - Pace:0.607696134
「ペースの早いチームは攻撃的」と語られることもあることは承知していますが、実際には得点にはほとんどあまり影響がなく、失点傾向にかなり強く影響することが分かりました。リードしているチームが Pace をあげるのは要注意。
失点 - 3PM:-0.363213007
失点 - 3PA:-0.288880321
失点 - 3P%:-0.360059287
これは最も説明がつきづらい項目なのですが、3P を打つチームは失点の少なさと(低いながらも)相関があります。理由はわかりません。例えばトータルリバウンド数が失点の低さに影響するのは理解しやすいのですが、3Pはスティールやブロックよりも相関の度合いが高い。DRtg も相関しています。
3PM - BSR:-0.561998387
3PA - BSR:-0.420630693
3P% - BSR:-0.503052387
3P を打つだけで結構ブロックされづらい、という結果です。
もうすっかり 3P 万能説ができあがってきました。
2P% - 2PA:-0.318988657
2P% - FGA:-0.249045091
2P% の高さと試投数の少なさに弱い相関があることが分かります。2P% は得点とも 0.782270168 と 3P% よりも高い相関を示すので、やはり 2P をいかに決めきるか、成功しやすいシチュエーションを作るか、が B のトレンドと言えるでしょう。
さらに、
2P% - FTA: 0.546866433
フリースローが被ファウル数に相関するのは当然なのですが、これらと 3P/2P の各項目を比較してみたところ、フリースロー試投数、被ファウル数に強く影響する項目は 2P 成功率でした。インサイドでの成功率が高いと、ファウルを使って止めようとする心理があるのかもしれません。
FTM - 得点:0.657873209
FTA - 得点:0.679310094
FT% - 得点:0.351421971
フリースローもわずか1点ですが、ちゃんと得点に相関します。その時「何本放ったか」が重要であり、その決定率はあまり重要ではありません。少ない試投数で外さないことよりも、何本放ったか(放つシチュエーションを作れたか)の方が大局的には必要です。
FD - TRB:-0.304557649
ファウル数と負の相関を示す中で最も大きな値が「トータルリバウンド数」です。例えばファストブレイク潰しなどで犯すファウルを減らす効果はありそうですが...。ディフェンス力に基づいた異なる因子の結果という検討も必要かもしれません。
他に、スティール数やブロック数は他の順位との相関を認めづらいですが、被ブロック数/ターンオーバー数/ファウル数は各項目の状態を比較的よく表したりしますので、ここだけ注視するというのも面白いスタッツの見方なのかも。
ひとつの仮定として:ジャイロ式評価指数
つらつらと述べてきましたが、思い出していただきたいのは、当初目指していたものは扱いやすい評価指標でした。
スピアマンの順位相関係数について脱線していましたが、脱線したのには理由があります。予め申し上げておくと、今から仮定として定める数式には多くの欠陥があり、誤解を生む可能性があったためです。ここまででスピアマンの順位相関係数の正しい評価の方法を確認していただいたと思うので、"これから" 統計/解析の道を外れようと思います。
つまり、話が脱線するのは今からです。
すみません。
ページも分離します。
すみません。
ここまで読んでいただきましたが、「扱いやすい指標」はこのページには収まりませんでした。
すみません。
ページをジャンプする前に、先に概要をお伝えしましょう。
ひとつの仮定として、先ほど4シーズン分を計算した「シーズン順位との相関」を用いて選手を評価してみたいと思います。つまり、シーズン順位との相関度合をスタッツと結びつけて選手の通信簿をつけようという試みです。
スピアマンの順位相関係数で得られた数字は順比例しておらず、その強弱しか指標としていませんが、それを比例しているとみなして計算します(この時点でかなりの暴論)。また、18チームしかありませんので本来棄却するべき数値もあるのですが、それもそのまま利用します。
統計学を嗜んでいる真っ当な方なら絶対に選択しない方法ですが、私はその筋の何者でもありませんし、多少間違っていたとしても、今回はまず走り出してみて、それから考えるか、人から指摘を受けて修正していく方が良いだろうという結論になりました。
ですので、比較的標準的な考え方はこちらのページで、独自の解釈で突き抜けてしまっている(役に立たない)のは別ページで更新していく予定です。
では、こじつけたジャイロ式評価指数はこちら
gyrokawai-basketball.hatenablog.com
さて、いろいろと書いてきましたけれどもいかがだったでしょうか?
結局、相関係数の話しかしていないような気がしますが、それなりに新しい発見があった(…かも知れないな…)と思います!
繰り返しになりますが、何より肝心なのは実感と合うかどうか。
謎数値が先行するのではなく、されどライブの興奮を思い出させるような数字を出せるようにこれからも精進してまいります。
できればよろしくお付き合いのほどを。
それでは。
*1:実は「偏差をかけた和」を「偏差二乗和のルートをかけたもの」で割るだけなんでよく見たらこちらは叫ぶほどではない
*2:
ここでは数式をベースに一歩一歩手続きを踏んでいきます。もっともそれが面倒な場合,かつ過程がブラックボックスのままでよければ,いずれのケースも順位づけを済ませておいて,PearsonまたはCorrel関数を使えばダイレクトに結果を得ることもできます。
順位でピアソンの積率相関係数を計算するとスピアマンの順位相関係数になることが確認できました。
なぜ正規分布を仮定する(パラメトリックな)ピアソンの積率相関係数の数式で正規分布を仮定しない(ノンパラメトリックな)スピアマンの順位相関係数が計算できてしまうのか、謎はつきませんが、順位相関係数についてはひとまずここまで。
*3:この過程で、数値丸めによる計算ミスを発見するという思わぬ副産物もありました。実際の計算では、スタッツを自計算して、有効桁数を可能な限り増やした状態でやるべきかと思います。
*4:2Pts の項目が IP(ペイント内)に変わっており、一応 FG と 3Pts の値の差分で計算はできるのですが今回はシーズン順位だけ計算。今後は IP で取った方が精度が高くなると思います