Chapter Standar Deviasi menutup dengan pengenalan singkat z-score: nilai 97 milik siswa tertinggi kelas berdiri 1.45 standar deviasi di atas mean. Chapter ini membuka pokok itu tuntas. Z-score mengubah pertanyaan “berapa selisihnya” menjadi “berapa standar deviasi jaraknya” — perubahan satuan yang tampak sederhana tetapi berdampak luas, karena satuan standar deviasi bisa dibandingkan lintas kelas, lintas mata pelajaran, bahkan lintas satuan pengukuran yang sama sekali berbeda. Kita akan menghitung z-score seluruh kelas sembilan siswa, membuktikan dua sifat yang selalu berlaku, memakainya untuk perbandingan antar skala, lalu menerapkannya sebagai penyaring outlier kasar.

Z-Score: Jarak dalam Satuan Standar Deviasi #

Z-score sebuah nilai x dihitung dengan membagi selisih x terhadap mean dengan standar deviasi:

text
z = (x - x̄) / s

Pembilangnya adalah deviasi biasa — seberapa jauh x dari mean, dalam satuan data asli. Pembagian dengan s mengubah satuan itu menjadi “banyaknya standar deviasi”. Hasil akhirnya bebas satuan: z = 2 pada nilai Matematika dan z = 2 pada skor psikotes sama-sama berbunyi “dua standar deviasi di atas rata-rata kelompoknya”, meski satuan aslinya berbeda jauh. Tanda z mengikuti arah deviasi: z positif berarti nilai berada di atas mean, z negatif berarti di bawah mean, dan z = 0 berarti tepat di mean.

Contoh: Nilai Budi dan Nilai Terendah Kelas #

Kelas kita memiliki mean 83.33 dan s 9.41 (keduanya dibulatkan ke dua desimal, dari 750/9 dan 9.4074). Budi mendapat nilai 92, sedangkan nilai terendah kelas adalah 68. Z-score keduanya:

text
z Budi     = (92 - 83.33) / 9.41 = 8.67 / 9.41   ≈ 0.92
z nilai 68 = (68 - 83.33) / 9.41 = -15.33 / 9.41 ≈ -1.63

Nilai Budi berdiri 0.92 standar deviasi di atas mean — unggul, tetapi belum menjulur: masih di dalam rentang tipikal kelas. Nilai 68 berada 1.63 standar deviasi di bawah mean — cukup jauh, tetapi belum ekstrem; kita akan menetapkan ambang “ekstrem” pada bagian deteksi outlier. Perhitungan dengan angka mean dan s yang belum dibulatkan menghasilkan 0.9213 dan −1.6299 yang membulat ke angka yang sama, jadi pembulatan antara tidak menyesatkan di sini.

Z-Score Seluruh Kelas #

Satu rumus yang sama diterapkan pada seluruh kelas menghasilkan tabel posisi lengkap:

Nilai xzPosisi terhadap mean
68−1.631.63 s di bawah mean
75−0.890.89 s di bawah mean
75−0.890.89 s di bawah mean
81−0.250.25 s di bawah mean
840.07hampir tepat di mean
880.50setengah s di atas mean
900.710.71 s di atas mean
920.920.92 s di atas mean (Budi)
971.451.45 s di atas mean

Semua z dibulatkan ke dua desimal. Tabel ini mengubah kelas menjadi peta ber-satuan seragam: seorang siswa dengan z −1.63 dan seorang lagi dengan z 1.45 tidak lagi dibaca sebagai “memiliki nilai 68 dan 97”, melainkan sebagai dua ujung sebaran tipikal kelas. Bandingkan kandungan informasinya — selisih mentah 29 poin tidak bermakna apa-apa tanpa konteks sebaran, sedangkan z langsung menyatakan posisi relatif. Catatan penting: nilai 84, yang sekaligus median kelas, berdiri di z ≈ 0.07 — hampir tepat di pusat, menegaskan kembali bahwa kelas ini hampir simetris.

Dua Sifat yang Selalu Berlaku #

Standarisasi lewat z-score selalu menghasilkan dua sifat pada dataset hasilnya:

text
jumlah z = Σ(x - x̄) / s = 0 / s = 0
mean z   = 0
sd z     = 1

Jumlah z nol mengikuti langsung dari sifat deviasi yang sudah kita buktikan sejak chapter Mean: jumlah deviasi seluruh data terhadap mean selalu nol, karena setiap data di atas mean menyumbang deviasi positif yang jumlahnya persis meniadakan jumlah deviasi negatif data lain. Membagi nol dengan s (yang bukan nol) tetap menghasilkan nol. Standar deviasi z-sendiri menjadi 1 karena setiap deviasi sudah terbagi s: deviasi tipikal kelas, yang besarnya s, kini besarnya tepat satu. Kedua sifat ini berlaku untuk setiap dataset — bukan kebetulan khusus kelas kita — dan menjadi fondasi seluruh pembahasan standardisasi pada chapter berikutnya.

Menghitung Z-Score Kelas dengan Python #

Module statistics memadai untuk menghitung seluruh tabel sekaligus menguji kedua sifat:

python
import statistics

nilai = [68, 75, 75, 81, 84, 88, 90, 92, 97]
mean = statistics.mean(nilai)
s = statistics.stdev(nilai)

for x in nilai:
    z = (x - mean) / s
    print(f"{x:3d}  z = {z:6.2f}")

zs = [(x - mean) / s for x in nilai]
print(f"jumlah z = {sum(zs):.2f}")
print(f"mean(z)  = {statistics.mean(zs):.2f}")
print(f"stdev(z) = {statistics.stdev(zs):.2f}")

Output yang Dihasilkan:

text
 68  z =  -1.63
 75  z =  -0.89
 75  z =  -0.89
 81  z =  -0.25
 84  z =   0.07
 88  z =   0.50
 90  z =   0.71
 92  z =   0.92
 97  z =   1.45
jumlah z = 0.00
mean(z)  = 0.00
stdev(z) = 1.00

Mari kita bedah kode di atas:

  1. Baris 7-9 (loop z): setiap nilai dicetak bersama z-nya dengan format {z:6.2f} — dua desimal pada lebar enam kolom — sehingga angka negatif dan positif tetap sejajar.
  2. Baris 11 (kumpulan z): list comprehension menerapkan rumus yang sama ke seluruh data sekaligus, hasilnya identik dengan loop di atas.
  3. Baris 12-14 (tiga uji sifat): sum(zs) mencetak 0.00 (jumlah persisnya hanya menyimpang dari nol sebesar orde 10^-15 akibat aritmetika float, tak terlihat pada dua desimal), statistics.mean(zs) mencetak 0.00, dan statistics.stdev(zs) mencetak 1.00.

Perilaku statistics.mean dan statistics.stdev terdokumentasi dalam dokumentasi statistics Python . Penjelasan formal z-score beserta latihan soalnya tersedia gratis di Khan Academy dan OpenIntro Statistics .

Membandingkan Dua Mata Pelajaran #

Kekuatan sebenarnya z-score muncul saat membandingkan variabel yang skala atau sebarannya berbeda. Siti mendapat nilai 90 di Matematika dan 90 di Bahasa Indonesia — skor mentahnya sama, tetapi dua kelas itu bukan dunia yang sama. Kelas Matematika adalah kelas sembilan siswa kita (mean 83.33, s 9.41); kelas Bahasa Indonesia adalah kelas lima siswa dari chapter Standar Deviasi dengan data [84, 86, 88, 90, 92] (mean 88, s 3.16):

text
z matematika      = (90 - 83.33) / 9.41 ≈ 0.71
z bahasa indonesia = (90 - 88) / 3.16    ≈ 0.63

Kedua z dihitung dari nilai penuh lalu dibulatkan ke dua desimal — hasil yang sama diperoleh bila mean dan s masing-masing kelas dibulatkan lebih dulu. Nilai 90 di Matematika berdiri 0.71 standar deviasi di atas mean kelasnya, sedangkan di Bahasa Indonesia hanya 0.63. Selisihnya tipis, tetapi arahnya informatif: kelas Bahasa memiliki mean yang lebih tinggi (88) dan sebaran yang jauh lebih rapat (s 3.16), sehingga nilai yang sama terasa “lebih biasa” di sana. Tanpa z-score, perbandingan kedua kelas ini mustahil dilakukan dengan adil — selisih mentah 7 poin lawan 2 poin tidak memperhitungkan sebaran yang berbeda.

python
import statistics

matematika = [68, 75, 75, 81, 84, 88, 90, 92, 97]
bahasa = [84, 86, 88, 90, 92]

z_mat = (90 - statistics.mean(matematika)) / statistics.stdev(matematika)
z_bhs = (90 - statistics.mean(bahasa)) / statistics.stdev(bahasa)

print(f"z matematika = {z_mat:.2f}")
print(f"z bahasa     = {z_bhs:.2f}")

Output yang Dihasilkan:

text
z matematika = 0.71
z bahasa     = 0.63

Kode di atas memakai mean dan standar deviasi penuh dari tiap kelas, lalu mencetak dua z-score dengan pembulatan dua desimal — hasilnya persis hitungan manual sebelumnya. Format {z:.2f} pada kedua baris cetak menjaga tampilan tetap pendek dan stabil. Pola seperti ini — hitung z dua variabel, bandingkan — adalah kerangka dasar berbagai sistem penilaian yang menimbang capaian relatif, bukan capaian mentah.

Deteksi Outlier Kasar #

Z-score juga menjadi penyaring outlier yang paling ringkas cara menghitungnya: nilai dengan |z| melebihi 2 dicurigai, dan |z| melebihi 3 nyaris pasti ekstrem, karena pada sebaran lonceng data semacam itu hanya muncul sekitar 5 persen dan 0.3 persen dari populasi. Kelas kita aman: |z| terbesar adalah 1.63 milik nilai 68 — besar untuk ukuran sembilan siswa, tetapi tidak melampaui ambang. Contoh yang melampaui sudah kita kenal: pendapatan pedagang 400 (ribu Rp) pada data tujuh pedagang memiliki z = (400 − 147.14)/112.80 ≈ 2.24 — melampaui 2, sejalan dengan kesimpulan chapter Skewness bahwa satu nilai itu menarik seluruh distribusi ke arahnya. Aturan IQR dari chapter Rentang dan Interquartile Range memberi kesimpulan yang sama: Q3 = 130, IQR = 40, batas atas Q3 + 1.5 × IQR = 190, dan 400 jauh melampauinya.

Dengan z-score, posisi setiap data kini terbaca dalam satuan yang sama. Langkah berikutnya cukup natural: kenapa tidak mengubah seluruh dataset sekaligus menjadi z-score? Proses itulah standardisasi data — topik chapter berikutnya, lengkap dengan alasan kapan proses itu dibutuhkan dan apa yang tidak berubah karenanya.