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