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.
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:
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.9956Mari kita bedah kode di atas baris demi baris:
- Baris 3-8 (
dagangan = pd.DataFrame({...})): kita membangun ulang dataset mingguan yang sama dengan Chapter Korelasi Antar Kolom. - Baris 10 (
angka = dagangan[[...]]): kita memilih tiga kolom numerik agar operasi statistik bekerja tanpa terganggu kolom tekshari. - Baris 12 (
print(angka.cov())): pandas menghasilkan matriks kovarians 3x3, satu angka untuk setiap pasangan kolom. - Baris 14-15:
Series.cov()menghitung kovarians satu pasangan kolom, dan hasilnya96.42857142857144sesuai sel matriks pada posisi (suhu,es_krim). - Baris 17-19: kita membagi kovarians dengan hasil kali
std()kedua kolom, lalu membandingkannya dengancorr()yang dibulatkan empat desimal; keduanya menghasilkan0.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 kolom | Kovarians | Arah hubungan |
|---|---|---|
suhu vs suhu | 8.285714 | Diagonal; sama dengan var() kolom |
suhu vs es_krim | 96.428571 | Positif; bergerak searah |
suhu vs teh_hangat | -54.619048 | Negatif; 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 #
| Aspek | cov() | corr() |
|---|---|---|
| Rentang nilai | Tidak dibakukan | Selalu antara -1 dan 1 |
| Satuan | Hasil kali satuan kedua kolom | Tanpa satuan |
| Dibandingkan antar pasangan data | Tidak tepat | Tepat |
| Menunjukkan arah hubungan | Ya, lewat tanda | Ya, lewat tanda |
| Menunjukkan kekuatan hubungan linear | Sulit dinilai langsung | Jelas, 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.