相関分析とは
データ分析において、「相関分析」は欠かせない手法です。
「ある指標が増えると、別の指標も増えるのか」「反対に関係がないのか」そんなデータ同士の関係性を数値化するのが相関分析です。
ピアソン相関係数(Pearson’s correlation coefficient)
最も一般的な指標がピアソンの積率相関係数(r値)で、値の範囲は-1から+1です。
相関係数 | 意味 |
---|---|
+1.0 | 完全な正の相関:片方が増えると必ずもう片方も増える |
0.7〜0.9 | 強い正の相関 |
0.4〜0.6 | 中程度の正の相関 |
0.1〜0.3 | 弱い正の相関 |
0 | 無相関(関係なし) |
-0.1〜-0.3 | 弱い負の相関 |
-0.4〜-0.6 | 中程度の負の相関 |
-0.7〜-0.9 | 強い負の相関 |
-1.0 | 完全な負の相関:片方が増えると必ずもう片方は減る |
✅例
- 正の相関:身長が高い人ほど体重も重い(傾向)
- 負の相関:車のスピードが速いほど、移動時間は短くなる
- 相関なし:身長と英語のテストの点数は基本的に関係ない
✅注意点
- 相関関係は因果関係ではない
- 「相関がある」からといって「片方が原因で片方が変化する」とは限らない。
- 例:「アイスクリームの売上と溺水事故数」は正の相関があるが、「アイスが原因で事故が増える」わけではない(夏の気温という共通要因がある)。
- 外れ値の影響
- ごく一部の極端なデータ(外れ値)があると、相関係数が実態以上に高く/低く出ることがある。
- 線形の関係のみ
- ピアソン相関係数は直線的な関係のみを捉える。
- 非線形な関係(例:放物線的な関係)は捉えきれない。
NBAの相関関係の活用
NBAにおいて相関分析は、
- 勝利数とスタッツの関係
- 得点とシュート成功率の関係
- アシストとターンオーバーの関係
などを調べることで、
「勝つために何を伸ばすべきか」「勝敗に影響しない指標は何か」をデータから見つける手がかりになります。
2024-25 シーズンのチームスタッツで相関係数を求めてみよう
実際にチームスタッツを使用して、相関関係確認していきましょう。まずはチームスタッツの取得です。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from nba_api.stats.endpoints import leaguedashteamstats
import pandas as pd
team_stats = leaguedashteamstats.LeagueDashTeamStats(
season_type_all_star='Regular Season',
season='2024-25',
measure_type_detailed_defense='Advanced'
)
df_team = team_stats.get_data_frames()[0]
✅nba_api.stats.endpoints.LeagueDashTeamStats
NBA全チームのシーズン・期間別の統計情報(勝敗、得点、リバウンド、FG%など)を一括で取得できます。
以下がLeagueDashTeamStats
の主なパラメーターです。
パラメータ名 | 説明 | 例 / デフォルト |
---|---|---|
season | 対象シーズン | '2024-25' |
season_type_all_star | シーズンの種別 | 'Regular Season' , 'Playoffs' , 'All Star' , 'Pre Season' |
league_id | リーグの種類 | '00' (NBA) |
per_mode_detailed | データの単位 | 'PerGame' , 'Totals' , 'Per36' , 'Per100Possessions' |
measure_type_detailed_defense | 指標の種類 | 'Base' , 'Advanced' , 'Misc' , 'Four Factors' , 'Scoring' , 'Opponent' , 'Defense' |
plus_minus | プラスマイナスの表示有無 | 'N' (なし), 'Y' (あり) |
pace_adjust | ペース調整(100ポゼッション換算) | 'N' , 'Y' |
rank | 順位表示の有無 | 'N' , 'Y' |
outcome | 試合結果フィルター | 'W' (勝ち), 'L' (負け), '' (全て) |
location | ホーム / アウェイ | 'Home' , 'Road' , '' |
month | 月別フィルター | 0 (全て), 1~12 |
season_segment | シーズン期間 | 'Post All-Star' , 'Pre All-Star' , '' |
date_from | 開始日(YYYY-MM-DD) | '' |
date_to | 終了日(YYYY-MM-DD) | '' |
opponent_team_id | 対戦相手チームID | 0 (全チーム対象) |
vs_conference | 対戦カンファレンス | 'East' , 'West' , '' |
vs_division | 対戦ディビジョン | 'Atlantic' , 'Central' , 'Southeast' , 'Northwest' , 'Pacific' , 'Southwest' , '' |
game_segment | 試合の時間帯 | 'First Half' , 'Second Half' , 'Overtime' , '' |
period | クォーター指定 | 0 (全て), 1~4 , 5 (OT) |
shotclock_range | ショットクロックの時間帯 | '24-22' , '22-18 Very Early' , '18-15 Early' , '15-7 Average' , '7-4 Late' , '4-0 Very Late' , '' |
last_n_games | 直近試合数 | 0 (全試合), 1~N |
ここでは、レギュラーシーズンの試合毎の平均スタッツにパラメーターを設定しました。また、今回は勝率とTS%(トゥルーシューティングパーセンテージ)の相関を見てみたいので、指標の種類に’Advanced’を設定してます。TS%はアドバンススタッツを呼ばれる詳細な指標の一つです。
✅ TS%(トゥルーシューティングパーセンテージ)とは
TS%(True Shooting Percentage)は、シュートの「総合的な効率」を表す指標です。
- フィールドゴール(2P/3P)
- 3ポイントシュート
- フリースロー
これら全てを得点への貢献として総合的に評価する指標です。
✅ TS%の計算式

項目 | 内容 |
---|---|
得点(PTS) | 試合で獲得した得点 |
FGA | フィールドゴール試投数(2P+3P) |
FTA | フリースロー試投数 |
0.44 | フリースロー1回がポゼッションに与える影響の平均的な重み(NBAで経験的に使われる係数) |
※指標の定義についてはNBA公式参照
それでは、勝率とTS%の相関関係を計算していきます。
correlation = df_team[['W_PCT', 'TS_PCT']].corr()
print(correlation)
.corr()
は、PandasのDataFrameやSeriesに用意されているメソッドで、「相関係数(通常はピアソン相関係数)」を計算するために使います。

勝率(W_PCT)とTS%(TS_PCT)の相関係数は0.723で強い正の相関がありました。つまり、勝率が高いチームは、効率的に得点している傾向があります。
前回学習した、散布図で確認してみましょう。
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(8,6))
sns.scatterplot(data=df_team, x='TS_PCT', y='W_PCT')
plt.title('Win Percentage vs True Shooting Percentage (2024-25)')
plt.xlabel('True Shooting Percentage (TS%)')
plt.ylabel('Win Percentage')
plt.grid(True)
plt.show()

散布図で右肩上がりの関係が見られますね。このように散布図を作成すると、視覚的に2つの指標の傾向を確認することができます。
まとめ
今回は相関係数をテーマに、endpoints.LeagueDashTeamStatsの使用方法や相関関係の求め方をを学びました。相関関係はデータ分析で基本的ですが重要なテーマですのでマスターしてしまいましょう。