Koefisien korelasi

Eval

Koefisien korelasi

Dibuat: Pembaruan terakhir: Waktu baca: 3 menit
まとめ
  • Koefisien korelasiの概要を押さえ、評価対象と読み取り方を整理します。
  • Python 3.13 のコード例で算出・可視化し、手順と実務での確認ポイントを確認します。
  • 図表や補助指標を組み合わせ、モデル比較や閾値調整に活かすヒントをまとめます。

Koefisien korelasi mengukur kekuatan hubungan linier antara dua data atau variabel acak.

Ini adalah indikator yang memungkinkan kita untuk memeriksa apakah ada perubahan tren bentuk linier antara dua variabel, yang dapat dinyatakan dalam persamaan berikut.

$

\frac{\Sigma_{i=1}^N (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\Sigma_{i=1}^N(x_i - \bar{x})^2 \Sigma_{i=1}^N(y_i - \bar{y})^2 }}

$

Ini memiliki sifat-sifat berikut

  • -1 sampai kurang dari 1

  • Jika koefisien korelasi mendekati 1, \(x\) meningkat → \(y\) juga meningkat

  • Nilai koefisien korelasi tidak berubah ketika \(x, y\) dikalikan dengan angka yang rendah

Hitung koefisien korelasi antara dua kolom numerik #

import numpy as np

np.random.seed(777)  # untuk memperbaiki angka acak
import matplotlib.pyplot as plt

import numpy as np

x = [xi + np.random.rand() for xi in np.linspace(0, 100, 40)]

y = [yi + np.random.rand() for yi in np.linspace(1, 50, 40)]

plt.figure(figsize=(5, 5))

plt.scatter(x, y)

plt.show()

coef = np.corrcoef(x, y)

print(coef)

Hitung koefisien korelasi antara dua kolom numerik (diagram)

[[1.         0.99979848]

 [0.99979848 1.        ]]

Secara kolektif menghitung koefisien korelasi antara beberapa variabel #

import seaborn as sns

df = sns.load_dataset("iris")

df.head()
<tr style="text-align: right;">

  <th></th>

  <th>sepal_length</th>

  <th>sepal_width</th>

  <th>petal_length</th>

  <th>petal_width</th>

  <th>species</th>

</tr>
<tr>

  <th>0</th>

  <td>5.1</td>

  <td>3.5</td>

  <td>1.4</td>

  <td>0.2</td>

  <td>setosa</td>

</tr>

<tr>

  <th>1</th>

  <td>4.9</td>

  <td>3.0</td>

  <td>1.4</td>

  <td>0.2</td>

  <td>setosa</td>

</tr>

<tr>

  <th>2</th>

  <td>4.7</td>

  <td>3.2</td>

  <td>1.3</td>

  <td>0.2</td>

  <td>setosa</td>

</tr>

<tr>

  <th>3</th>

  <td>4.6</td>

  <td>3.1</td>

  <td>1.5</td>

  <td>0.2</td>

  <td>setosa</td>

</tr>

<tr>

  <th>4</th>

  <td>5.0</td>

  <td>3.6</td>

  <td>1.4</td>

  <td>0.2</td>

  <td>setosa</td>

</tr>

Periksa KORELASI KORELASI antara semua variabel #

Dengan menggunakan dataset iris mata, mari kita lihat korelasi antar variabel.

df.corr().style.background_gradient(cmap="YlOrRd")
<tr>

  <th class="blank level0" >&nbsp;</th>

  <th class="col_heading level0 col0" >sepal_length</th>

  <th class="col_heading level0 col1" >sepal_width</th>

  <th class="col_heading level0 col2" >petal_length</th>

  <th class="col_heading level0 col3" >petal_width</th>

</tr>
<tr>

  <th id="T_dbd76_level0_row0" class="row_heading level0 row0" >sepal_length</th>

  <td id="T_dbd76_row0_col0" class="data row0 col0" >1.000000</td>

  <td id="T_dbd76_row0_col1" class="data row0 col1" >-0.117570</td>

  <td id="T_dbd76_row0_col2" class="data row0 col2" >0.871754</td>

  <td id="T_dbd76_row0_col3" class="data row0 col3" >0.817941</td>

</tr>

<tr>

  <th id="T_dbd76_level0_row1" class="row_heading level0 row1" >sepal_width</th>

  <td id="T_dbd76_row1_col0" class="data row1 col0" >-0.117570</td>

  <td id="T_dbd76_row1_col1" class="data row1 col1" >1.000000</td>

  <td id="T_dbd76_row1_col2" class="data row1 col2" >-0.428440</td>

  <td id="T_dbd76_row1_col3" class="data row1 col3" >-0.366126</td>

</tr>

<tr>

  <th id="T_dbd76_level0_row2" class="row_heading level0 row2" >petal_length</th>

  <td id="T_dbd76_row2_col0" class="data row2 col0" >0.871754</td>

  <td id="T_dbd76_row2_col1" class="data row2 col1" >-0.428440</td>

  <td id="T_dbd76_row2_col2" class="data row2 col2" >1.000000</td>

  <td id="T_dbd76_row2_col3" class="data row2 col3" >0.962865</td>

</tr>

<tr>

  <th id="T_dbd76_level0_row3" class="row_heading level0 row3" >petal_width</th>

  <td id="T_dbd76_row3_col0" class="data row3 col0" >0.817941</td>

  <td id="T_dbd76_row3_col1" class="data row3 col1" >-0.366126</td>

  <td id="T_dbd76_row3_col2" class="data row3 col2" >0.962865</td>

  <td id="T_dbd76_row3_col3" class="data row3 col3" >1.000000</td>

</tr>

Dalam peta panas, sulit untuk melihat di mana korelasi tertinggi. Periksa diagram batang untuk melihat variabel mana yang memiliki korelasi tertinggi dengan sepal_length.

df.corr()["sepal_length"].plot.bar(grid=True, ylabel="corr")
<AxesSubplot:ylabel='corr'>

T_dbd76_row3_col1 { (diagram)

Ketika koefisien korelasi rendah #

Periksa distribusi data ketika koefisien korelasi rendah dan konfirmasikan bahwa koefisien korelasi mungkin rendah bahkan ketika ada hubungan antar variabel.

n_samples = 1000

plt.figure(figsize=(12, 12))

for i, ci in enumerate(np.linspace(-1, 1, 16)):

    ci = np.round(ci, 4)

    mean = np.array([0, 0])

    cov = np.array([[1, ci], [ci, 1]])

    v1, v2 = np.random.multivariate_normal(mean, cov, size=n_samples).T

    plt.subplot(4, 4, i + 1)

    plt.plot(v1, v2, "x")

    plt.title(f"r={ci}")

plt.tight_layout()

plt.show()

Ketika koefisien korelasi rendah (diagram)

Dalam beberapa kasus, ada hubungan antara variabel bahkan jika koefisien korelasinya rendah.

Kita akan mencoba membuat contoh seperti itu, meskipun sederhana.

import japanize_matplotlib

from sklearn import datasets

japanize_matplotlib.japanize()

n_samples = 1000

circle, _ = datasets.make_circles(n_samples=n_samples, factor=0.1, noise=0.05)

moon, _ = datasets.make_moons(n_samples=n_samples, noise=0.05)

corr_circle = np.round(np.corrcoef(circle[:, 0], circle[:, 1])[1, 0], 4)

plt.title(f"koefisien korelasi={corr_circle}", fontsize=23)

plt.scatter(circle[:, 0], circle[:, 1])

plt.show()

corr_moon = np.round(np.corrcoef(moon[:, 0], moon[:, 1])[1, 0], 4)

plt.title(f"koefisien korelasi={corr_moon}", fontsize=23)

plt.scatter(moon[:, 0], moon[:, 1])

plt.show()

Kita akan mencoba membuat contoh seperti itu, meskipun seder… (diagram)

Kita akan mencoba membuat contoh seperti itu, meskipun seder… (diagram)