什么是汇总键,它们在 Attribution Reporting API 中有何用途,以及如何将目标转化为键。
作为一家广告技术公司,您在多个地区针对各种产品类别投放广告系列,希望帮助广告客户解答以下问题:
- 我的每个广告系列在每个地理区域促成了每个商品类别的多少次购买?
- 我的每个广告系列在每个地理区域中为每个商品类别带来了多少收入?
虽然许多广告技术公司都鼓励广告客户配置各种类型的转化,但专注于最重要的转化(例如购买)是验证这些重要事件的摘要结果是否详细准确的好方法。
为此,您需要先考虑在收集数据之前要回答哪些问题。
维度、键和值
为了回答这些问题,我们先来看看维度、键和值。
维度
如本文所述,若要了解广告系列如何创收,您需要跟踪以下维度:
- 广告系列 ID:特定广告系列的标识符。
- 地理位置 ID:广告投放到的地理区域。
- 商品类别:您定义的商品类型。
虽然广告投放时(广告投放时间)已知广告系列 ID 和地理位置 ID 维度,但商品类别将通过触发事件在用户完成转化时(转化时间)获知。
在此示例中,您要跟踪的维度如下图所示:
什么是汇总键(存储分区)?
“词条汇总键”和“分桶”是指同一事物。汇总键用于配置报告的浏览器 API 中。可汇总报告、摘要报告和汇总服务 API 中都使用了“分桶”一词。
汇总键(简称“键”)是一段数据,用于表示所跟踪维度的值。随后,系统会根据每个汇总键汇总数据。
例如,假设您要跟踪“产品类别”“地理位置 ID”和“广告系列 ID”这几个维度。
如果位于地理位置 ID 为 7 的用户看到广告系列 ID 为 12 的广告,随后购买了商品类别 25 中的商品并完成转化,您可以设置如下所示的汇总键:
转化对应的汇总键。您稍后会看到,在实践中,汇总键并不完全是这样,但现在我们先重点关注键中包含的信息。
什么是可汇总的值?
为了回答您针对上述维度提出的问题,您需要了解:
- 购买次数(购买计数)。汇总并显示在摘要报告中后,此值将成为总购买次数(汇总值)。
- 每笔购买交易的收入(购买价值)。汇总并显示在摘要报告中后,该值将成为总收入(摘要值)。
其中,一次转化的购买次数和一次转化的购买价值都是可汇总的值。您可以将可汇总的值视为效果衡量目标的值。
| 问题 | 可汇总的值 = 效果衡量目标 |
|---|---|
| 购买次数… | 购买次数 |
| 收入… | 购买价值 |
如果位于地理位置 ID 为 7 的用户看到广告系列 ID 为 12 的广告,随后购买了商品类目 25 的商品(假设您的币种为美元),并完成了价值 120 美元的转化,您可以设置如下所示的汇总键和可汇总的值:
可汇总的值会按键在许多用户之间求和,以生成汇总的分析洞见,并以摘要报告中的摘要值形式呈现。
可汇总的值会相加,从而为您的衡量目标生成汇总的数据洞见。
请注意,此图省略了解密步骤,并展示了一个未应用噪声的简化示例。在下一部分中,我们将概述这个包含噪声的示例。
从键值对到报告
现在,我们来讨论一下可汇总的键和值与报告之间的关系。
可汇总的报告
当用户点击或查看广告并在稍后发生转化时,您会指示浏览器存储一个 {aggregation key, aggregatable value} 对。
在我们的示例中,当用户点击或查看广告并随后完成转化时,您会指示浏览器生成两项贡献(每个衡量目标一项)。
您稍后会看到,{汇总键,可汇总值} 可汇总报告并不完全像这样,但现在我们先重点关注报告中包含的信息。
当您指示浏览器生成两个贡献时,浏览器会生成可汇总的报告(如果它可以将转化与之前的浏览或点击匹配)。
可汇总报告包含以下信息:
- 您已配置的贡献。
- 有关点击或浏览事件以及转化事件的元数据:发生转化的网站等。查看可汇总报告中的所有字段。
可汇总的报告采用 JSON 格式,除其他内容外,还包含一个载荷字段,该字段将用作最终摘要报告的数据输入。
载荷包含一个贡献列表,每个贡献都是一个 {aggregation key, aggregatable value} 对:
bucket:以字节串形式编码的汇总密钥。value:相应衡量目标的汇总值,以字节串形式编码。
示例如下:
{
"data": [
{
"bucket": "111001001",
"value": "11111010000",
}
],
"operation": "histogram"
}
在实践中,可汇总报告的编码方式会使范围和值看起来与上一个示例不同(也就是说,范围可能看起来像 \u0000\u0000\x80\u0000)。范围和值均为字节串。
摘要报告
可汇总报告会汇总许多浏览器和设备(用户)的数据,具体如下:
- 广告技术平台会针对一组给定的键以及一组来自许多不同浏览器(用户)的可汇总报告请求摘要报告。
- 可汇总报告由汇总服务解密。
- 对于每个键,可汇总报告中的可汇总值会相加。
- 向汇总值添加噪声。
结果是一份摘要报告,其中包含一组 {汇总键、汇总值} 对。
摘要报告包含一组 JSON 字典样式的键值对。每个键值对包含:
bucket:以字节串形式编码的汇总密钥。value:给定衡量目标的汇总值(以十进制表示),由所有可汇总的报告汇总而成,并添加了噪声。
示例:
[
{"bucket": "111001001", "value": "2558500"},
{"bucket": "111101001", "value": "3256211"},
{...}
]
实际上,摘要报告的编码方式会使桶和值看起来与示例中所示的不同(也就是说,桶可能看起来像 \u0000\u0000\x80\u0000)。桶和值均为字节串。
实际应用中的汇总键
汇总键(存储分区)由广告技术公司定义,通常分为两个步骤:当广告被点击或观看时,以及当用户发生转化时。
关键结构
我们将使用术语“键结构”来指代编码到键中的维度集。
例如,广告系列 ID × 地理位置 ID × 商品类别就是一个关键结构。
密钥类型
对于给定的键,可汇总的值会在多个用户/浏览器之间求和。不过,我们发现可汇总的值可以跟踪不同的衡量目标,例如购买价值或购买次数。您需要验证聚合服务是否会汇总同一类型的可汇总值。
为此,您可以在每个键中编码一段数据,用于说明汇总值所代表的含义,即相应键所指的衡量目标。一种方法是为您的键创建一个表示衡量目标类型的额外维度。
沿用之前的示例,此衡量目标类型将有两个不同的可能值:
- 购买次数是第一种衡量目标。
- 购买价值是第二种衡量目标。
如果您有 n 个效果衡量目标,则效果衡量目标类型将有 n 种不同的值。
您可以将密钥的维度视为指标。例如,“每个广告系列在每个地理位置的特定商品购买次数”。
密钥大小、维度大小
密钥大小上限以位为单位定义,即创建完整密钥所需的二进制 0 和 1 的数量。该 API 允许密钥长度为 128 位。
这种大小可实现非常精细的键,但更精细的键更有可能导致更多噪声值。如需详细了解噪声,请参阅了解噪声。
如前所述,维度会编码到聚合键中。每个维度都有一定的基数,即维度可以采用的不同值的数量。每个维度都需要用一定数量的位来表示,具体取决于其基数。使用 n 位可以表示 2n 个不同的选项。
例如,“国家/地区”维度的基数可能是 200,因为世界上大约有 200 个国家/地区。需要多少位来编码此维度?
7 位只能存储 27 = 128 个不同的选项,这少于所需的 200 个。
8 位可以存储 28 = 256 个不同的选项,这超过了所需的 200 个,因此您可以使用 n=8 位来编码此维度。
密钥编码
在浏览器中设置密钥时,应以十六进制格式进行编码。在摘要报告中,键将以二进制形式显示(并命名为“分桶”)。
为完整密钥设置两个密钥片段
假设您使用一个键来跟踪以下维度:
- 广告系列 ID
- 地理位置 ID
- 产品类别
虽然广告投放时(广告投放时间)已知广告系列 ID 和地理位置 ID 维度,但商品类别将从触发事件中得知,即用户完成转化时(转化时间)。
实际上,这意味着您将分两步设置密钥:
- 您将在点击或观看时设置密钥的一部分,即“广告系列 ID × 地理位置 ID”。
- 您将在转化时设置密钥的第二部分(商品类别)。
密钥的这些不同部分称为密钥片段。
密钥是通过对其密钥片段进行 OR 运算 (v) 计算得出的。
示例:
- 来源端密钥片段 =
0x159 - 触发器端键部分 =
0x400 - 键 =
0x159 v 0x400 = 0x559
对齐关键部分
如果使用精心放置的 64 位填充符或偏移量(十六个零)将两个 64 位密钥片段扩展为 128 位,则对密钥片段进行 OR 运算相当于将它们串联起来,这样更易于推理和验证:
- 来源端密钥片段 =
0xa7e297e7c8c8d0540000000000000000 - 触发器端键部分 =
0x0000000000000000674fbe308a597271 - 键 =
0xa7e297e7c8c8d0540000000000000000 v 0x0000000000000000674fbe308a597271 = 0xa7e297e7c8c8d054674fbe308a597271
每次广告点击或观看可对应多个键
实际上,您可以为每个归因来源事件(广告点击或观看)设置多个键。例如,您可以设置:
- 用于跟踪地理位置 ID × 广告系列 ID 的键。
- 用于跟踪“广告素材类型”ד广告系列 ID”的另一个键。
如需查看其他示例,请参阅策略 B。
将维度编码为键
请求摘要报告时,您需要通过为一组特定的汇总键请求摘要报告,告知汇总服务您要访问哪些指标。
摘要报告包含原始的 {key, summary value} 对,不包含有关键的其他信息。这意味着:
- 当用户在查看或点击广告后发生转化时,您需要根据键所代表的维度值可靠地设置键。
- 在定义要请求摘要报告的键时,您需要根据要查看汇总数据的维度的值,可靠地生成或即时访问与用户查看或点击广告并完成转化时设置的键相同的键。
使用键结构映射对维度进行编码
如需将维度编码到键中,您可以在定义键时(在广告投放之前)提前创建并维护键结构映射。
键结构映射表示每个维度及其在键中的位置。
实际上,创建和维护关键结构映射意味着您必须实现并维护解码器逻辑。如果您正在寻找一种无需执行此操作的方法,不妨考虑改用基于哈希的方法。
示例如下:
假设您计划跟踪特定广告系列、地理区域和商品的购买次数和购买价值。
商品类别、地理位置 ID 和广告系列 ID 需要作为键中的维度。此外,由于您要跟踪两个不同的衡量目标(购买次数和购买价值),因此需要在键中添加一个跟踪键类型的维度。这样,您就可以在收到汇总报告中的 {key, aggregatable value} 对时,定义可汇总值实际代表的含义。
有了这些衡量目标,您的密钥将具有以下维度:
- 产品类别
- 衡量目标类型
- 地理位置 ID
- 广告系列 ID
现在,我们来看一下每个维度,假设您的用例需要跟踪以下内容:
- 29 个不同的商品类别。
- 8 个不同的地理区域:北美洲、中美洲、南美洲、欧洲、非洲、亚洲、加勒比海地区和大洋洲。
- 16 个不同的广告系列。
以下是您需要用于对键中的每个维度进行编码的位数:
- 商品类别:5 位(25 = 32 > 29)。
- 评测目标类型:1 位。衡量目标是购买次数或购买价值,这意味着有两种不同的可能性;因此,一个位足以存储此信息。
地理位置 ID:3 位(23 = 8)。您还需要为地理位置 ID 定义维度映射,以便了解每个二元值代表哪个地理区域。地理位置 ID 维度的维度映射可能如下所示:
键中的二进制值 地理位置 000 北美洲 001 中美洲 010 南美洲 011 欧洲 100 非洲 101 亚洲 110 加勒比人 111 大洋洲 广告系列 ID:4 位(24 = 16)
遵循此结构的密钥长度为 13 位(5 + 1 + 3 + 4)。
在此示例中,这些键的键结构映射将如下所示:
您可以自行决定键中各维度的顺序。
为了说明维度如何构成键结构,我们将使用二进制表示法,因此广告系列 ID(前几位)位于最右侧,而产品类别(后几位)位于最左侧。
在每个维度中,最高有效位(即具有最大数值的位)是最左侧的位。最低有效位(即数值最小的位)是最右侧的位。
我们来看看如何使用密钥结构映射来解码密钥。
我们以 0b1100100111100 为例,假设您知道此密钥遵循上图中的密钥结构映射。
根据密钥结构图,此密钥将解码为:
`11001 0 011 1100`
因此,键 0b1100100111100 表示在欧洲推出的广告系列 ID 为 12 的商品类别 25 的购买次数。
使用哈希函数对维度进行编码
您可以使用哈希函数以一致可靠的方式动态生成密钥,而不是使用密钥结构映射。
具体运作方式如下:
- 选择一种哈希算法。
- 在广告投放时,生成一个包含您要跟踪的所有维度及其值的字符串。若要生成来源端密钥片段,请对该字符串进行哈希处理,并考虑添加 64 位零后缀,以便与触发端密钥片段对齐,并更轻松地推理 OR。
- 来源端密钥片段
=<64-bit hex hash("COUNT, campaignID=12, geoID=7"))><64-bit 00000000…> - 请注意,在键结构映射方法中,
COUNT与measurementGoalType=0编码的内容相同。COUNT更加精简和明确。
- 来源端密钥片段
- 在转化时,生成一个包含您要跟踪的所有维度及其值的字符串。如需生成触发器端密钥片段,请对该字符串进行哈希处理,并添加一个 64 位零前缀:
- 触发器端密钥部分
=
<64-bit 00000000…><64-bit hex hash("productCategory=25")>
- 触发器端密钥部分
=
- 浏览器会对这些密钥片段进行 OR 运算,以生成密钥。
- 128 位汇总密钥
=<64-bit hex source-side key piece hash><64-bit hex source-side key piece hash>
- 128 位汇总密钥
- 稍后,当您准备好为此密钥请求摘要报告时,可以即时生成该报告:
- 根据您感兴趣的维度,生成源端和触发端密钥片段,就像您之前所做的那样。
- 来源端密钥片段
=<64-bit hex hash("COUNT, campaignID=12, geoID=7"))><64-bit 00000000…> - 触发器端密钥片段
=<64-bit 00000000…><64-bit hex hash("productCategory=25")> - 触发器端密钥部分 =
toHex(hash("productCategory=25"))
- 来源端密钥片段
- 与浏览器一样,对这些密钥片段进行 OR 运算,以生成与浏览器之前生成的密钥相同的密钥。
- 128 位汇总密钥
=<64-bit source-side key piece hash><64-bit source-side key piece hash>
- 128 位汇总密钥
- 根据您感兴趣的维度,生成源端和触发端密钥片段,就像您之前所做的那样。
如果您使用这种基于哈希的方法,请参考以下几点实用提示:
- 始终使用相同的维度顺序。这样可以确保您的哈希能够可靠地重新生成。(
"COUNT, CampaignID=12, GeoID=7"不会生成与"COUNT, GeoID=7, CampaignID=12"相同的哈希值)。实现此目的的一种简单方法是对维度进行字母数字排序。这正是我们将在示例中执行的操作,只不过我们会始终将COUNT或VALUE作为维度的第一个项,这是为了提高可读性,因为COUNT或VALUE编码的信息在概念上与其他所有维度略有不同。 - 跟踪您在键中使用的维度集。您希望避免根据一组从未使用的维度生成键。
- 如果使用合适的哈希函数,哈希冲突很少发生,但检查之前使用的哈希(应存储这些哈希以解读汇总服务的结果)可以避免引入与旧密钥冲突的新密钥。
如需了解如何在实践中使用基于哈希的密钥,请参阅每次点击或每次浏览带来一次转化的示例。
可汇总的值的实际应用
广告技术公司会在用户转化时设置可汇总的值。
为了保护用户隐私,每位用户的贡献都有上限。与单个来源(广告点击或观看)相关联的所有可汇总的值都不得高于某个贡献限值。
我们将此限制称为 CONTRIBUTION_BUDGET。在说明中,此限制称为 L1 预算,但它与 CONTRIBUTION_BUDGET 相同。
如需深入了解贡献率预算,请参阅摘要报告的贡献率预算。
示例:每次点击或观看一次转化
在此示例中,我们假设您希望回答以下问题:
- 哪些产品类别在每个地区最有价值?
- 哪些广告系列策略在各个地区最为有效?
我们还假设,在您的使用场景中,您需要每周获取数据洞见。
您还需要跟踪以下内容:
- 16 个不同的广告系列。
- 8 个不同的地理区域:北美洲、中美洲、南美洲、欧洲、非洲、亚洲、加勒比海地区和大洋洲。
- 29 个不同的产品类别。
衡量的指标
虽然许多广告技术公司鼓励广告客户配置各种类型的转化,但重点关注购买等最重要的转化,有助于验证这些重要转化事件的汇总结果是否详细准确。 事实上,您衡量的指标越多,每个指标的贡献预算就越少,因此每个值可能就越嘈杂。因此,您需要仔细选择要衡量的指标。
在此示例中,我们将重点介绍每次点击或浏览仅衡量一次转化的广告系列设置:购买。
您仍然可以衡量购买次数和购买价值,并访问各种重要的汇总统计信息,例如总购买价值和地理位置细分数据。 这样可以有效管理噪声,同时为贡献预算提供简单的缩放方法。
币种呢?
在不同地区投放广告系列意味着应考虑货币因素。 您可以执行以下操作:
- 将币种作为汇总键中的专用维度。
- 或者,根据广告系列 ID 推断币种,并将所有币种都换算为参考币种。
在此示例中,我们假设您可以从广告系列 ID 推断出币种。这样,您就可以将任何给定的购买价值从用户的本地货币转换为您选择的参考货币。您也可以在用户购买商品时即时执行该转换。
借助此技术,所有可汇总的值都采用相同的参考币种,因此可以求和以生成总汇总购买价值(即汇总购买价值)。
将目标转化为键
确定衡量目标和指标后,您就可以选择多种关键策略。我们重点介绍以下两种策略:
- 策略 A:一种精细的密钥结构。
- 策略 B:两个粗略的密钥结构。
策略 A:一棵深度树(一个精细的关键字结构)
在策略 A 中,您使用一个精细的键结构,其中包含所需的所有维度:
您的所有密钥都使用此结构。
您将此键结构拆分为两种键类型,以支持两个衡量目标。
- 键类型 0:衡量目标类型 = 0,您决定将其定义为购买次数。
- 关键类型 1:衡量目标类型 = 1,您决定将其定义为购买价值。
摘要报告如下所示:
您可以将策略 A 视为“一层树”策略:
- 摘要报告中的每个汇总值都与您跟踪的所有维度相关联。
- 您可以将这些汇总值与每个维度一起汇总,因此这些汇总可以深入到您拥有的维度数量。
如果采用策略 A,您会按如下方式回答问题:
| 问题 | 答案 |
|---|---|
| 哪些产品类别在每个地区最有价值? | 汇总所有广告系列中摘要报告内的购买次数和价值。 这样一来,您就可以获得每个地理位置 ID × 商品类别的购买次数和价值。 针对每个地区,比较不同产品类别的购买价值和数量。 |
| 哪些广告系列策略在各个地区最为有效? | 汇总所有商品类别的摘要报告中的摘要购买次数和价值。 此查询可为您提供每个“广告系列 ID”ד地理位置 ID”的购买次数和价值。 针对每个区域,比较不同广告系列的购买价值和购买次数。 |
借助策略 A,您还可以直接回答第三个问题:
“我的每个广告系列在每个地理区域为每种产品带来了多少收入?”
即使汇总值存在噪声,您也可以确定每个广告系列之间所衡量值的差异何时并非仅由噪声引起。如需了解如何实现此目的,请参阅了解噪声。
策略 B:两个浅树(两个粗略的键结构)
在策略 B 中,您使用两个粗略的键结构,每个结构都包含所需维度的一个子集:
您将每个关键结构拆分为两种关键类型,以支持两个效果衡量目标。
- 将衡量目标类型设为 0,并决定将其定义为购买次数。
- 衡量目标类型 = 1,您决定将其定义为购买价值。
最终会得到四种密钥类型:
- 密钥类型 I-0:密钥结构 I,购买次数。
- 键类型 I-1:键结构 I,购买价值。
- 密钥类型 II-0:密钥结构 II,购买次数。
- 密钥类型 II-1:密钥结构 II,购买价值。
摘要报告如下所示:
您可以将策略 B 视为“两个浅树”策略:
- 摘要报告中的摘要值会映射到两个小型维度集中的一个。
- 您可以汇总这些汇总值以及这些组中的每个维度,这意味着这些汇总不如选项 A 中的汇总深入,因为可用于汇总的维度较少。
如果采用策略 B,您会按如下方式回答问题:
| 问题 | 答案 |
|---|---|
| 哪些产品类别在每个地区最有价值? | 直接访问摘要报告中的购买次数和价值摘要。 |
| 哪些广告系列策略在各个地区最为有效? | 直接访问摘要报告中的购买次数和价值摘要。 |
决策:策略 A
策略 A 更简单;所有数据都遵循相同的键结构,这也意味着您只需维护一个键结构。
不过,如果采用策略 A,您需要将摘要报告中收到的汇总值相加,才能回答某些问题。每个汇总值都包含噪声。通过对这些数据求和,您还可以对噪声求和。
但策略 B 并非如此,因为摘要报告中显示的汇总值已为您提供所需的信息。这意味着,与策略 A 相比,策略 B 受噪声的影响可能较小。
您应如何确定使用哪种策略?对于现有广告客户或广告系列,您可能需要依靠历史数据来确定转化量更适合采用策略 A 还是策略 B。不过,对于新广告客户或新广告系列,您可以选择:
- 使用精细的键收集一个月的数据(策略 A)。 由于您延长了数据收集时长,因此汇总值会更高,而噪声会相对较低。
- 以合理的准确度评估每周转化次数和购买价值。
在此示例中,我们假设每周购买次数和购买价值足够高,以至于策略 A 产生的噪声百分比在您的使用场景中是可以接受的。
由于策略 A 更简单,并且产生的噪声影响不会影响您的决策能力,因此您决定采用策略 A。
选择一种哈希算法
您决定采用基于哈希的方法来生成密钥。为此,您需要选择一种支持该方法的哈希算法。
假设您已选择 SHA-256。您也可以使用安全性较低的简单算法,例如 MD5。
在浏览器中:设置键和值
现在,您已确定了键结构和哈希算法,接下来就可以在用户点击或查看广告并随后完成转化时注册键和值了。
下面简要介绍了您将设置的用于在浏览器中注册键和值的标头:
设置来源端关键片段
当用户点击或查看广告时,在 Attribution-Reporting-Register-Aggregatable-Source 标头中设置汇总键。
在此阶段,对于每个密钥,您只能设置在广告投放时已知的密钥部分(即密钥片段)。
我们来生成关键片段:
| 密钥 ID 为…的来源端密钥片段 | 包含要设置的维度值的字符串 | 此字符串的哈希值(十六进制),截取为前 64 位(64/4 = 16 个字符1) | 附加了零的十六进制哈希,用于简化 OR 运算。这是来源端密钥的一部分。 |
|---|---|---|---|
key_purchaseCount |
COUNT, CampaignID=12, GeoID=7 |
0x3cf867903fbb73ec | 0x3cf867903fbb73ec0000000000000000 |
key_purchaseValue |
VALUE, CampaignID=12, GeoID=7 |
0x245265f432f16e73 | 0x245265f432f16e730000000000000000 |
现在,我们来设置关键部分:
// Upon receiving the request from the publisher site
res.set(
"Attribution-Reporting-Register-Aggregatable-Source",
JSON.stringify([
{
"id": "key_purchaseCount",
"key_piece": "0x3cf867903fbb73ec0000000000000000"
},
{
"id": "key_purchaseValue",
"key_piece": "0x245265f432f16e730000000000000000"
}
])
);
请注意,关键 ID 将不会显示在最终报告中。它们仅在浏览器中设置密钥时使用,以便将来源端和触发器端密钥片段相互映射并组合成完整的密钥。
可选:事件级报告
如果您需要同时使用事件级报告和可汇总报告,请验证对于给定的来源,事件级数据(来源事件 ID 和触发器数据)和汇总键是否可以匹配。
例如,如果您计划使用事件级报告来运行模型,以确定哪种类型的广告最有可能促成购买,则可以同时使用这两种报告。
用户完成转化
当用户完成转化时,系统通常会向广告技术平台服务器发送像素请求。收到此要求后:
- 设置转化端(触发端)密钥片段以完成密钥。
您将使用标头
Attribution-Reporting-Register-Aggregatable-Trigger-Data设置这些关键部分。 - 使用标头
Attribution-Reporting-Register-Aggregatable-Values为相应转化设置可汇总的值。
设置触发器端键片段以完成键
我们来生成关键片段:
| 密钥 ID 为…的触发器端密钥部分 | 包含要设置的维度值的字符串 | 此字符串的哈希值(十六进制),截取为前 64 位(64/4 = 16 个字符1) | 附加了零的十六进制哈希,用于简化 OR 运算。这是来源端密钥的一部分。 |
|---|---|---|---|
key_purchaseCount |
ProductCategory=25 |
0x1c7ce88c4904bbe2 | 0x0000000000000000f9e491fe37e55a0c |
key_purchaseValue |
(相同) | (相同) | (相同) |
现在,我们来设置关键部分:
// Upon receiving the pixel request from the advertiser site
res.set(
"Attribution-Reporting-Register-Aggregatable-Trigger-Data",
JSON.stringify([
// Each dictionary independently adds pieces to multiple source keys
{
"key_piece": "0x0000000000000000f9e491fe37e55a0c",
"source_keys": ["key_purchaseCount", "key_purchaseValue"]
},
])
);
请注意,您可以通过在 source_keys 中列出多个密钥 ID,将同一密钥片段添加到多个密钥中。
设置可汇总的值
在设置可汇总的值之前,您需要先按比例放大这些值,以减少噪声。
假设有人以 52 美元的价格购买了商品类型 25。
您不会直接将这些值设置为可汇总的值:
key_purchaseCount:1 次转化key_purchaseValue:52 美元
因此,在注册这些可汇总的值之前,您需要对它们进行缩放,以最大限度地减少噪声。
您有两个目标需要使用贡献预算来实现,因此您可能决定将贡献预算拆分为两部分。
在这种情况下,每个目标的分配上限为 CONTRIBUTION_BUDGET/2(=65,536/2=32,768)。
假设根据网站所有用户的购买历史记录,单个用户的最大购买价值为 1,500 美元。可能会存在一些离群值,例如极少数用户花费的金额超过了该总和,但您可以选择忽略这些离群值。
购买价值的缩放比例应为:
((CONTRIBUTION_BUDGET/2) / 1,500) = 32,768/1,500 = 21.8 ≈ 22
由于您决定为每次广告点击或观看(来源事件)最多跟踪一次购买,因此购买次数的缩放比例为 32,768/1 = 32,768。
您现在可以设置以下值:
key_purchaseCount:1 × 32,768 = 32,768key_purchaseValue:52 × 22 = 1,144
在实践中,您可以使用专用标头 Attribution-Reporting-Register-Aggregatable-Values 按如下方式设置它们:
// Instruct the browser to schedule-send a report
res.set(
"Attribution-Reporting-Register-Aggregatable-Values",
JSON.stringify({
"key_purchaseCount": 32768,
"key_purchaseValue": 1144,
})
);
生成可汇总报告
浏览器将转化与之前的浏览或点击相匹配,并生成可汇总报告,其中包含报告元数据旁边的加密载荷。
以下是可汇总报告的载荷中可能包含的数据示例(如果以明文形式读取):
[
{
key: 0x3cf867903fbb73ecf9e491fe37e55a0c, // = source-side key piece OR conversion-side key piece for the key key_purchaseCount
value: 32768 // the scaled value for 1 conversion, in the context of [CONTRIBUTION_BUDGET/2]
},
{
key: 0x245265f432f16e73f9e491fe37e55a0c, // source-side key piece OR conversion-side key piece for the key key_purchaseValue
value: 1144 // the scaled value for $52, in the context of [CONTRIBUTION_BUDGET/2]
},
]
在此示例中,您可以在一个可汇总的报告中看到两项单独的贡献。
请求摘要报告
- 批量处理可汇总报告。请遵循批处理中提供的建议。
- 生成您想查看数据的密钥。例如,如需查看广告系列 ID 为 12、地理位置 ID 为 7、产品类别为 25 的
COUNT(购买总次数)和VALUE(购买总价值)的汇总数据,请执行以下操作:
| 您要请求的指标1 | 来源端密钥片段 | 触发器端键片段 | 向汇总服务发出请求的密钥2 |
|---|---|---|---|
总购买次数(COUNT) |
0x3cf867903fbb73ec 0000000000000000 |
0x00000000000000 00f9e491fe37e55a0c |
0x3cf867903fbb73 ecf9e491fe37e55a0c |
总购买价值(VALUE) |
0x245265f432f16e73 0000000000000000 |
0x0000000000000000 f9e491fe37e55a0c |
0x245265f432f16e73 f9e491fe37e55a0c |
- 针对这些密钥向汇总服务请求摘要数据。
处理摘要报告
最终,您会收到一份摘要报告,其内容可能如下所示:
[
{"bucket": "00111100111110000110011110010000001111111011101101110011111011001111100111100100100100011111111000110111111001010101101000001100",
"value": "2558500"},
{"bucket": "00100100010100100110010111110100001100101111000101101110011100111111100111100100100100011111111000110111111001010101101000001100",
"value": "687060"},
…
]
第一个分桶是 COUNT 的二进制键。第二个分桶是二进制格式的 VALUE 键。请注意,虽然键是异构的(COUNT 与 VALUE),但它们包含在同一报告中。
缩小值
- 2,558,500 是指相应键的购买次数,按您之前计算的缩放比例系数进行放大。购买次数的缩放比例为 32,768。将 2,558,500 除以目标的贡献预算:2,558,500/32,768 = 156.15 次购买。
- 687,060 → 687,060/22 = 31,230 美元总购买价值。
因此,摘要报告可为您提供以下数据洞见:
- Within the reporting time period, campaign #12
run in Europe drove about 156 purchases (± noise)
for the product category #25
```
```text
- Within the reporting time period, campaign #12
run in Europe drove $31,230 of purchases (± noise)
for the product category #25.