การปกปิดข้อมูลและการสร้างข้อมูลด้วย Faker

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Rebeca Gonzalez

Data engineer

Quasi-identifiers

ข้อมูลส่วนบุคคลที่ไม่ละเอียดอ่อนก็อาจเป็น quasi-identifier ได้เช่นกัน ข้อความระบุว่า "หัวหน้ารัฐบาลในยุโรป" และวันเกิด พร้อมเส้นชี้ไปยังใบหน้าของ Angela Merkel

1 Photo of Angela Merkel from Wikimedia Commons
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Quasi-identifiers

เมื่อนำ quasi-identifier หลายตัวมารวมกัน ก็สามารถระบุตัวตนได้

  • อายุ
  • เพศ
  • อาชีพ
  • วันสำคัญส่วนตัว: เกิด, เสียชีวิต, รับตัวเข้ารักษา, เยี่ยมไข้ ฯลฯ

ภาพวาดชายคนหนึ่งพร้อมป๊อปอัปแสดงข้อมูลส่วนบุคคลโดยรอบ

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Quasi-identifiers และการโจมตีเพื่อระบุตัวตนซ้ำ

แผนภาพแสดงจุดตัดระหว่างชุดข้อมูลสองชุด ได้แก่ ข้อมูลทางการแพทย์และรายชื่อผู้มีสิทธิ์เลือกตั้ง โดยจุดตัดคือรหัสไปรษณีย์ วันเกิด และเพศ

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

เทคนิคการทำให้ไม่ระบุตัวตนเพิ่มเติม

เทคนิคการทำให้ไม่ระบุตัวตนสำหรับ quasi-identifier เพื่อลดความเสี่ยงในการเปิดเผยข้อมูล ตารางสองตาราง แสดงข้อมูลทางการแพทย์และข้อมูลส่วนบุคคล ด้านซ้ายเป็นข้อมูลต้นฉบับ ด้านขวาเป็นชุดข้อมูลที่ตัดแอตทริบิวต์ชื่อออกแล้ว

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูล

DataFrame ต้นฉบับ

     name                phone
0    Cassandra Nelson    4399406975395
1    Brian Moss          0389407128613
2    Melody Gill         8283308773967
3    Sandra Huber        4366608954250
4    Patricia Webster    4466462475574

DataFrame หลังปกปิดชื่อ

     name    phone
0    xxxx    4399406975395
1    xxxx    0389407128613
2    xxxx    8283308773967
3    xxxx    4366608954250
4    xxxx    4466462475574

การแทนที่ค่าที่ละเอียดอ่อนด้วยอักขระอื่น เช่น "x" เรียกว่าการปกปิดข้อมูล (data masking)

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูล

# Explore the DataFrame
df.head()
     country         card_number           email
0    Finland         3546746666030419      [email protected]
1    Belarus         4303032415762821      [email protected]
2    Turkmenistan    4536883671157         [email protected]
3    Puerto Rico     3568819286614160      [email protected]
4    Angola          2514167462583016      [email protected]
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูล

# Uniformly mask the card number colum 
df['card_number'] = '****'


# See resulting DataFrame df.head()
     country         card_number     email
0    Finland         ****            [email protected]
1    Belarus         ****            [email protected]
2    Turkmenistan    ****            [email protected]
3    Puerto Rico     ****            [email protected]
4    Angola          ****            [email protected]
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลบางส่วน

ภาพหน้าจอส่วนรีเซ็ตรหัสผ่านของ Facebook แสดงอีเมลที่ถูกปกปิดบางส่วน

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การปกปิดข้อมูลบางส่วน

# Mask username from email
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# See the resulting pseudonymized data df2.head()
     country         card_number           email
0    Finland         3546746666030419      f****@gmail.com
1    Belarus         4303032415762821      m****@gmail.com
2    Turkmenistan    4536883671157         a****@gmail.com
3    Puerto Rico     3568819286614160      k****@gmail.com
4    Angola          2514167462583016      d****@gmail.com
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การสร้างข้อมูลสังเคราะห์

ด้านซ้ายเป็นตารางแสดงข้อมูลต้นฉบับรวมถึงหมายเลขบัตร ด้านขวาเป็นหมายเลขบัตรเครดิตที่สร้างขึ้นใหม่แบบสังเคราะห์

  • การแทนที่ข้อมูลละเอียดอ่อนด้วยข้อมูลที่สร้างขึ้นใหม่ให้มีลักษณะคล้ายข้อมูลเดิม
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การสร้างข้อมูลสังเคราะห์

# Import Faker class
from faker import Faker


# Create fake data generator fake_data = Faker()
# Generate a credit card number fake_data.credit_card_number()
3542216874440804
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การสร้างข้อมูลสังเคราะห์

# Mask card number with new generated data using a lambda function
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# See the resulting pseudonymized data df.head()
     country         card_number            email
0    Finland         3596625386355448       [email protected]
1    Belarus         376297265347524        [email protected]
2    Turkmenistan    4377494880888682       [email protected]
3    Puerto Rico     30553931809810         [email protected]
4    Angola          4241735748382          [email protected]
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การสร้างข้อมูลประเภทอื่น

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

มาฝึกกันเถอะ!

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Preparing Video For Download...