Setiap baris data yang kita olah sering kali adalah manusia: nama pelanggan di tabel transaksi, nomor telepon di daftar member, riwayat pembelian yang bisa membaca selera seseorang. Sebelum satu analisis pun dijalankan, pertanyaan pertama yang wajib kita jawab adalah: bolehkah data ini kita pegang, dan siapa yang boleh melihatnya? Chapter ini membahas konsep data pribadi dan PII, membedakan anonimisasi dari pseudonymisasi, lalu mempraktikkan pseudonymisasi dengan hashing — teknik termurah yang seharusnya menjadi kebiasaan baku setiap data scientist.
Data Pribadi dan PII #
Data pribadi adalah segala informasi tentang orang yang dapat diidentifikasi, baik langsung maupun tidak langsung. Dalam praktik industri, istilah teknisnya adalah PII (personally identifiable information): kolom yang bisa dipakai untuk menunjuk satu individu tertentu. Nama lengkap, nomor induk kependudukan, nomor telepon, dan alamat surel adalah pengenal langsung — satu nilai saja sudah cukup untuk menunjuk satu orang.
Jebakan yang paling sering terlewat: beberapa kolom yang tampak tidak berbahaya bisa bergabung menjadi pengenal. Tabel pelanggan Toko Kopi Kita tanpa kolom nama pun tetap membuka identitas bila kombinasi tanggal bergabung, kode pos, dan jenis langganan hanya dimiliki satu orang — kombinasi semacam ini disebut quasi-identifier. Karena itu menilai PII tidak cukup per kolom; kita perlu memeriksa kombinasi kolom yang paling membedakan satu baris dari baris lain.
| Jenis pengenal | Contoh | Ciri utama |
|---|---|---|
| Pengenal langsung | nama lengkap, NIK, nomor telepon, alamat surel | satu nilai cukup untuk menunjuk satu orang |
| Quasi-identifier | tanggal bergabung + kode pos + jenis langganan | tiap kolom sendirian tidak cukup, kombinasinya bisa unik |
| Data dengan dampak berat | data kesehatan, keyakinan, catatan lokasi presisi | salah guna berdampak besar pada orang tersebut, perlindungannya paling ketat |
Kategori ketiga pada tabel menuntut kehati-hatian ekstra: bukan hanya sulit diidentifikasi, melainkan dampaknya bila disalahgunakan jauh lebih berat. Sebagai patokan praktis, semakin mudah satu baris menunjuk satu orang dan semakin sensitif isinya, semakin sedikit orang yang boleh mengaksesnya.
Anonimisasi dan Pseudonymisasi #
Setelah menyadari apa yang kita pegang, pertanyaan berikutnya adalah seberapa jauh identitas itu dilepas sebelum data dipakai. Dua istilah yang sering dipakai bergantian padahal berbeda:
| Aspek | Anonimisasi | Pseudonymisasi |
|---|---|---|
| Apa yang dilakukan | mengubah atau menghapus identitas hingga tidak dapat dikaitkan kembali ke individu | mengganti identitas dengan pseudonim, misalnya ID pengganti |
| Dapat dibalik? | tidak — prosesnya satu arah | ya — bila tabel pemetaan pseudonim ke identitas asli masih ada |
| Contoh hasil | usia 34 menjadi rentang 30-39, rata-rata per wilayah | “Budi Santoso” menjadi pel-878d7a51 |
| Status hasil menurut UU PDP | idealnya berhenti menjadi data pribadi | tetap data pribadi; risikonya ditekan, kewajibannya tetap |
Dua baris terakhir tabel itu yang paling sering disalahpahami. Pseudonymisasi tidak mengeluarkan data dari cakupan perlindungan data pribadi: selama tabel pemetaan masih tersimpan, baris pel-878d7a51 tetap bisa dikembalikan menjadi Budi Santoso. Di Indonesia, pemrosesan data pribadi diatur oleh UU PDP (Undang-Undang Pelindungan Data Pribadi) — pseudonymisasi mempermudah kepatuhan, bukan menghapus kewajiban. Anonimisasi sejati menuntut lebih: seluruh kombinasi quasi-identifier yang tersisa juga tidak boleh bisa menunjuk satu orang, dan membuktikannya jauh lebih sulit daripada sekadar menghapus kolom nama.
Pseudonymisasi Nama dengan Hashing #
Pseudonymisasi paling umum dilakukan dengan hashing: nama diubah menjadi sidik jari angka tetap melalui fungsi hash SHA-256. Kode berikut menyiapkan tabel pelanggan yang layak dibagikan ke tim analisis — identitas diganti pseudonim pendek, kolom kontak dibuang, tetapi analisis per pelanggan tetap mungkin:
import hashlib
import pandas as pd
pelanggan = pd.DataFrame({
"nama": ["Budi Santoso", "Siti Rahayu", "Dewi Lestari",
"Rani Putri", "Agus Pratama"],
"telepon": ["0812-1111-2222", "0813-3333-4444", "0857-5555-6666",
"0821-7777-8888", "0819-9999-0000"],
"kota": ["Bandung", "Bandung", "Surabaya", "Bandung", "Surabaya"],
"total_belanja": [412, 188, 654, 301, 240],
})
KUNCI = "toko-kopi-kita-2026"
def buat_pseudonim(nama):
sidik = hashlib.sha256((KUNCI + nama.lower()).encode("utf-8")).hexdigest()
return "pel-" + sidik[:8]
aman = pelanggan.copy()
aman["id_pelanggan"] = aman["nama"].apply(buat_pseudonim)
aman = aman.drop(columns=["nama", "telepon"])
aman = aman[["id_pelanggan", "kota", "total_belanja"]]
print(aman.to_string(index=False))
print()
print("id unik:", aman["id_pelanggan"].nunique(), "dari", len(aman), "pelanggan")
print("pseudonim Budi dua kali:",
buat_pseudonim("Budi Santoso"), "|", buat_pseudonim("Budi Santoso"))Output yang Dihasilkan:
id_pelanggan kota total_belanja
pel-878d7a51 Bandung 412
pel-f16a9ee9 Bandung 188
pel-25a9f5f0 Surabaya 654
pel-96198a14 Bandung 301
pel-e706fa4b Surabaya 240
id unik: 5 dari 5 pelanggan
pseudonim Budi dua kali: pel-878d7a51 | pel-878d7a51Mari kita telaah bagian-bagian pentingnya:
- Baris 13 (
KUNCI = ...): kunci digabungkan ke nama sebelum di-hash. Hash atas nama mentah tanpa kunci mudah dibalik orang luar dengan tabel kamus nama populer; kunci rahasia membuat pseudonim tidak bisa ditebak dari luar. Kunci sendiri wajib disimpan terpisah dari data, sama seperti tabel pemetaan. - Baris 15-17 (
buat_pseudonim):nama.lower()menormalkan kapital sehingga “Budi Santoso” dan “budi santoso” menghasilkan pseudonim yang sama.hexdigest()[:8]mengambil delapan karakter pertama sidik 64 karakter — cukup unik untuk tabel kecil; untuk jutaan baris, ambil potongan yang lebih panjang agar pseudonim tidak bertabrakan. - Baris 19-22 (
copy,apply,drop): pseudonim dipasang per baris lewatapply, lalu kolom identitas langsung dibuang. Urutan ini penting: jangan ada tahap di mana tabel berisi nama dan pseudonim sekaligus lalu keluar dari folder kerja. - Baris terakhir output: nama yang sama selalu menghasilkan pseudonim yang sama — sifat deterministik inilah yang membuat tabel bulan ini tetap bisa digabungkan dengan tabel bulan depan lewat kolom
id_pelanggan, tanpa pernah memegang nama lagi.
Memilih Teknik sesuai Kebutuhan Perlindungan #
Tidak ada satu teknik yang selalu menang; pilihannya ditentukan oleh pertanyaan analisis dan siapa yang akan memegang datanya:
| Teknik | Perlindungan yang diberikan | Cocok untuk |
|---|---|---|
| Buang kolom identitas | identitas tidak keluar sama sekali | analisis agregat yang tidak butuh baris per baris |
| Pseudonymisasi hashing | identitas tersembunyi, penggabungan antar tabel tetap bisa | pelacakan pelanggan lintas bulan |
Masking sebagian (0812-***-2222) | nilai asli tidak terbaca utuh | tampilan dasbor dan contoh data di presentasi |
| Generalisasi (usia 34 menjadi 30-39) | menyulitkan pencocokan satu per satu | publikasi hasil ke pihak luar |
| Agregasi (rata-rata per kota) | baris individual tidak lagi ada | laporan manajemen rutin |
Prinsip pemilihannya satu kalimat: simpan identitas hanya jika analisis memang membutuhkannya, dan sebisa mungkin pegang versi data yang paling tidak mengidentifikasi. Tim yang butuh nama biasanya hanya segelintir orang pada satu tahap; sisanya bisa bekerja penuh dengan pseudonim.
Rangkuman #
- Data pribadi mencakup lebih dari kolom nama: kombinasi quasi-identifier seperti tanggal bergabung dan kode pos juga bisa menunjuk satu orang.
- Anonimisasi bersifat satu arah dan idealnya mengakhiri status data pribadi; pseudonymisasi hanya mengganti identitas dengan pseudonim dan tetap berstatus data pribadi menurut UU PDP.
- Hashing dengan kunci menghasilkan pseudonim deterministik: nama yang sama selalu menjadi ID yang sama, sehingga analisis lintas periode tetap mungkin tanpa memegang identitas.
- Pilihan teknik — drop, pseudonymisasi, masking, generalisasi, agregasi — mengikuti kebutuhan analisis, dengan prinsip memegang versi data yang paling tidak mengidentifikasi.
Mengganti nama dengan pseudonim baru menyelesaikan satu sisi pekerjaan. Sisi lainnya berada di luar isi tabel: siapa yang boleh membuka berkas itu, di mana kredensial akses disimpan, dan bagaimana data tampil saat diperlihatkan kepada orang lain. Kita bahas pada chapter berikutnya: Keamanan Data .
Referensi: