Làm cách nào tôi có thể chuyển đổi tên trong một tập dữ liệu bí mật để đặt tên ẩn danh, nhưng vẫn giữ một số đặc điểm của tên?


42

Động lực

Tôi làm việc với các bộ dữ liệu có chứa thông tin nhận dạng cá nhân (PII) và đôi khi cần chia sẻ một phần của bộ dữ liệu với các bên thứ ba, theo cách không phơi bày PII và khiến chủ nhân của tôi phải chịu trách nhiệm pháp lý. Cách tiếp cận thông thường của chúng tôi ở đây là giữ lại toàn bộ dữ liệu hoặc trong một số trường hợp để giảm độ phân giải của nó; ví dụ: thay thế một địa chỉ đường phố chính xác bằng quận hoặc điều tra dân số tương ứng.

Điều này có nghĩa là một số loại phân tích và xử lý nhất định phải được thực hiện trong nhà, ngay cả khi bên thứ ba có tài nguyên và chuyên môn phù hợp hơn với nhiệm vụ. Vì dữ liệu nguồn không được tiết lộ, nên cách chúng tôi tiến hành phân tích và xử lý này thiếu tính minh bạch. Do đó, khả năng thực hiện QA / QC của bất kỳ bên thứ ba nào, điều chỉnh các tham số hoặc thực hiện các sàng lọc có thể rất hạn chế.

Ẩn danh dữ liệu bí mật

Một nhiệm vụ liên quan đến việc xác định các cá nhân bằng tên của họ, trong dữ liệu do người dùng gửi, trong khi tính đến các lỗi tài khoản và sự không nhất quán. Một cá nhân riêng tư có thể được ghi ở một nơi là "Dave" và ở một nơi khác là "David", các thực thể thương mại có thể có nhiều chữ viết tắt khác nhau và luôn có một số lỗi chính tả. Tôi đã phát triển các tập lệnh dựa trên một số tiêu chí xác định khi hai bản ghi có tên không giống nhau đại diện cho cùng một cá nhân và gán cho chúng một ID chung.

Tại thời điểm này, chúng tôi có thể làm cho tập dữ liệu ẩn danh bằng cách giữ lại tên và thay thế chúng bằng số ID cá nhân này. Nhưng điều này có nghĩa là người nhận gần như không có thông tin về, ví dụ như sức mạnh của trận đấu. Chúng tôi muốn có thể truyền tải càng nhiều thông tin càng tốt mà không cần tiết lộ danh tính.

Những gì không làm việc

Ví dụ, thật tuyệt vời khi có thể mã hóa các chuỗi trong khi duy trì khoảng cách chỉnh sửa. Bằng cách này, các bên thứ ba có thể thực hiện một số QA / QC của riêng họ hoặc chọn tự xử lý thêm mà không cần truy cập (hoặc có thể có khả năng đảo ngược kỹ sư) PII. Có lẽ chúng tôi khớp các chuỗi trong nhà với khoảng cách chỉnh sửa <= 2 và người nhận muốn xem xét ý nghĩa của việc thắt chặt dung sai đó để chỉnh sửa khoảng cách <= 1.

Nhưng phương pháp duy nhất tôi quen thuộc với điều này là ROT13 (nói chung hơn, bất kỳ mật mã dịch chuyển nào ), hầu như không được tính là mã hóa; nó giống như viết tên lộn ngược và nói, "Hứa là bạn sẽ không lật tờ giấy?"

Một giải pháp tồi tệ khác là viết tắt mọi thứ. "Ellen Roberts" trở thành "ER" và cứ thế. Đây là một giải pháp kém vì trong một số trường hợp, tên viết tắt, kết hợp với dữ liệu công khai, sẽ tiết lộ danh tính của một người và trong các trường hợp khác, nó quá mơ hồ; "Benjamin Othello Ames" và "Bank of America" ​​sẽ có cùng tên viết tắt, nhưng tên của chúng thì không giống nhau. Vì vậy, nó không làm một trong những điều chúng ta muốn.

Một thay thế không phù hợp là giới thiệu các trường bổ sung để theo dõi các thuộc tính nhất định của tên, ví dụ:

+-----+----+-------------------+-----------+--------+
| 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    |
+-----+----+-------------------+-----------+--------+

Tôi gọi điều này là "không phù hợp" bởi vì nó đòi hỏi phải dự đoán những phẩm chất nào có thể thú vị và nó tương đối thô. Nếu tên bị xóa, bạn không thể kết luận một cách hợp lý về độ mạnh của trận đấu giữa các hàng 2 & 3 hoặc về khoảng cách giữa các hàng 2 & 4 (nghĩa là chúng gần với nhau như thế nào).

Phần kết luận

Mục tiêu là biến đổi các chuỗi theo cách sao cho càng nhiều phẩm chất hữu ích của chuỗi gốc được bảo tồn càng tốt trong khi che khuất chuỗi gốc. Việc giải mã là không thể, hoặc không thực tế đến mức thực sự không thể, bất kể kích thước của tập dữ liệu. Đặc biệt, một phương pháp duy trì khoảng cách chỉnh sửa giữa các chuỗi tùy ý sẽ rất hữu ích.

Tôi đã tìm thấy một vài giấy tờ có thể có liên quan, nhưng chúng hơi quá đầu tôi:

Câu trả lời:


19

Một trong những tài liệu tham khảo mà tôi đã đề cập trong OP đã đưa tôi đến một giải pháp tiềm năng có vẻ khá mạnh mẽ, được mô tả trong "Liên kết bản ghi bảo mật quyền riêng tư bằng bộ lọc Bloom" ( doi: 10.1186 / 1472-6947-9-41 ):

Một giao thức mới để liên kết hồ sơ bảo vệ quyền riêng tư với các định danh được mã hóa cho phép các lỗi trong định danh đã được phát triển. Giao thức dựa trên các bộ lọc Bloom trên q-gram định danh.

Bài viết đi sâu vào chi tiết về phương pháp, mà tôi sẽ tóm tắt ở đây với khả năng tốt nhất của tôi.

Bộ lọc Bloom là một chuỗi các bit có độ dài cố định lưu trữ kết quả của một tập hợp các hàm băm độc lập cố định, mỗi hàm được tính trên cùng một giá trị đầu vào. Đầu ra của mỗi hàm băm phải là một giá trị chỉ mục trong số các chỉ mục có thể có trong bộ lọc; tức là, nếu bạn có chuỗi 10 bit được lập chỉ mục 0 bit, các hàm băm sẽ trả về (hoặc được ánh xạ tới) các giá trị từ 0 đến 9.

Bộ lọc bắt đầu với mỗi bit được đặt thành 0. Sau khi băm giá trị đầu vào với mỗi hàm từ tập hợp hàm băm, mỗi bit tương ứng với giá trị chỉ mục được trả về bởi bất kỳ hàm băm nào được đặt thành 1. Nếu cùng một chỉ mục được trả về bởi nhiều hơn hơn một hàm băm, bit tại chỉ mục đó chỉ được đặt một lần. Bạn có thể coi bộ lọc Bloom là sự chồng chất của tập hợp các giá trị băm lên phạm vi bit cố định.

Giao thức được mô tả trong bài viết được liên kết ở trên chia các chuỗi thành n-gram, trong trường hợp này là các bộ ký tự. Ví dụ, "hello"có thể mang lại bộ 2 gram sau:

["_h", "he", "el", "ll", "lo", "o_"]

Việc đệm mặt trước và mặt sau với các khoảng trắng dường như thường là tùy chọn khi xây dựng n-gram; các ví dụ được đưa ra trong bài báo đề xuất phương pháp này sử dụng phần đệm như vậy.

Mỗi n-gram có thể được băm để tạo bộ lọc Bloom và bộ bộ lọc Bloom này có thể được đặt chồng lên chính nó (hoạt động bitwise OR) để tạo bộ lọc Bloom cho chuỗi.

Nếu bộ lọc chứa nhiều bit hơn hàm băm hoặc n-gram, các chuỗi tùy ý tương đối khó tạo ra chính xác cùng một bộ lọc. Tuy nhiên, hai chuỗi n-gram càng có nhiều điểm chung, các bộ lọc của chúng sẽ chia sẻ càng nhiều bit. Sau đó, bạn có thể so sánh bất kỳ hai bộ lọc A, Bbằng hệ số Dice của chúng:

D A, B = 2h / (a ​​+ b)

Trong trường hợp hlà số bit được thiết lập để 1 trong cả hai bộ lọc, alà số bit thiết lập để 1 trong chỉ lọc A, và blà số bit thiết lập để 1 trong chỉ lọc B. Nếu chuỗi là giống hệt nhau, hệ số Dice sẽ là 1; chúng càng khác nhau, hệ số sẽ càng gần 0.

Do các hàm băm đang ánh xạ một số lượng đầu vào duy nhất không xác định thành một số lượng nhỏ các chỉ mục bit có thể, nên các đầu vào khác nhau có thể tạo ra cùng một bộ lọc, do đó hệ số chỉ xác suất các chuỗi giống nhau hoặc tương tự nhau. Số lượng hàm băm khác nhau và số bit trong bộ lọc là các tham số quan trọng để xác định khả năng dương tính giả - các cặp đầu vào tương tự ít hơn nhiều so với hệ số Dice được tạo ra bởi phương pháp này dự đoán.

Tôi thấy hướng dẫn này rất hữu ích để hiểu bộ lọc Bloom.

Có một số linh hoạt trong việc thực hiện phương pháp này; xem thêm bài viết năm 2010 này (cũng được liên kết ở cuối câu hỏi) để biết một số chỉ dẫn về cách thức thực hiện của nó so với các phương pháp khác và với các tham số khác nhau.


Đánh dấu đây là câu trả lời được chấp nhận vì trong số các cách tiếp cận được đề xuất, đây là cách hứa hẹn nhất cho trường hợp sử dụng cụ thể của tôi.
Không khí

Cảm ơn bạn cho tất cả các chi tiết và nền tảng này. Bạn có bắt gặp bất kỳ triển khai nào (ví dụ như trong Python) của phương pháp này không?
bóng tròn

@amball tôi chưa có.
Không khí

8

Khi đọc được câu hỏi của bạn, tôi nhận ra Levenshtein Khoảng cách có thể là một giải pháp tốt cho vấn đề của bạn. Thật tốt khi thấy bạn có một liên kết đến một bài báo về chủ đề này, hãy để tôi xem liệu tôi có thể làm sáng tỏ một giải pháp của Levenshtein sẽ như thế nào không.

Khoảng cách Levenshtein được sử dụng trên nhiều ngành để phân giải thực thể, điều làm cho nó hữu ích là nó là thước đo sự khác biệt giữa hai chuỗi. Trong trường hợp so sánh chuỗi, nó chỉ là chuỗi ký tự.

Điều này có thể giúp giải quyết vấn đề của bạn bằng cách cho phép bạn cung cấp một số đưa ra thước đo mức độ tương tự của văn bản của một lĩnh vực khác.

Dưới đây là một ví dụ về cách sử dụng Levenshtein cơ bản với dữ liệu bạn đã cung cấp:

nhập mô tả hình ảnh ở đây

Điều này cung cấp một giải pháp ok, khoảng cách 8 cung cấp một số dấu hiệu của mối quan hệ và nó rất tuân thủ PII. Tuy nhiên, nó vẫn không siêu hữu ích, hãy xem điều gì sẽ xảy ra nếu chúng ta thực hiện một số phép thuật văn bản để chỉ lấy chữ cái đầu tiên của tên đầu tiên và tên đầy đủ cuối cùng thả bất cứ thứ gì vào giữa:

nhập mô tả hình ảnh ở đây

Như bạn có thể thấy khoảng cách Levenshtein bằng 0 là dấu hiệu khá tốt cho mối quan hệ. Các nhà cung cấp dữ liệu thông thường sẽ kết hợp một loạt các hoán vị Levenshtein của tên và họ với 1, 2 hoặc tất cả các ký tự chỉ để đưa ra một số chiều về cách các thực thể có liên quan trong khi vẫn duy trì tính ẩn danh trong dữ liệu.


1
Điều khiến tôi quan tâm về bài báo mà tôi liên kết là nó tuyên bố sẽ hiển thị một phương thức để thực hiện loại tính toán này mà không có kiến ​​thức về cả hai chuỗi đầu vào . Trong bài báo, mỗi diễn viên có kiến ​​thức về một chuỗi, không hữu ích cho mục đích của tôi; Tôi sẽ cần một diễn viên để có thể thực hiện các tính toán mà không cần kiến thức về một trong hai chuỗi. Tính toán chúng trước chỉ khả thi đối với các bộ dữ liệu rất nhỏ hoặc các sản phẩm rất hạn chế; một sản phẩm chéo đầy đủ của khoảng cách số nguyên trên tập dữ liệu của tôi sẽ mất ~ 10 PB dung lượng lưu trữ.
Không khí

Đó là lý do tại sao tôi đưa ra ý tưởng về mật mã thay thế (ROT13) vì nó bảo toàn khoảng cách giữa các chuỗi; nhưng nó không an toàn và tôi nghi ngờ rằng có thể không thể mã hóa an toàn các chuỗi trong khi duy trì khoảng cách chỉnh sửa. (Rất thích bị sai!)
Air

Đúng vậy, tôi sẽ chỉ lọc ma trận để chỉ bao gồm Levenshtein bên dưới một mức cắt nhất định, vì vậy bạn chỉ cư trú ở nơi có khả năng trùng lặp cao. Ngoài ra, khi nói đến PII, tôi nghĩ rằng nếu bạn bao gồm đủ thông tin để xác định mối quan hệ giữa các thực thể khác nhau trong bộ dữ liệu của bạn, thì rất có thể bạn sẽ không giữ được sự ẩn danh của khách hàng. Quan điểm của việc ẩn danh dữ liệu là để tránh các vấn đề đau đầu về quy định liên quan đến PII tiềm ẩn trong dòng đó, (các tiêu chuẩn luôn có thể được thắt chặt), vì vậy cá nhân tôi sẽ không mạo hiểm.
neone4373

7

Nếu khả thi tôi sẽ liên kết các hồ sơ có liên quan (ví dụ, Dave, David, vv) và thay thế bằng một số thứ tự (1,2,3, vv) hoặc một muối băm của chuỗi được sử dụng để đại diện cho tất cả hồ sơ liên quan ( ví dụ: David thay vì Dave).

Tôi cho rằng các bên thứ ba không cần biết tên thật là gì, nếu không bạn cũng có thể cung cấp cho họ.

chỉnh sửa : Bạn cần xác định và chứng minh loại hoạt động mà bên thứ ba cần để có thể thực hiện. Ví dụ, có gì sai khi sử dụng tên viết tắt theo sau bởi một số (ví dụ: BOA-1, BOA-2, v.v.) để phân tán Bank of America khỏi Benjamin Othello Ames? Nếu điều đó quá lộ liễu, bạn có thể bin một số chữ cái hoặc tên; ví dụ: [AE] -> 1, [FJ] -> 2, v.v ... vì vậy BOA sẽ trở thành 1OA hoặc ["Bank", "Barry", "Bruce", v.v.] -> 1 vì vậy Bank of America một lần nữa 1OA.

Để biết thêm thông tin xem k-nặc danh .


Đánh giá cao tài liệu tham khảo ẩn danh k và đề xuất bin - mang đến cho tôi một số điều mới để suy nghĩ.
Không khí

6

Một tùy chọn (tùy thuộc vào kích thước tập dữ liệu của bạn) là chỉ cung cấp khoảng cách chỉnh sửa (hoặc các biện pháp tương tự khác mà bạn đang sử dụng) dưới dạng tập dữ liệu bổ sung.

Ví dụ:

  1. Tạo một tập hợp các tên duy nhất trong bộ dữ liệu
  2. Đối với mỗi tên, tính khoảng cách chỉnh sửa cho tên khác
  3. Tạo ID hoặc hàm băm không thể đảo ngược cho mỗi tên
  4. Thay thế tên trong tập dữ liệu gốc bằng ID này
  5. Cung cấp ma trận khoảng cách chỉnh sửa giữa các số ID dưới dạng tập dữ liệu mới

Mặc dù vẫn còn rất nhiều điều có thể được thực hiện để từ chối dữ liệu từ những dữ liệu này.

Ví dụ: nếu "Tim" được biết đến là tên phổ biến nhất đối với một cậu bé, thì việc đếm tần số ID phù hợp với tỷ lệ phần trăm Tim được biết trong dân số có thể khiến điều đó biến mất. Từ đó, bạn có thể tìm tên có khoảng cách chỉnh sửa là 1 và kết luận rằng những ID đó có thể đề cập đến "Tom" hoặc "Jim" (khi kết hợp với thông tin khác).


5

Tôi không chắc lắm, nhưng có lẽ băm nhạy cảm cục bộ là một giải pháp tốt. Nó băm dữ liệu đầu vào (trong trường hợp của bạn - tên), vì vậy các chuỗi gốc sẽ được giữ nguyên. Mặt khác, ý tưởng chính của LSH là tối đa hóa khả năng băm cho các mặt hàng tương tự. Có rất nhiều triển khai LSH khác nhau. Tôi đã thử Nilsimsa-hash để so sánh các văn bản tweet và nó hoạt động khá tốt. Nhưng tôi không chắc chắn, nó sẽ hoạt động tốt như thế nào trong trường hợp chuỗi ngắn (tên) - vấn đề này yêu cầu thử nghiệm. Tôi đã thử các ví dụ của bạn và đây là kết quả (tên A, tên B, "khoảng cách" - tối đa là 120):

1. AMELIA BEDELIA  - CHRISTOPH BAUER - 107
2. AMELIA BEDELIA  - C J BAUER       - 82
3. AMELIA BEDELIA  - FRANZ HELLER    - 91
4. CHRISTOPH BAUER - C J BAUER       - 81
5. CHRISTOPH BAUER - FRANZ HELLER    - 98
6. C J BAUER       - FRANZ HELLER    - 83

Như bạn thấy, CHRISTOPH BAUER và CJ BAUER trở thành cặp đôi gần nhất. Nhưng sự khác biệt là không đáng kể. Và chỉ ví dụ - đại diện băm của những tên này:

AMELIA BEDELIA  6b208299602b5000c3005a048122a43a828020889042240005011c1880864502
CHRISTOPH BAUER 22226448000ab10102e2860b52062487ff0000928e0822ee106028016cc01237
C J BAUER       2282204100961060048050004400240006032400148000802000a80130402002
FRANZ HELLER    58002002400880080b49172044020008030002442631e004009195020ad01158

3

Đây là một cách tiếp cận tôi không thấy được đề cập: tách quy trình thành hai bước: bước đầu tiên tập trung vào mã hóa tên để các phiên bản thay thế cùng tên được mã hóa giống nhau (hoặc gần giống nhau) và bước thứ hai tập trung vào thực hiện họ vô danh.

Bước đầu tiên, bạn có thể sử dụng một trong các Thuật toán ngữ âm (Soundex và các biến thể) , áp dụng cho tên, họ và tên viết tắt theo nhiều thứ tự khác nhau. (Xem bài viết này , cũng). Đây là bước bạn giải quyết sự tương đồng so với sự khác biệt về tên để cân bằng giữa dương tính giả với âm tính giả.

Đối với bước thứ hai, bạn có thể chọn bất kỳ phương pháp băm hoặc mật mã nào bạn thích, mà không cần quan tâm đến việc phương thức đó ảnh hưởng đến việc khớp tên như thế nào. Điều này cho phép bạn tự do sử dụng một phương pháp có các đặc tính tốt nhất cho cả hiệu suất, độ mạnh mẽ và tính ẩn danh.


Tôi không nghĩ đề xuất này giải quyết vấn đề như nó được trình bày trong câu hỏi. Đâu là sự linh hoạt sau mã hóa? Làm cách nào để tôi tinh chỉnh phân tích của bạn mà không truy cập vào dữ liệu gốc?
Air

@AirThomas Tôi xin lỗi nhưng tôi không hiểu hai câu hỏi của bạn. Bạn có ý nghĩa gì bởi "mã hóa sau linh hoạt"? Tôi không thấy bất cứ điều gì trong câu hỏi / mô tả của bạn như thế. Bạn có ý nghĩa gì "tinh chỉnh phân tích của bạn mà không truy cập vào dữ liệu gốc"? Tôi đã không thấy bất cứ điều gì về "tinh chế".
MrMeritology

1
Tôi đã cố gắng xác định vấn đề trong đoạn thứ hai của phần Động lực . Ví dụ, hãy tưởng tượng rằng bạn muốn phát hành tập dữ liệu của mình cho các nhà nghiên cứu khác nhau, những người muốn thực hiện một số mô hình. Có bất kỳ phương pháp thông minh và hiệu quả nào có thể được áp dụng, và mỗi nhà nghiên cứu làm việc khác nhau một chút. Bạn không thể tiết lộ tên của các cá nhân trong tập dữ liệu của bạn. Nếu bạn thực hiện phần phân tích đó trước khi phát hành dữ liệu, nó buộc bạn phải lựa chọn phương pháp luận cho mọi người.
Không khí

Nếu bạn cung cấp thêm băm tên, lợi ích là các bên thứ ba có thể phân biệt danh tính chính xác, nhưng không còn nữa. Vì vậy, câu hỏi là, làm thế nào bạn có thể cung cấp thêm thông tin về dữ liệu mà bạn không thể phát hành? Ví dụ, có một phương pháp duy trì đầu ra băm / mã hóa khoảng cách chỉnh sửa giữa các đầu vào tùy ý không? Tôi đã tìm thấy ít nhất một phương pháp ít nhất xấp xỉ chức năng đó (để biết thêm thông tin, xem câu trả lời của riêng tôi). Tôi hy vọng điều đó làm cho mọi thứ rõ ràng hơn.
Không khí
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.