【Scikit-learn】訓練データの相関係数を求める方法とサンプルコード

Pythonライブラリ「Scikit-learn」でモデル学習に使用する訓練データの相関係数を求める方法とサンプルコードについて解説します。

訓練データの相関係数を求める方法

相関係数 $r$ は、2つの変数の関係の強さを表す指標です。単回帰分析では「特徴量」と「ターゲット変数」の関係の強さを確かめることができます。つまり、「そもそも登録者数と視聴者数に関係があるのか?」ということを確認ができます。相関係数 $r$の範囲は −1〜+1 で、以下のように関係性の傾向を知ることができます。

相関係数 $r$ 関係の強さ
$r = +1$ 完全な正の相関 登録者数が増えると視聴者数も必ず増える
$r \approx +0.8$ 強い正の相関 登録者数が増えると視聴者数も増える傾向がある
$r = 0$ 無相関 登録者数と視聴者数に関係がない
$r \approx -0.8$ 強い負の相関 登録者数が増えると視聴者数が減る傾向がある
$r = -1$ 完全な負の相関 登録者数が増えると視聴者数が必ず減る

相関係数の計算方法など、数理的な内容は以下ページで解説しています。

【単回帰分析とは】計算式の仕組みをVTuberの視聴者数予測を例にわかりやすく解説
単回帰分析とは?計算式の仕組みや求め方、決定係数による性能検証方法などをVTuberの視聴者数予測を例をわかりやすく解説します。

サンプルコード① 単回帰分析の場合

Scikit-learnで単回帰分析を行う際に、相関係数を求める機能を追加したものが以下になります。


※読み込んだデータ:dataset01.csv

「相関係数 r: 0.9887097324786042」となり、特徴量(登録者数)とターゲット変数(視聴者数)の間に、高い相関性がある(ほぼ線形の関係性がある)ことがわかります。単回帰モデルの前提(線形性)がかなり妥当である可能性が高いです。ただし、これは相関の強さであって、因果関係を示すものではありません。「強い相関=良いモデル」ではないので、注意が必要です。良いモデルかどうかを判断するには、次に解説する「汎化性能の検証」などを行います。

コード解説

これまでのサンプルコードとは異なる、重要な箇所に絞って解説します。

# 相関係数を算出
correlation = np.corrcoef(dataset["チャンネル登録者数"], dataset["視聴者数"])[0, 1]
print("相関係数 r:", correlation)
  • dataset["チャンネル登録者数"]は、特徴量(説明変数)。Pandas Series(1次元配列)形式。
  • dataset["視聴者数"] は、ターゲット変数(目的変数)。Pandas Series(1次元配列)形式。
  • np.corrcoef(x, y)は、2つの配列の相関係数行列を返すNumPyの関数です。
  • [0, 1]は、相関係数行列の中から、xとyの相関係数だけを抽出しています。

関連ページ

以下ページでは、Pythonライブラリ「scikit-learn」の使い方を数理的な背景も含めて解説していますので、是非ご一読ください。

【Scikit-learn超入門】使い方をサンプルコード付きで解説
Pythonライブラリ「Scikit-learn」で機械学習を行う方法を入門者向けに解説します。
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
Scikit-learn

コメント