这是定义了一个列表,设置了两个变量都为0,for循环的功能就是,随机从列表中选取一个值加上sum变量,如果此时sum大于等于max,则max等于sum的值,如果sum小于0,则sum等于0,所以max的值在列表中最大是多少
我们知道这些趋于唯一性的标识之后,就有一个问题,我们可以重新识别多少人?
使用辅助信息来找出答案!
首先,让我们看看出生日期会发生什么。
我们想知道数据集中的每个数据记录返回了多少个可能的标识。怎么做?上代码!
attack = pd.merge(adult_pii, adult_data, left_on=['DOB'], right_on=['DOB'])
attack['Name'].value_counts().hist();
结果表明,我们可以唯一地识别近7,000条数据记录(总数据量为32,000条数据记录),另外10,000条数据记录被缩小到两个可能的身份。
因此,仅使用出生日期就不可能重新识别大多数个体。如果我们收集更多信息,以进一步缩小范围,该怎么办?如果我们同时使用出生日期和ZIP,我们可以做得更好。
事实上,我们能够唯一地重新识别整个数据集。
attack = pd.merge(adult_pii, adult_data, left_on=['DOB', 'Zip'], right_on=['DOB', 'Zip'])
attack['Name'].value_counts().hist();
当我们使用这两条信息时,我们基本上可以重新识别每个人。这是一个令人惊讶的结果,因为我们通常假设许多人共享相同的生日,并且许多人居住在相同的邮政编码中。事实证明,这些因素的结合是极具选择性的。根据Latanya Sweeney的工作[1],87%的美国人可以通过出生日期,性别和邮政编码的组合来唯一地重新识别。
让我们检查一下,我们实际上已经重新识别了每个人,通过打印出每个身份的可能数据记录的数量,这里就看看前5条就可以了:
attack['Name'].value_counts().head()
前两行有问题!在数据集中,只有两个人共享邮政编码和出生日期的组合。