概要:Cost ETL是AppsFlyer在ROI360中提供的一个功能,可帮助广告主获取投放成本的深度数据,其颗粒度是渠道侧可用范围内最细的。该数据每天更新4次,写入您的AWS S3或GCS存储桶中,以备BI入库。
Cost ETL的作用原理
投放成本数据:
- 写入您的数据存储桶,以便您对成本数据进行查看、传输、入库。
- 数据每天写四次(即后文中所说的“数据时效性:一日多次”)。
- 涵盖当天和前6天(即本文中所说的“最近7天”),以及第14天、29天、88天的数据。数据回滚是为了对上报的成本数据进行更新和校准。
- 适用于匹配到归因(转化)、点击或展示的成本。
注意:- 最近7天的数据是取自渠道的最新数据,而第14/29/88天的数据则是经过重新处理得到的。
- 数据的回滚更新仅针对成本,不涵盖归因数据。
Cost ETL的数据一定具备以下两种主要维度:
- 地理位置:按国家细分
- 流量入口:即媒体渠道的流量入口,如YouTube是Google的一个流量入口。
您可以根据实际需求自行调整报告所含的其他维度和指标。
查看示例文件。请注意:示例文件是Excel格式的,而发送到存储桶的Cost ETL文件是parquet格式的。
使用方式
报告维度
- Cost ETL中的报告覆盖所有应用,并可细分到天或更新批次。
- 每次写入存储桶中的数据(每天4次)涵盖所有的可用数据,包括历史数据、更新,以及对前6天和第14/29/88天数据的校正。在数据入库时需要注意这一点。
- 报告结构详见文件字段表。总体如下:
- 总结报告的数据颗粒度较粗,便于理解。
- 维度报告中的所有数据都一定具备某个主要维度。也就是说,报告所含的所有媒体渠道都提供该维度的数据。反之,如果某个渠道不提供这个主要维度的数据,那么报告中就不会包含该数据。此外,维度报告还包含所有可用的次要维度数据,但不保证所有数据都具有次要维度。
- 可用的主要维度(一定具备)如下:
- 地理位置:按国家分组的数据
- 流量入口:即媒体渠道的流量入口,如YouTube是Google的一个流量入口,Instagram是Meta ads的一个流量入口。
- 建议选择最适合您业务需求的维度和指标,具体的最优解视渠道而定。
目录与文件名结构
- 本节说明了Cost ETL数据写入存储桶时所使用的目录和文件结构。请参考示例文件。注意:示例文件是Excel格式的,而发送到存储桶的Cost ETL文件是parquet格式的。
- Cost ETL在目录中写入数据后,会有一个成功创建文件的标记,并总是带有该目录中最近的一个时间戳。
- 每次写入的数据包含当天和前7天(即最近7天)的数据,以及第14、29、88天的数据。
- 文件夹/文件数量的规则如下:
- 总结报告:每天4个文件夹,每个文件夹为一个批次。
- 每个批次的文件夹内包含最近7天数据的parquet文件。
- 维度报告:每个主要维度下每天有4个批次的文件夹。
- 每个批次的文件夹内包含的parquet文件以数字命名(从1开始)。
- 总结报告:每天4个文件夹,每个文件夹为一个批次。
目录结构示例
目录结构
/<advertiser bucket name>/cost_etl/version/dt=<yyyy-mm-dd>/b=<n>/
<dimension>/<file name>
目录结构
组成部分 |
内容 |
---|---|
advertiser_bucket_name |
在Cost ETL配置中设定的存储桶名称:af-xpend-cost-etl-<af-account-id>-[您的存储桶名称后缀] |
cost_etl | 总是为“cost_etl”不变 |
version | Cost ETL的版本 |
date |
成本数据的日期 格式:yyyy-mm-dd |
batch | 以数字1-4命名 |
dimension |
数据维度:
|
file | 以从00001开始的数字命名 |
文件名结构
part-<number>
示例
对于2020年6月23日中首次拉取的数据,其目录及文件名结构如下:
/bucket-name/cost_etl/v1/dt=2020-06-23/b=1/geo/part-00001
文件字段
字段/维度
字段 |
说明 |
是否默认填充 |
格式 |
是否包含在 |
---|---|---|---|---|
date |
由渠道上报的成本发生日期 |
是 |
格式为yyyy-mm-dd的字符串 |
✓ |
app_id |
AppsFlyer后台的应用ID |
是 |
字符串 |
✓ |
media_source |
展示广告的媒体渠道 |
是 |
字符串 |
✓ |
OS |
指设备操作系统。可能出现的值为:
|
是 |
字符串 |
- |
agency |
投放广告的代理商 |
否 |
字符串 |
- |
campaign |
广告投放中的一个层级 |
否 |
字符串 |
- |
campaign_id |
广告投放中的一个层级 |
否 |
字符串 |
- |
adset |
广告投放中的一个层级 |
否 |
字符串 |
- |
adset_id |
广告投放中的一个层级 |
否 |
字符串 |
- |
ad |
广告投放中的一个层级 |
否 |
字符串 |
- |
ad_id |
广告投放中的一个层级 |
否 |
字符串 |
- |
ad_account |
|
否 |
字符串 |
- |
currency |
广告消耗的货币单位,即您在AppsFlyer后台的应用配置中设定的货币单位。 |
是 |
ISO-4217中的3字母字符串 |
✓ |
original_currency |
由广告平台上报的成本货币(未换算) |
是 |
ISO-4217中的3字母字符串 |
- |
timezone |
|
是 |
字符串 |
- |
geo(地理位置) |
广告层级中的维度 |
否 |
ISO 3166中的2字母字符串 |
✓ |
channel(流量入口) |
广告层级中的维度 |
否 |
字符串 |
- |
keyword_term |
用户在线搜索时使用的字词。 |
是 |
字符串 |
- |
keyword_id |
ASA关键词ID |
是 |
字符串 |
- |
site_id |
子渠道ID |
否 |
字符串 |
- |
campaign_objective |
广告系列属性的一部分。详情请见此文档。 |
否 |
字符串 |
- |
cost_model |
广告系列属性的一部分。详情请见此文档。 |
否 |
字符串 |
- |
af_cost_model |
由AppsFlyer对成本模型进行映射和归一。该字段是广告系列属性的一部分,详情请见此文档。 |
否 |
字符串 |
- |
bid_strategy |
广告系列属性的一部分。详情请见此文档。 |
否 |
字符串 |
- |
af_bid_strategy |
由AppsFlyer对竞价策略进行映射并归一。该字段是广告系列属性的一部分,详情请见此文档。 |
否 |
字符串 |
- |
bid_amount |
广告系列属性的一部分。详情请见此文档。 |
否 |
整数 |
- |
original_bid_amount |
广告系列属性的一部分。详情请见此文档。 |
否 |
整数 |
- |
指标
字段 |
说明 |
是否默认填充 |
格式 |
是否包含在 |
---|---|---|---|---|
impressions |
|
是 如果某个指标没有可用值,则以0填充。 |
整数 |
✓ |
clicks |
|
整数 |
✓ |
|
reported_impressions |
由渠道统计 |
整数 |
✓ |
|
reported_clicks |
由渠道统计 |
整数 |
✓ |
|
installs |
由AppsFlyer统计 |
整数 |
✓ |
|
reported_conversions |
由渠道统计 |
整数 |
|
|
re_engagements |
由AppsFlyer统计 |
整数 |
✓ |
|
re_attributions |
由AppsFlyer统计 |
整数 |
✓ |
|
cost |
广告消耗金额(包括相关的代理费用) |
值 |
✓ |
|
original_cost |
由广告平台上报的成本数据,以广告平台设定的货币为单位(未经换算),加上由AppsFlyer计算的相关代理费用(若有) |
值 |
- |
|
impressions_discrepancy |
|
整数 |
- |
|
clicks_discrepancy |
|
整数 |
- |
|
installs_discrepancy |
|
整数 |
- |
|
fees |
在广告成本以外,代理商额外收取的费用。 |
是 |
整数 |
- |
cost_without_fees |
成本减去代理费用。由AppsFlyer计算。 |
是 |
整数 |
- |
original_cost_without_fees |
广告平台上报的原始成本数据,不含代理费用 |
是 |
整数 |
- |
ctr |
由AppsFlyer统计的点击率。 |
否 |
整数 |
- |
cvr |
由AppsFlyer统计的转化率。 |
整数 |
- |
|
ecpm |
由AppsFlyer统计 |
整数 |
- |
|
cpi |
由AppsFlyer统计 |
整数 |
- |
|
ccvr |
转换成本 |
整数 |
- |
|
cvvr |
由AppsFlyer统计的视频完播率 |
整数 |
- |
|
reported_cvr |
广告平台上报的转化率 |
整数 |
- |
|
ecpc |
由AppsFlyer统计 |
整数 |
- |
|
video_25p_views |
由广告平台上报的25%完播率 |
整数 |
- |
|
video_50p_views |
由广告平台上报的50%完播率 |
整数 |
- |
|
video_75p_views |
由广告平台上报的75%完播率 |
整数 |
- |
|
video_completions |
由广告平台上报 |
整数 |
- |
设置用于AWS S3的Cost ETL
您需要具备管理员权限才能够完成以下配置操作。
前期准备 :
- 启用Cost ETL时,您需要设置AWS存储桶(并为AppsFlyer开放数据写入权限),并在AppsFlyer后台完成Cost ETL配置。
- 您需要同时具有AWS管理员权限以及AppsFlyer后台的权限才能完成Cost ETL的设置。
- 在设置期间请不要关闭AWS和AppsFlyer的页面。
- 请注意:AppsFlyer不支持KMS存储桶加密。
请按以下步骤设置AWS存储桶及Cost ETL:
- 登录AWS后台。
- 进入S3服务。
-
请按以下步骤创建存储桶:
- 点击Create bucket。
- 请按以下方式为存储桶命名:先填写必须包含的固定前缀
af-xpend-cost-etl-acc-<af-account-id>-
,然后再添加自定义的后缀。- 您可以按照下文的第7-9步在AppsFlyer面板中找到您的
af-account-id
。 - 详情请见Amazon S3命名要求。
- 您可以按照下文的第7-9步在AppsFlyer面板中找到您的
- 点击Create bucket。
- 从AppsFlyer后台进入ROI360 > Cost ETL。
- 启用Cost ETL。
- 在报告时间中选择您想要接收第一份报告的时间,之后的报告会每隔6小时写入存储桶。
- 进入Amazon S3设置部分。
- 从下拉菜单中选择您的S3存储桶地区。
如果菜单中未显示您的地区,请联系您的CSM。 - 输入您的Amazon S3存储桶名称。
- 点击下一步。
界面显示存储桶策略代码片段。
- 将存储桶策略代码片段复制粘贴到您的AWS设置中。
- 在AWS后台选择您针对Cost ETL创建的存储桶。
- 进入Permission选项卡。
- 在Bucket policy部分,点击Edit。
- 界面显示存储桶策略窗口。
- 将存储桶策略代码片段粘贴到该窗口中。
- 在AppsFlyer后台的Cost ETL设置部分,点击下一步。
界面显示验证存储桶部分。 - 点击验证。
查看界面是否显示验证成功。 - 点击下一步。
- 选择一个、多个或所有应用。若点击全选,则Cost ETL会自动包含您目前和后续添加的应用。
- 点击生效。
- 选择至少一个必备维度:流量入口和/或地理位置。
- 选择至少一个其他维度。
- 选择您想在报告中查看的指标,至少需选择一个。
- 点击生效。
设置用于GCS的Cost ETL
您需要具备管理员权限才能够完成以下配置操作。
前期准备 :
- 启用Cost ETL时,您需要设置GCS存储桶(并为AppsFlyer开放数据写入权限),并在AppsFlyer后台完成Cost ETL配置。
- 您需要同时具有GCS管理员权限以及AppsFlyer后台的权限才能完成Cost ETL的设置。
- 在设置期间请不要关闭GCS和AppsFlyer的页面。
请按以下步骤设置GCS存储桶及Cost ETL:
- 登录GCS后台。
- 创建一个存储桶。
按以下方式为该存储桶命名:- 先填写必须包含的固定前缀
af-xpend-cost-etl-acc-<af-account-id>-
,然后再添加自定义的后缀。 - 您可以按照下文的第6-8步在AppsFlyer面板中找到您的
af-account-id
。 - 详情请见GCS存储桶命名要求。
- 先填写必须包含的固定前缀
- 从AppsFlyer后台进入ROI360 > Cost ETL。
- 启用Cost ETL。
- 在报告时间中选择您想要接收第一份报告的时间,之后的报告会每隔6小时写入存储桶。
- 进入Data destination,选择。
- 输入您的GCS存储桶名称。
- 点击下一步。
界面会显示AppsFlyer服务账户,用于设置GCS权限。 - 在GCS后台设置存储桶的IAM权限:
-
将AppsFlyer服务账户添加为Cost ETL存储桶的主账户。
- 指定Storage Object Admin(存储对象管理员)角色。
-
- 在AppsFlyer后台的Cost ETL设置部分,点击下一步。
界面显示验证存储桶部分。 - 点击验证。
查看界面是否显示验证成功。 - 点击下一步。
- 选择一个、多个或所有应用。若点击全选,则Cost ETL会自动包含您目前和后续添加的应用。
- 点击生效。
- 选择至少一个必备维度:流量入口和/或地理位置。
- 选择至少一个其他维度。
- 选择您想在报告中查看的指标,至少需选择一个。
- 点击生效。
AWS对象的归属
AppsFlyer将数据写入您的存储桶时,AWS平台默认该数据的所有者是AppsFlyer。您可能需要将默认归属权改为存储桶所有者(即您自己),具体取决于您的数据入库流程。
请按以下步骤更改存储桶中数据的归属权:
-
登录AWS Management Console,打开Amazon S3后台,地址为https://console.aws.amazon.com/s3/。
-
在Bucket列表中,选择存储桶名称,以启用S3 Object Ownership(对象所有权)。
-
进入Permissions选项卡。
-
点击Object Ownership下的Edit。
-
选择Bucket owner preferred。
-
点击保存。
最佳实践
数据覆盖
在拉取和分析数据时,建议您拉取某个日期和批次的数据,或用当前批次的数据覆盖之前收到的同一时段的数据,否则可能会出现重复数据。
例如,在2月20日写入的第1批数据中包含2月14-20日的数据,但在2月19日写入的各批数据中也包含2月14-20日的数据。这种情况下,建议用最近收到的(即2月20日)数据覆盖掉之前收到的(即2月19日)数据。
地理位置与流量入口
不是所有的广告平台都会同时提供所有维度的数据,最常见的例子就是Meta ads的地理位置和流量入口数据。因此,我们将这两个维度的数据分为两个数据集。地理位置的数据集必定包含地理位置数据,而流量入口的数据集则必定包含流量入口数据。
在很多情况下,对大多数媒体渠道来说,地理位置和流量入口数据集中的额数据是一样的。因此,您可以根据您的业务需求选用最合适的数据集(地理位置或流量入口)。
如果某个渠道的对接协议中不包含流量入口上报,则流量入口字段为空,AF仍将其视为包含流量入口的数据。
汇总数据
Cost ETL提供的数据灵活详细,是广告平台侧可用范围内最深入的数据。建议您通过最适合自己业务需求的方式对数据进行汇总,否则数据量过于庞大,难以汲取真正有决策价值的洞察。例如,如果您想要了解广告系列和国家层级的成本数据,可以仅拉取这些维度来的数据。
广告平台数据的标准化
各广告平台支持的数据颗粒度不尽相同。比如Meta ads不提供子渠道层级的成本数据,而Twitter不提供地理位置层级的成本数据。在对Cost ETL数据进行汇总时,需注意这方面的差别,确保您在对比各渠道时使用的数据具有可比性。
数据对比分析
Cost ETL提供的信息涵盖您所有的成本数据。Cost ETL中有时会出现AF面板上没有的广告系列数据,比如空耗的广告系列(即未带来激活的广告系列)产生的成本数据。如需对比数据,请在数据总览面板中找出具体的广告系列ID,然后将其面板数据与Cost ETL中的成本数据进行对比。详情请见成本数据可用性。