泛化和分桶

泛化是一种获取可区分值并将其抽象为较普通、较不易区分的值的过程。泛化的目的是保留数据效用,同时降低数据的可标识性。

存在许多级别的泛化,具体取决于数据类型。您可以使用 Cloud Data Loss Prevention (DLP) 的风险分析方法中包含的技术,在数据集或实际人口中进行测量,了解需要什么级别的泛化。

Cloud DLP 支持的一种常见泛化技术是“分桶”。通过分桶,您可以将记录分组到较小的存储分区中,以尽量降低攻击者将敏感信息与标识性信息相关联的风险。这样做可以保留含义和效用,但也会模糊参与者太少的个体值。

分桶场景 1

请考虑此数值分桶场景:数据库存储用户满意度分数,范围从 0 到 100。该数据库如下所示:

user_id 得分
1 100
2 100
3 92
...

扫描数据后,您会发现某些值很少被用户使用。 事实上,有一些分数只映射到一个用户。例如,大多数用户选择 0、25、50、75 或 100。但是,有五个用户选择了 95,只有一个用户选择了 92。您可以将这些值泛化到多个组中,并消除任何参与者太少的组,而不是保留原始数据。以这种方式泛化数据有助于防止重标识,具体取决于数据的使用方式。

您可以选择移除这些离群数据行,也可以尝试使用分桶保留其效用。在此示例中,我们根据以下项对所有值进行分桶:

  • 0-25:“低”
  • 26-75:“中”
  • 76-100:“高”

Cloud DLP 中的分桶是可用于去标识化的多种初始转换之一。以下 JSON 配置说明了如何在 Cloud DLP API 中实现此分桶场景。此 JSON 可以包含在对 content.deidentify 方法的请求中:

...
{
  "primitiveTransformation":
  {
    "bucketingConfig":
    {
      "buckets":
      [
        {
          "min":
          {
            "integerValue": "0"
          },
          "max":
          {
            "integerValue": "25"
          },
          "replacementValue":
          {
            "stringValue": "Low"
          }
        },
        {
          "min":
          {
            "integerValue": "26"
          },
          "max":
          {
            "integerValue": "75"
          },
          "replacementValue":
          {
            "stringValue": "Medium"
          }
        },
        {
          "min":
          {
            "integerValue": "76"
          },
          "max":
          {
            "integerValue": "100"
          },
          "replacementValue":
          {
            "stringValue": "High"
          }
        }
      ]
    }
  }
}
...

分桶场景 2

分桶也可用于字符串或枚举值。假设您想要分享薪资数据并包含职位。但是,某些职位(如 CEO 或杰出工程师)可以与一个人或一小群人联系起来。这些职位很容易与拥有这些职位的员工匹配。

分桶也可以用于这种情况。不要包括确切的职位,而是对它们进行泛化和分桶。例如,将“高级工程师”、“初级工程师”和“杰出工程师”泛化和分桶为“工程师”。下表说明了如何将特定职位分桶到职位系列中。

说明职位分桶的图表

其他场景

在这些示例中,我们将对结构化数据应用转换。只要可以使用预定义或自定义的 infoType 对值进行分类,则分桶也可用于非结构化示例。以下是一些示例场景:

  • 对日期进行分类并将其按年份分桶
  • 对名称进行分类并根据首字母(A-M、N-Z)将其分桶到不同的组

资源

如需详细了解泛化和分桶,请参阅对文本内容中的敏感数据进行去标识化

如需 API 文档,请参阅: