Мотивація
Я працюю з наборами даних, які містять особисту інформацію (PII), і іноді потрібно ділитися частиною набору даних з третіми сторонами, таким чином, що не піддають PII і не піддають мого роботодавця відповідальності. Наш звичайний підхід тут полягає в тому, щоб цілком утримувати дані або в деяких випадках зменшувати її дозвіл; наприклад, заміни точної адреси вулиці відповідною округою чи переписом.
Це означає, що певні типи аналізу та обробки повинні проводитись власними силами, навіть коли третя сторона має ресурси та досвід, більш відповідний цьому завдання. Оскільки вихідні дані не розкриваються, шлях, яким ми займаємось цим аналізом та обробкою, не має прозорості. Як результат, будь-яка можливість будь-якої сторони виконувати QA / QC, коригувати параметри або вносити уточнення може бути дуже обмеженою.
Анонімізація конфіденційних даних
Одне завдання передбачає ідентифікацію осіб за їхніми іменами у поданих користувачем даних, враховуючи помилки та невідповідності. Приватна особа може бути записана в одному місці як "Дейв", а в іншому як "Девід", комерційні організації можуть мати багато різних абревіатур, і завжди є певні помилки. Я розробив сценарії на основі ряду критеріїв, які визначають, коли два записи з неідентичними іменами представляють одну і ту ж особу, і присвоюють їм загальний ідентифікатор.
На даний момент ми можемо зробити набір даних анонімним, позбавивши імена та замінивши їх цим персональним ідентифікаційним номером. Але це означає, що одержувач майже не має інформації про, наприклад, силу матчу. Ми хотіли б мати можливість передавати якомога більше інформації, не розкриваючи особу.
Що не працює
Наприклад, було б чудово шифрувати рядки, зберігаючи відстань редагування. Таким чином, треті сторони можуть зробити якісь свої QA / QC або вирішити самостійно проводити подальшу обробку, не отримуючи жодного доступу (або не маючи можливості потенційно реверсувати) PII. Можливо, ми співставляємо рядки в будинку з відстанью редагування <= 2, і одержувач хоче переглянути наслідки посилення цього допуску до відстані редагування <= 1.
Але єдиний я знайомий з цим методом - це ROT13 (загалом, будь-який шифр зсуву ), який навряд чи навіть вважається шифруванням; це як написати імена догори ногами і сказати: "Обіцяй, що не перевернеш папір?"
Ще одним поганим рішенням було б скоротити все. "Еллен Робертс" стає "ЕР" тощо. Це невдале рішення, оскільки в деяких випадках ініціали, спільно з публічними даними, розкриють особистість людини, а в інших випадках - занадто неоднозначно; "Бенджамін Отелло Еймс" і "Банк Америки" матимуть однакові ініціали, але імена їх інакше не відрізняються. Отже, це не робить жодного з тих, що ми хочемо.
Неелегантною альтернативою є введення додаткових полів для відстеження певних атрибутів імені, наприклад:
+-----+----+-------------------+-----------+--------+
| 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 |
+-----+----+-------------------+-----------+--------+
Я називаю це "неелегантним", оскільки воно вимагає передбачити, які якості можуть бути цікавими та відносно грубими. Якщо імена будуть видалені, ви не можете зробити достатньо висновку про силу збігу між рядками 2 і 3 або про відстань між рядками 2 і 4 (тобто, наскільки вони близькі до відповідності).
Висновок
Мета полягає в тому, щоб перетворити рядки таким чином, щоб якомога більше корисних якостей початкового рядка було збережено максимально, затушуючи початковий рядок. Дешифрування має бути неможливим або настільки непрактичним, що фактично неможливо, незалежно від розміру набору даних. Зокрема, метод, який зберігає відстань редагування між довільними рядками, був би дуже корисним.
Я знайшов пару паперів, які можуть бути актуальними, але вони трохи над головою: