什么是汇总键、它们在 Attribution Reporting API 中的使用方式,以及您如何将目标转换为键。
作为一家广告技术公司,您在多个地理位置投放了面向不同产品类别的广告系列,希望帮助广告客户解答以下问题:
- 针对各个产品类别,我在各个地理区域的每个广告系列分别带来了多少次购买?
- 我在各个地理区域中的每个产品类别分别带来了多少收入?
虽然许多广告技术公司都鼓励广告客户配置各种转化类型,但关注最重要的转化(例如购买)是确保针对这些重要事件获得详细而准确的摘要结果的好方法。
因此,在收集数据之前,您需要思考要回答哪些问题。
维度、键和值
为了回答这些问题,我们来看看维度、键和值。
维度
如上所述,为了了解您的广告系列是如何创收的,您需要跟踪以下维度:
- 广告系列 ID:特定广告系列的标识符。
- 地理位置 ID:广告投放的地理区域。
- 产品类别:您定义的产品类型。
虽然在投放广告时“广告系列 ID”和“地理位置 ID”维度(广告投放时间)是已知的,但在用户完成转化(转化时间)时,可以通过触发器事件得知产品类别。
对于此示例,您要跟踪的维度如下图所示:
什么是汇总键(分桶)?
字词汇总键和存储分区是指同一概念。汇总键用于配置报告的浏览器 API。存储桶一词在可汇总报告和摘要报告以及汇总服务 API 中均有使用。
汇总键(简称键)是一段数据,表示所跟踪的维度的值。系统稍后会按每个汇总键汇总数据。
例如,假设您要跟踪“产品类别”“地理位置 ID”和“广告系列 ID”维度。
如果位于地理位置 ID 7 的用户看到广告系列 ID 12 的广告,并稍后通过购买产品类别 25 中的产品完成转化,那么您可以设置如下图所示的汇总键:
您稍后会看到,在实践中汇总键并不完全像这样,但现在,我们先来重点了解一下键中包含的信息。
什么是可汇总值?
为了回答您对我们所述维度的疑问,您需要了解以下内容:
- 购买次数(购买次数)。汇总后并在摘要报告中显示时,这将是购买次数总计(摘要值)。
- 每笔购买交易的收入(购买交易金额)。汇总并显示在摘要报告中后,这就是总收入(汇总值)。
这两项(一次转化的购买次数和一次转化的购买价值)都是可汇总的值。您可以将可聚合的值视为衡量目标的值。
问题 | 可汇总的值 = 效果衡量目标 |
---|---|
有多少购买... | 购买次数 |
需要多少收入... | 购买价值 |
如果位于地理位置 ID 7 的用户看到广告系列 ID 12 的广告,并在稍后通过以 120 美元(假设您的货币为美元)购买了产品类别 25 的产品实现转化,您可以设置如下所示的汇总键和可汇总值:
系统会针对许多用户按键对可汇总的值进行求和,从而以摘要报告中的汇总值形式生成汇总的数据分析。
系统会对可汇总的值进行求和,以便针对您的衡量目标生成汇总数据洞见。
请注意,此图省略了解密步骤,仅展示了一个未应用噪声的简化示例。在下一部分中,我们将通过噪声对此示例进行概述。
从键值对到报告
现在,我们来讨论可汇总键和值与报告之间的关系。
可汇总的报告
当用户点击或查看广告后发生转化时,您可以指示浏览器存储 {汇总键、可汇总值} 对。
在我们的示例中,当用户点击或查看广告并在稍后完成转化时,您指示浏览器生成两次贡献(每个衡量目标一次)。
稍后,您会发现 {aggregate key, aggregatable value} 可汇总的报告与本示例并不完全相同,但现在我们先重点了解一下该报告中包含的信息。
当您指示浏览器生成两个贡献时,浏览器会生成可汇总的报告(如果它可以将转化与之前的浏览或点击匹配)。
可汇总报告包含:
- 您配置的贡献。
- 与点击或浏览事件和转化事件相关的元数据:转化发生的网站等。查看可汇总报告中的所有字段。
可汇总的报告采用 JSON 格式,其中包括一个将用作最终摘要报告的数据输入的载荷字段。
该载荷包含贡献列表,其中每个贡献都是一个 {aggregation key, aggregatable value} 对:
bucket
:汇总键,编码为字节串。value
:该衡量目标的可汇总值,编码为字节串。
示例如下:
{
"data": [
{
"bucket": "111001001",
"value": "11111010000",
}
],
"operation": "histogram"
}
在实践中,可汇总的报告的编码方式会使存储分区和值看起来与上例不同(即存储分区可能看起来像 \u0000\u0000\x80\u0000
)。存储分区和值都是字节字符串。
摘要报告
可汇总报告会跨多个浏览器和设备(用户)进行汇总,如下所示:
- 广告技术平台请求针对一组给定键生成摘要报告,以及一组来自许多不同浏览器(用户)的可汇总报告。
- 可汇总的报告由汇总服务解密。
- 对于每个键,系统会对可汇总报告中的可汇总值进行求和。
- 汇总值中会添加噪声。
生成包含一组 {aggregation key, summary value} 对的摘要报告。
摘要报告包含一组 JSON 字典样式的键值对。每个键值对均包含:
bucket
:汇总键,编码为字节串。value
:指定衡量目标的十进制摘要值,根据所有可用的可汇总报告计算得出,并添加了噪声。
示例:
[
{"bucket": "111001001", "value": "2558500"},
{"bucket": "111101001", "value": "3256211"},
{...}
]
实际上,摘要报告的编码方式会使存储分区和值看起来与示例中说明的不同(即,存储分区可能看起来像 \u0000\u0000\x80\u0000
)。Bucket 和 value 都是字节串。
聚合键的实际应用
汇总键(存储分区)由广告技术公司定义,通常分为两个步骤:在用户点击或查看广告时,以及当用户完成转化时。
键结构
我们将使用术语“键结构”来指定编码到键中的一组维度。
例如,广告系列 ID × 地理 ID × 产品类别就是一个关键结构。
密钥类型
系统会对多个用户/浏览器中给定键的汇总值进行求和。不过我们发现,可汇总的值可以跟踪不同的衡量目标,例如购买价值或购买次数。您希望确保汇总服务会对同一类型的可汇总值求和。
为此,请在每个键中编码一段数据,以指明汇总值代表什么(即此键所引用的衡量目标)。为此,您可以为键创建一个额外的维度,用于表示衡量目标类型。
在前面的示例中,此衡量目标类型将具有两个不同的可能值:
- 购买次数是第一种衡量目标。
- 购买价值是第二种衡量目标。
如果您有 n 个衡量目标,那么衡量目标类型将有 n 个不同类型的值。
您可以将键的维度视为一种指标。例如,“每个地理位置每个广告系列对特定产品的购买次数”。
键大小、维度大小
密钥大小上限以位定义,即用于创建完整密钥的二进制零和一的数量。该 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 位。衡量目标是购买次数或购买金额,这意味着有两个不同的可能性;因此,只需 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"))
- 源端键部分
- 与浏览器一样,也可将这些键部分用于生成浏览器之前生成的相同密钥。
- 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) | 附加了零的十六进制哈希,以简化或运算。这是来源端键部分。 |
---|---|---|---|
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) / 1500)= 32768/1500 = 21.8 ~ 22
由于您决定对每次广告点击或观看(来源事件)最多跟踪一次购买,因此购买次数的调整系数为 32,768/1 = 32,768。
现在,您可以设置以下值:
key_purchaseCount
:1 × 32768 = 32768key_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.