Method corr() pada Chapter sebelumnya memberi angka baku yang mudah dibaca, tetapi angka itu tidak muncul begitu saja. Di balik layar, pandas menghitung kovarians terlebih dahulu, yaitu ukuran yang menilai seberapa jauh dua kolom bergerak bersama dalam satuan aslinya. Method cov() memaparkan ukuran tersebut secara langsung tanpa pembakuan. Pada Chapter ini kita menghitung kovarians antar kolom, membaca tandanya, lalu menghubungkan kembali kovarians dengan korelasi lewat satu rumus singkat.

Menghitung Kovarians dengan cov() #

Data yang kita pakai sama persis dengan Chapter sebelumnya: catatan penjualan lapak minuman selama satu minggu dengan kolom suhu, es_krim, dan teh_hangat. Karena datanya sudah dikenal, kita bisa langsung membandingkan hasil cov() dengan hasil corr() yang sudah kita hitung. Kode berikut menampilkan matriks kovarians, kovarians satu pasangan kolom, dan pembuktian rumus hubungan kovarians dengan korelasi.

python
import pandas as pd

dagangan = pd.DataFrame({
    "hari": ["Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu", "Minggu"],
    "suhu": [24, 26, 27, 29, 30, 32, 31],
    "es_krim": [120, 135, 150, 170, 185, 210, 200],
    "teh_hangat": [95, 88, 84, 70, 62, 45, 50],
})

angka = dagangan[["suhu", "es_krim", "teh_hangat"]]

print(angka.cov())
print()
kova = dagangan["suhu"].cov(dagangan["es_krim"])
print(kova)
print()
rasio = kova / (dagangan["suhu"].std() * dagangan["es_krim"].std())
print(round(rasio, 4))
print(round(dagangan["suhu"].corr(dagangan["es_krim"]), 4))

Output yang Dihasilkan:

text
                 suhu      es_krim  teh_hangat
suhu         8.285714    96.428571  -54.619048
es_krim     96.428571  1132.142857 -644.761905
teh_hangat -54.619048  -644.761905  371.952381

96.42857142857144

0.9956
0.9956

Mari kita bedah kode di atas baris demi baris:

  1. Baris 3-8 (dagangan = pd.DataFrame({...})): kita membangun ulang dataset mingguan yang sama dengan Chapter Korelasi Antar Kolom.
  2. Baris 10 (angka = dagangan[[...]]): kita memilih tiga kolom numerik agar operasi statistik bekerja tanpa terganggu kolom teks hari.
  3. Baris 12 (print(angka.cov())): pandas menghasilkan matriks kovarians 3x3, satu angka untuk setiap pasangan kolom.
  4. Baris 14-15: Series.cov() menghitung kovarians satu pasangan kolom, dan hasilnya 96.42857142857144 sesuai sel matriks pada posisi (suhu, es_krim).
  5. Baris 17-19: kita membagi kovarians dengan hasil kali std() kedua kolom, lalu membandingkannya dengan corr() yang dibulatkan empat desimal; keduanya menghasilkan 0.9956.

Perhatikan diagonal matriksnya. Nilai 8.285714 untuk suhu dan 1132.142857 untuk es_krim sama persis dengan hasil var() masing-masing kolom, karena kovarians sebuah kolom dengan dirinya sendiri adalah variance kolom itu. Di luar diagonal, 96.428571 bertanda positif untuk pasangan suhu dan es_krim, sedangkan -54.619048 bertanda negatif untuk pasangan suhu dan teh_hangat.

Membaca Arah dari Tanda Kovarians #

Tanda kovarians menyampaikan arah hubungan yang sama seperti tanda korelasi. Tanda positif berarti kedua kolom cenderung bergerak searah: saat suhu naik, es_krim juga cenderung naik. Tanda negatif berarti kedua kolom cenderung bergerak berlawanan: saat suhu naik, teh_hangat menurun. Nilai mendekati nol menandakan kedua kolom hampir tidak bergerak bersama secara linear.

Pasangan kolomKovariansArah hubungan
suhu vs suhu8.285714Diagonal; sama dengan var() kolom
suhu vs es_krim96.428571Positif; bergerak searah
suhu vs teh_hangat-54.619048Negatif; bergerak berlawanan

Berbeda dari tandanya, besarnya angka kovarians tidak bisa dinilai bagus atau buruk begitu saja. Satuannya adalah hasil kali satuan kedua kolom, dalam contoh ini derajat dikali gelas, sehingga nilai 96.428571 tidak punya ambang baku untuk dibandingkan antar pasangan data yang berbeda. Ketika dua kolom memakai skala yang jauh berbeda, misalnya rupiah dan persen, kovarians akan ikut membengkak atau menyusut mengikuti skala tersebut.

Kovarians versus Korelasi #

Aspekcov()corr()
Rentang nilaiTidak dibakukanSelalu antara -1 dan 1
SatuanHasil kali satuan kedua kolomTanpa satuan
Dibandingkan antar pasangan dataTidak tepatTepat
Menunjukkan arah hubunganYa, lewat tandaYa, lewat tanda
Menunjukkan kekuatan hubungan linearSulit dinilai langsungJelas, lewat jarak dari nol

Kedua method terhubung oleh satu rumus: corr sama dengan cov dibagi hasil kali std kedua kolom. Pembagian itulah yang membuang satuan dan membakukan hasil ke rentang -1 sampai 1, dan Baris 17-19 pada kode di atas membuktikannya: 0.9956 hasil pembagian sama dengan 0.9956 hasil corr(). Dokumentasi pandas.DataFrame.cov dan pandas.Series.cov merinci parameter kedua method, sedangkan ringkasan perilaku agregat ini juga tercantum pada halaman Essential basic functionality .

Kovarians dan korelasi kini kita kuasai dari dua sisi: satu mempertahankan satuan asli, satu lagi membakukan hasil. Chapter berikutnya mundur sedikit ke fondasi yang sering keliru dipahami, yaitu parameter axis yang mengatur arah kerja agregasi seperti sum() dan mean() pada DataFrame.