Privacy Sandbox on Android 开发者预览版现已推出!了解如何开始使用,并继续提供反馈

使用 Measurement Simulation Library 测试数据

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

在技术栈中实现 Attribution Reporting API 时,了解归因数据在集成后的呈现方式非常重要。借助 Measurement Simulation Library,您可以使用简化的模拟环境尽早衡量 Attribution Reporting API 的影响,而不必等到集成完成后才开始测试。

Measurement Simulation Library 可通过呈现历史数据(就像通过 Attribution Reporting API 收集这些数据)让您了解集成的影响。这样,您就可以将历史转化数据与 Measurement Simulation Library 结果进行比较,以观察报告准确性的变化。您还可以使用 Measurement Simulation Library 尝试使用不同的汇总键结构和批处理策略进行测试,并根据 Measurement Simulation Library 报告训练优化模型,以便将预期效果与基于当前数据的模型进行比较。

为了充分测试 Attribution Reporting API 的隐私和安全保障,广告技术合作伙伴可以对模拟测量数据运行事件级报告和可汇总报告,以评估 Attribution Reporting API 将如何呈现测量数据、隐私保护效果以及这些数据与报告和模型的契合度。

您可以利用 Measurement Simulation Library 测试以下内容:

  • 汇总键
  • 汇总期
  • 事件报告的报告期
  • 事件报告中的转化元数据
  • 转化率限制、点击级和用户级限制
  • 噪声等级和阈值

进行 Measurement Simulation Library 测试时,请注意以下重要概念,例如季节性因素如何影响汇总键和批处理策略、如何向客户传达不同的噪声测量结果以及您允许多大程度的自定义。通过使用 Attribution Reporting API 的不同功能进行测试,可以在推出集成时交付可能的最佳结果。

运作方式

Measurement Simulation Library 会将广告技术平台的历史数据集作为单个离线批次,在本地机器上运行模拟。它会根据 user_id 字段(代表不同的用户)划分数据,然后并行模拟每个用户的客户端行为。

Measurement Simulation Library 可以为每个用户生成事件报告,并将这些报告写入输出目录中。此外,还会为每个用户生成可汇总报告,然后将这些报告组合为每日批次,并发送给汇总服务数据平面的本地实例,再由该实例生成摘要报告。

批处理策略:Measurement Simulation Library 会为每个广告客户提供一个默认的每日批处理策略,但由广告技术平台决定如何批处理这些报告。广告技术平台可以提供自己的报告批处理方法,并在 Measurement Simulation Library 中使用。

测试功能:Measurement Simulation Library 数据将作为明文处理。使用 Measurement Simulation Library 时,系统不会强制执行隐私预算,因此广告技术平台可以对同一数据集多次运行该库。广告技术平台可能会调整事件 API 和汇总 API 的隐私参数。

设置

Measurement Simulation Library 是一个精简的独立库,可以安装到本地机器上。该库不依赖于 Android 平台,不依赖任何数据库来存储和处理数据,也不依赖任何数据加密和解密。该库在您的机器上运行汇总服务的本地实例,不需要开设 AWS 帐号。

如需查看安装说明,请访问 GitHub 上的 Measurement Simulation Library 自述文件

数据结构和处理

Measurement Simulation Library 会使用 Apache Beam 读取输入数据(来源和触发器数据以及用于执行汇总的元数据),处理按“用户 ID”分组的数据,然后并行为每个用户 ID 调用一个归因报告模拟算法。为每个用户创建事件报告和可汇总报告后,Beam 库会将可汇总报告集合起来分组为每日批次,然后将这些批次发送到本地汇总服务。

Measurement Simulation Library 支持 JSON 格式的输入数据和事件报告输出。汇总报告同时支持 JSON 和 Avro 格式。一个用户 ID 的所有事件报告都会以 output_directory/<user_id>/event_reports.json 的形式写入单个 JSON 文件。

安全性和隐私权注意事项

在设计解决方案的安全和隐私保护功能时,请考虑以下几点:

  • Measurement Simulation Library 使用与 Attribution Reporting API 相同的噪声测量机制。
  • 出于测试目的,所有数据都以明文形式处理。
  • Measurement Simulation Library 不依赖于 Android 和云服务提供商的安全隔区,这意味着您可以在自己的基础架构上端到端地运行该库,而不需要将任何底层数据发送到组织之外。
  • 此工具可让广告技术平台灵活地调整隐私参数,以了解隐私保护功能如何影响输出报告。

输入参数

下面所示的示例输入来源和触发器数据展示了 Measurement Simulation Library 所使用的信息类型。所有其他数据都将保持不变,也不会进行处理。该库需要广告技术平台在相同输入文件中同时提供来源和触发器信息以及与汇总相关的元数据。

示例来源数据:

{
  "user_id":"U1",
  "source_event_id":1,
  "source_type":"EVENT",
  "publisher":"https://www.example1.com/s1",
  "web_destination":"https://www.example2.com/d1",
  "enrollment_id":"https://www.example3.com/r1",
  "event_time":1642218050000,
  "expiry":1647645724,
  "priority":100,
  "registrant":"https://www.example3.com/e1",
  "dedup_keys":[],
  "install_attribution_window":100,
  "post_install_exclusivity_window":101,
  "filter_data":{
    "type":["1", "2", "3", "4"],
    "ctid":["id"]
  },
  "aggregation_keys":[
    {
      "id":"myId",
      "key_piece":"0xFFFFFFFFFFFFFF"
    }
  ]
}
{
  "user_id":"U1",
  "source_event_id":2,
  "source_type":"EVENT",
  "publisher":"https://www.example1.com/s2",
  "web_destination":"https://www.example2.com/d2",
  "enrollment_id":"https://www.example3.com/r1",
  "event_time":1642235602000,
  "expiry":1647645724,
  "priority":100,
  "registrant":"https://www.example3.com/e1",
  "dedup_keys":[],
  "install_attribution_window":100,
  "post_install_exclusivity_window":101,
  "filter_data":{
    "type":["7", "8", "9", "10"],
    "ctid":["id"]
  },
  "aggregation_keys":[
    {
      "id":"campaignCounts",
      "key_piece":"0x159"
    },
    {
      "id":"geoValue",
      "key_piece":"0x5"
    }
  ]
}
{
  "user_id":"U2",
  "source_event_id":3,
  "source_type":"NAVIGATION",
  "publisher":"https://www.example1.com/s3",
  "web_destination":"https://www.example2.com/d3",
  "enrollment_id":"https://www.example3.com/r1",
  "event_time":1642249235000,
  "expiry":1647645724,
  "priority":100,
  "registrant":"https://www.example3.com/e1",
  "dedup_keys":[],
  "install_attribution_window":100,
  "post_install_exclusivity_window":101,
  "filter_data":{
    "type":["1", "2", "3", "4"],
    "ctid":["id"]
  },
  "aggregation_keys":[
    {
      "id":"myId3",
      "key_piece":"0xFFFFFFFFFFFFFFFFFFFFFF"
    }
  ]
}

示例触发器数据:

{
  "user_id":"U1",
  "attribution_destination":"https://www.example2.com/d1",
  "destination_type":"WEB",
  "enrollment_id":"https://www.example3.com/r1",
  "trigger_time":1642271444000,
  "event_trigger_data":[
    {
      "trigger_data":1000,
      "priority":100,
      "deduplication_key":1
    }
  ],
  "registrant":"http://example1.com/4",
  "aggregatable_trigger_data":[
    {
      "key_piece":"0x400",
      "Source_keys":["campaignCounts"],
      "filters":{
        "Key_1":["value_1", "value_2"],
        "Key_2":["value_1", "value_2"]
      }
    }
  ],
  "aggregatable_values":{
    "campaignCounts":32768,
    "geoValue":1664
  },
  "filters":"{\"key_1\": [\"value_1\", \"value_2\"], \"key_2\": [\"value_1\", \"value_2\"]}"
}{
  "user_id":"U1",
  "attribution_destination":"https://www.example2.com/d3",
  "destination_type":"WEB",
  "enrollment_id":"https://www.example3.com/r1",
  "trigger_time":1642273950000,
  "event_trigger_data":[
    {
      "trigger_data":1000,
      "priority":100,
      "deduplication_key":1
    }
  ],
  "registrant":"http://example1.com/4",
  "aggregatable_trigger_data":[
    {
      "key_piece":"0x400",
      "source_keys":[
        "campaignCounts"
      ],
      "not_filters":{
        "Key_1x":["value_1", "value_2"],
        "Key_2x":["value_1", "value_2"]
      }
    }
  ],
  "aggregatable_values":{
    "campaignCounts":32768,
    "geoValue":1664
  },
  "filters":"{\"key_1\": [\"value_1\", \"value_2\"], \"key_2\": [\"value_1\", \"value_2\"]}"
}{
  "user_id":"U2",
  "attribution_destination":"https://www.example2.com/d3",
  "destination_type":"WEB",
  "enrollment_id":"https://www.example3.com/r1",
  "trigger_time":1642288930000,
  "event_trigger_data":[
    {
      "trigger_data":1000,
      "priority":100,
      "deduplication_key":1
    }
  ],
  "registrant":"http://example1.com/4",
  "aggregatable_trigger_data":[
    {
      "key_piece":"0x400",
      "source_keys":[
        "campaignCounts"
      ],
      "filters":{
        "Key_1":["value_1", "value_2"],
        "Key_2":["value_1", "value_2"]
      }
    }
  ],
  "aggregatable_values":{
    "campaignCounts":32768,
    "geoValue":1664
  },
  "filters":"{\"key_1\": [\"value_1\", \"value_2\"], \"key_2\": [\"value_1\", \"value_2\"]}"
}

客户端行为

Measurement Simulation Library 会镜像 Privacy Sandbox 的 Attribution Reporting API 逻辑,并使用相同的隐私参数来生成客户端输出。

汇总 API 行为

Measurement Simulation Library 会运行实际汇总服务的本地实例 (LocalRunner),该实例可处理未加密的可汇总报告,并允许广告技术平台无限使用隐私预算。

客户端输出

客户端的事件级报告格式:Measurement Simulation Library 以与 Privacy Sandbox 生产报告相同的 JSON 格式生成事件报告:

{
  "Attribution_destination": String,
  "Source_event_id": long,
  "Trigger_data": long,
  "Report_id": String,
  "source_type": "EVENT/NAVIGATION",
  "randomized_trigger_rate": double,
}

在将此输出发送到测试服务器之前,开发者是否需要以任何方式对其进行转换或净化?

客户端会为每个 user_id 生成一系列可汇总报告,然后将这些报告汇总为 Measurement Simulation Library 中的一个扁平列表。广告技术平台可以提供自己的批处理策略来生成不同的可汇总报告批次,每个批次都将由汇总服务独立处理。

为帮助广告技术平台,Measurement Simulation Library 提供了一个每日批处理策略作为默认策略来生成这些批次。

服务器端输出

服务器端的汇总报告格式

由于您在本地运行实际的汇总服务器,输出汇总报告将遵循以下 Avro 格式:

{
  "type":"record",
  "name":"AggregatedFact",
  "fields":[
    {
      "name":"bucket",
      "type":"bytes",
      "doc":"Histogram bucket used in aggregation. 128-bit integer encoded as a 16-byte big-endian bytestring. Leading 0-bits will be left out."
    },
    {
      "name":"metric",
      "type":"long",
      "doc":"Metric associated with the bucket"
    }
  ]
}

如需以 JSON 格式输出报告,请在该库的 config/AggregationArgs.properties 文件中设置 jsonOutput 属性。

开发者如何解读结果?

结果是 <bucket, metric> 的列表,其中 bucket 是一个 128 位的键,而 metric 是对应的 bucket 值。

测试

您应先了解 Attribution Reporting API 对解决方案的影响,然后再完成 Privacy Sandbox 集成。使用 Measurement Simulation Library 进行测试时,需要注意以下几点:

  • 是否存在需要开发者使用 Measurement Simulation Library 进行尝试的特定用例或测量工作流程?
  • 将历史转化数据与 Measurement Simulation Library 结果进行比较,以了解对报告准确性的影响。
  • 尝试使用不同的汇总键结构和批处理策略进行测试。
  • 根据 Measurement Simulation Library 报告训练优化模型,以便将预期效果与基于当前数据的模型进行比较。
  • 思考季节性因素。您是否需要根据转化的淡旺季调整汇总键和批处理策略?
  • 思考一下您打算如何将不同的噪声测量结果传达给客户,以及您可以允许多大程度的自定义。
  • 思考一下您打算如何将事件级报告和汇总报告结合使用。

反馈

如果您在使用 Measurement Simulation Library 方面有任何反馈,请告诉我们