バスケのデータでベイズ統計モデリング

こんにちは、らんそうるい(@rnsr0371)です。ゴールデンウィーク、いかがお過ごしでしょうか? 私は、ベイズ統計モデリングに入門しております。その成果を共有するために、この記事では「オフェンスリバウンドにポジションが与える影響」をモデリングしながら、ベイズ統計モデリングの手続きを説明します。

この題材を選んだ理由は、バスケットボールに興味のある方ならご存知の通り、ビッグマン>ウイング>ガードの順にオフェンスリバウンドが多くなるため、モデリングの結果が妥当かが判断しやすいからです。では、いってみましょう。

使用するデータ

B1 & B2の2021-22シーズンの、各選手の総オフェンスリバウンド数(oreb)、総出場時間(min)、ポジションを用いました。ポジションはBリーグ公式HPの記載を元に、4種類にコーディングしました。具体的にはビッグマン(B)、ウイング(W)、ガード(G)、不明(U:unknown)です。

このデータを元に、単位時間あたりのorebとポジションの関係をモデリングします。

orebとmin、ポジションの関係を散布図を用いて可視化すると次のようになりました。

モデリング

モデリングの方針

orebのヒストグラムは次のようになりました。統計モデルの中でも一般化線形モデルは、(被説明変数の)確率分布・リンク関数・線形予測子から構成されます。orebのヒストグラムを調べることは確率分布として何を選択するかの手掛かりになります。

orebのヒストグラムは正規分布(左右対称の富士山みたいな形をした確率分布のこと)とは似ていないことが分かります。orebはマイナスの値を取らず、右に裾が長い分布をしています。非負で右に裾が長い確率分布としてはいくつか候補があるのですが、本稿ではポアソン分布という確率分布を使うことにします。

ポアソン分布はλという単一のパラメタで形状が決まります。λを適切に設定してあげて、選手数と同じ数だけポアソン分布から乱数を発生させ、ヒストグラムを描いたのが青色の部分です。orebとは形が違いますね。orebの方が、ポアソン分布から発生させた乱数よりもばらつきが大きいです。このような問題を過分散といいます。過分散の原因の一つは、データとして測定されていない個人差があることです。そこで、ランダム効果という形で個人差をもモデルに組み込むことにしました。

stanによる実装

今回、orebデータに当てはめるモデルはstanで次のように設計しました。

data{
  int N;
  int X_B[N];
  int X_W[N];
  int X_U[N];
  int Y[N];
  real MIN[N];
}

parameters{
  real a;
  real b_b;
  real b_w;
  real b_u;
  real r[N];
  real sigma_r;
}

transformed parameters{
  real lambda[N];
  for(n in 1:N){
    lambda[n]=a+b_b*X_B[n]+b_w*X_W[n]+b_u*X_U[n]+log(MIN[n]+0.01)+r[n];
  }
}

model{
  r~normal(0,sigma_r);
  Y~poisson_log(lambda);
}

generated quantities{
  real Y_pred[N];
  Y_pred=poisson_log_rng(lambda);
}

モデルのポイントを説明すると

  • 確率分布はポアソン分布、リンク関数は対数リンク関数を使用。線形予測子は……
    • Gを基準にポジション(B、W、U)の影響の大きさを相対評価した(ダミー変数)
    • 出場時間 min のlogをオフセット項として投入し、ポジションの影響が1分あたりの影響として解釈できるようにした
    • 個人差rは平均0・分散sigma_rから発生すると仮定している。sigma_rはデータから推定した

データへの当てはめ

MCMCの設定と収束診断

  • chain数=4
  • iteration数=4000
  • burn-in=2000

全てのパラメタのR hatが1.1未満であったため、収束していると判断しました。

図によるモデルのチェック

松浦(2016)で推奨されている「実測値と予測値のプロット」に加えて「予測値vs.残差プロット」を描写し、モデルの妥当性をチェックしました(「指定されたノイズの分布」も推奨されていますが、割愛します)。

プロットを2つ示しますが、結論としてはモデルは妥当であると判断しました。

実測値と予測値のプロット

縦軸に予測値(点が中央値・棒が80%区間)、横軸に実際の値を取ったプロットが上図です。予測と実測値が一直線に並んでおり、モデルの予測が非常にうまく行えていることが分かりました。

予測値vs.残差のプロット

縦軸に残差(予測値-実測値)、横軸に予測値(中央値)の対数を取ったプロットが上図です。残差=0を中心に全ての点が上下左右均等にプロットされている時が、モデルの当てはまりが良いと判断します。図を確認すると、予測値が大きい時に若干点が上方向に偏っているように見えますが、概ねモデルの当てはまりは良いと判断しました。

オフェンスリバウンドとポジションの関連

作成した統計モデルの妥当性が確認できたため、ポジションの影響について考察します。G(ガード)を基準とした各ポジションの相対的な影響を示したのが下のヴァイオリンプロットです。ポジションはBがビッグマン、Wがウイング、Uが不明です。

ベイズ統計学では推定するパラメタ(今回はポジションの影響)が一つの値として与えられるのではなく、確率分布として与えられます。上のヴァイオリンプロットはその分布を表しており、膨らんでいる部分がポジションの影響として最も可能性の高い値になります。黒の実線は基準となるGの影響です。

W(ウイング)の分布は実線とは重なっておらず、平均値は0.39でした。つまり、G(ガード)と比べてWは1分あたりexp(0.39)=1.47倍のオフェンスリバウンドを獲得することが分かりました。

B(ビッグマン)の分布は実戦ともWとも重なっていません。平均値は1.21でした。つまり、Gと比べてBは1分あたりexp(1.21)=3.35倍のオフェンスリバウンドを獲得することが分かりました。

最後にG、W、Bそれぞれの40分換算のオフェンスリバウンド数の実測値の平均と、モデルによる予測値を紹介して終わります。

ポジション実測値の平均モデルの予測値
G(ガード)0.960.78
W(ウイング)1.471.15
B(ビッグマン)2.772.61

まとめ

この記事では、モデリングするまでもなく自明な話題を題材に、一通りベイズ統計モデリングの手続きを説明しました。ぜひ皆さんもベイズ統計モデリングしましょう!

参考文献

久保拓弥, 2012. データ解析のための統計モデリング入門.

馬場真哉, 2019. RとStanではじめる ベイズ統計モデリングによるデータ分析入門.

松浦健太郎, 2016. StanとRでベイズ統計モデリング.

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA