การทำให้ข้อมูลเป็นนามธรรมเพื่อปกป้องตัวตน

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

Rebeca Gonzalez

Data engineer

การทำให้ข้อมูลเป็นนามธรรม

เทคนิคที่แทนค่าข้อมูลด้วยค่าที่ละเอียดน้อยลง

เพื่อลบตัวระบุตัวตนบางส่วนออก โดยยังคงประโยชน์ของข้อมูลไว้สำหรับการวิเคราะห์

แทนค่าข้อมูลด้วยค่าที่กว้างขึ้น เช่น "Dancer" -> "Artist"

     name               location
0    Amanda Hooper      146 Rodgers Field\nGregoryview, MS 71630
1    Sarah Smith        817 Garcia Shoal\nJonesville, AR 30299
2    Sean Boyd III      1938 90th St\nDallas, TX 59715
     name               location
0    Amanda Hooper      998 Boone Estate\nReedborough, MS 71630
1    Sarah Smith        7255 Shelby Rapids Apt. 455\nKarenland, AK 30299
2    Sean Boyd III      791 Crist Parks\nGreenton, TX 59715
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การทำให้ข้อมูลเป็นนามธรรม

# Original data
df_employees.head()
     first name   last name    age   ssn
0    Amber        Brown        91    798-29-4785
1    William      Gibson       34    431-66-8381
2    Daniel       Lee          92    825-91-5550
3    Andrea       Stevenson    64    188-59-3544
4    Julie        Horn         35    020-60-6388
# Generalized data: Age in intervals and masked SSN
generalized_df.head()
    First name    Last name    Age        SSN
0    Amber        Brown        (80, 99]    798-**-****
1    William      Gibson       (30, 50]    431-**-****
2    Daniel       Lee          (80, 99]    825-**-****
3    Andrea       Stevenson    (60, 80]    188-**-****
4    Julie        Horn         (30, 50]    020-**-****

ผู้ที่มีอายุ 34 ปีจะถูกจัดอยู่ในช่วง 30 ถึง 50 ซึ่งเรียกอีกชื่อว่าการทำ binning

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

การรวมข้อมูล

ภาพแสดงรายชื่ออาชีพเฉพาะทางด้านซ้าย และหมวดหมู่ทั่วไปด้านขวา

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

ชุดข้อมูลทางการแพทย์

# Explore the dataset
df_medical.head()
    age    gender    department    condition
0    30    F         Finance       Anxiety disorders
1    42    M         Production    Bronchitis
2    35    F         Marketing     Dysthymia
3    39    F         Production    Dysthymia
4    40    M         Marketing     Flu
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

ชุดข้อมูลทางการแพทย์

# Explore the histogram of the age variable
df_medical['age'].hist(bins=15)

ฮิสโตแกรมของตัวแปรอายุจากชุดข้อมูล สร้างด้วยเมธอด hist

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

การทำให้เป็นนามธรรม

# Apply generalization by transforming to binary data
df_medical['age'] = df_medical['age'].apply(lambda x:">=40" if x>=40 else "<40" )


# See results df_medical.head()
    age    gender    department    condition
0    <40   F         Finance       Bronchitis
1    >=40  M         Production    Bronquitis
2    <40   F         Finance       Dysthymia
3    <40   F         Production    Dysthymia
4    >=40  M         Marketing     Flu
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การกำหนดค่าสูงสุดและต่ำสุด

# Explore the histogram of the age variable
df_medical['age'].hist(bins=15)

ฮิสโตแกรมของตัวแปรอายุจากชุดข้อมูล สร้างด้วยเมธอด hist

  • มีผู้ที่อายุต่ำกว่า 25 ปีและอายุมากกว่า 55 ปีเพียงไม่กี่คน
  • กำหนดขอบเขตเพื่อลดความเสี่ยงในการระบุตัวตนของกลุ่มข้อมูลที่เป็น outlier
  • เหมาะที่สุดเมื่อมีจำนวนข้อมูลน้อยมากในหมวดหมู่นั้น โดยเฉพาะที่หางของการกระจาย
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การกำหนดค่าสูงสุด

# Filter to see rows affected
df_medical[df_medical['age'] >= 55]
      age   gender   department     condition
26    56    F        Production     Flu
65    55    M        Finance        Dysthymia
126   59    F        Production     Anxiety disorders
139   58    F        Finance        Dysthymia
142   59    M        Marketing      Flu
145   57    M        Marketing      Anxiety disorders
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การกำหนดค่าสูงสุด

# Top code the age to 55
df_medical.loc[df_medical['age'] > 55, 'age'] = 55


# Filter to see rows affected df_medical[df_medical['age'] >= 55]
      age   gender   department     condition
26    55    F        Production     Flu
65    55    M        Finance        Dysthymia
126   55    F        Production     Anxiety disorders
139   55    F        Finance        Dysthymia
142   55    M        Marketing      Flu
145   55    M        Marketing      Anxiety disorders
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

การกำหนดค่าต่ำสุด

# Explore the histogram of the age variable
df_medical['age'].hist(bins=15)

ฮิสโตแกรมของตัวแปรอายุหลังใช้ top coding สร้างด้วยเมธอด hist ไม่แสดง outlier ด้านขวาซึ่งสอดคล้องกับค่าสูงสุด

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

การกำหนดค่าต่ำสุด

# Bottom code the age to 25
df_medical.loc[df['age'] < 25, 'age'] = 25


# Explore the histogram of the age variable df_medical['age'].hist(bins=15)

ฮิสโตแกรมของตัวแปรอายุหลังใช้ top และ bottom coding สร้างด้วยเมธอด hist ไม่แสดง outlier

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

การทำให้ข้อมูลเป็นนามธรรมและ privacy model

ใช้ร่วมกับ Suppression และ Masking ภายใต้ Privacy Model เช่น K-anonymity จะได้ผลดียิ่งขึ้น

ระบุเงื่อนไขที่ชุดข้อมูลต้องปฏิบัติตามเพื่อควบคุมความเสี่ยงในการเปิดเผยข้อมูล

บทถัดไปจะเรียนรู้วิธีนำ privacy model นี้ไปใช้งาน!

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

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

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

Preparing Video For Download...