Motivasi
Saya bekerja dengan kumpulan data yang berisi informasi pengenal pribadi (PII) dan kadang-kadang perlu berbagi bagian dari dataset dengan pihak ketiga, dengan cara yang tidak mengekspos PII dan membuat majikan saya bertanggung jawab. Pendekatan kami yang biasa di sini adalah menahan data sepenuhnya, atau dalam beberapa kasus mengurangi resolusinya; misalnya, mengganti alamat jalan yang tepat dengan daerah atau sensus yang sesuai.
Ini berarti bahwa beberapa jenis analisis dan pemrosesan harus dilakukan sendiri, bahkan ketika pihak ketiga memiliki sumber daya dan keahlian yang lebih sesuai dengan tugas tersebut. Karena sumber data tidak diungkapkan, cara kami melakukan analisis dan pemrosesan ini kurang transparan. Akibatnya, kemampuan pihak ketiga mana pun untuk melakukan QA / QC, menyesuaikan parameter atau membuat penyempurnaan mungkin sangat terbatas.
Menganonimkan Data Rahasia
Satu tugas melibatkan mengidentifikasi individu dengan nama mereka, dalam data yang dikirimkan pengguna, sambil memperhitungkan kesalahan dan inkonsistensi akun. Seorang individu pribadi dapat direkam di satu tempat sebagai "Dave" dan di tempat lain sebagai "David," entitas komersial dapat memiliki banyak singkatan yang berbeda, dan selalu ada beberapa kesalahan ketik. Saya telah mengembangkan skrip berdasarkan sejumlah kriteria yang menentukan kapan dua catatan dengan nama yang tidak identik mewakili individu yang sama, dan menetapkannya sebagai ID umum.
Pada titik ini kita dapat membuat dataset anonim dengan menahan nama dan menggantinya dengan nomor ID pribadi ini. Tetapi ini berarti penerima hampir tidak memiliki informasi tentang misalnya kekuatan pertandingan. Kami lebih suka untuk dapat memberikan informasi sebanyak mungkin tanpa mengungkapkan identitas.
Apa yang Tidak Bekerja
Misalnya, akan sangat bagus untuk dapat mengenkripsi string sambil menjaga jarak sunting. Dengan cara ini, pihak ketiga dapat melakukan beberapa QA / QC mereka sendiri, atau memilih untuk melakukan pemrosesan lebih lanjut sendiri, tanpa pernah mengakses (atau secara potensial dapat merekayasa balik) PII. Mungkin kami mencocokkan string di rumah dengan jarak edit <= 2, dan penerima ingin melihat implikasi pengetatan toleransi untuk mengedit jarak <= 1.
Tetapi satu-satunya metode yang saya kenal yang melakukan ini adalah ROT13 (lebih umum, shift cipher ), yang bahkan tidak dianggap sebagai enkripsi; itu seperti menulis nama-nama terbalik dan berkata, "Berjanjilah kamu tidak akan membalik kertas itu?"
Solusi buruk lainnya adalah menyingkat semuanya. "Ellen Roberts" menjadi "ER" dan sebagainya. Ini adalah solusi yang buruk karena dalam beberapa kasus inisial, terkait dengan data publik, akan mengungkapkan identitas seseorang, dan dalam kasus lain itu terlalu ambigu; "Benjamin Othello Ames" dan "Bank of America" akan memiliki inisial yang sama, tetapi nama mereka berbeda. Jadi itu tidak melakukan salah satu hal yang kita inginkan.
Alternatif yang tidak berlaku adalah dengan memperkenalkan bidang tambahan untuk melacak atribut tertentu dari nama, misalnya:
+-----+----+-------------------+-----------+--------+
| Row | ID | Name | WordChars | Origin |
+-----+----+-------------------+-----------+--------+
| 1 | 17 | "AMELIA BEDELIA" | (6, 7) | Eng |
+-----+----+-------------------+-----------+--------+
| 2 | 18 | "CHRISTOPH BAUER" | (9, 5) | Ger |
+-----+----+-------------------+-----------+--------+
| 3 | 18 | "C J BAUER" | (1, 1, 5) | Ger |
+-----+----+-------------------+-----------+--------+
| 4 | 19 | "FRANZ HELLER" | (5, 6) | Ger |
+-----+----+-------------------+-----------+--------+
Saya menyebutnya "tidak elok" karena memerlukan antisipasi kualitas mana yang mungkin menarik dan relatif kasar. Jika nama dihapus, tidak banyak yang dapat Anda simpulkan tentang kekuatan kecocokan antara baris 2 & 3, atau tentang jarak antara baris 2 & 4 (yaitu, seberapa dekat mereka dengan pencocokan).
Kesimpulan
Tujuannya adalah untuk mengubah string sedemikian rupa sehingga sebanyak mungkin kualitas yang berguna dari string asli dipertahankan sambil mengaburkan string asli. Dekripsi seharusnya tidak mungkin, atau tidak praktis untuk secara efektif tidak mungkin, tidak peduli ukuran set data. Secara khusus, metode yang menjaga jarak sunting antara string arbitrer akan sangat berguna.
Saya telah menemukan beberapa makalah yang mungkin relevan, tetapi mereka sedikit di atas kepala saya: