Cost ETL——投放成本深度数据“桶”统解决

概要:Cost ETL是AppsFlyer在ROI360中提供的一个功能,可帮助广告主获取投放成本的深度数据,其颗粒度是渠道侧可用范围内最细的。该数据每天更新4次,写入您的AWS S3或GCS存储桶中,以备BI入库。

5896_CostETL_graphic__2_.png

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开始)。

目录结构示例

cost_etl_structure_4.jpg

目录结构

/<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

数据维度:

  • geo(地理位置)
  • channel(流量入口)
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

指设备操作系统。可能出现的值为:

  • Android
  • Windows Phone
  • iOS

字符串

-

agency

投放广告的代理商

字符串

-

campaign

广告投放中的一个层级

字符串

-

campaign_id

广告投放中的一个层级

字符串

-

adset

广告投放中的一个层级

字符串

-

adset_id

广告投放中的一个层级

字符串

-

ad

广告投放中的一个层级

字符串

-

ad_id

广告投放中的一个层级

字符串

ad_account

  • 提供成本数据的广告账户
  • 适用于通过oAuth(使用证书登录)实现连接的广告平台,如Google或Meta ads

字符串

-

currency

广告消耗的货币单位,即您在AppsFlyer后台的应用配置中设定的货币单位。

ISO-4217中的3字母字符串

original_currency

由广告平台上报的成本货币(未换算)

ISO-4217中的3字母字符串

-

timezone

  • AppsFlyer储存数据时用到的时区
  • 广告平台用来上报数据的时区可能与AppsFlyer后台配置的时区不同。这是AppsFlyer与广告平台之间出现数据差异的原因之一。

字符串

-

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

  • 由AppsFlyer统计。
  • 同时包含UA和再营销数据。

如果某个指标没有可用值,则以0填充。

整数

clicks

  • 由AppsFlyer统计。
  • 同时包含UA和再营销数据。

整数

reported_impressions

由渠道统计

整数

reported_clicks

由渠道统计

整数

installs

由AppsFlyer统计

整数

reported_conversions

由渠道统计

整数

 

re_engagements

由AppsFlyer统计

整数

re_attributions

由AppsFlyer统计

整数

cost

广告消耗金额(包括相关的代理费用)

original_cost

由广告平台上报的成本数据,以广告平台设定的货币为单位(未经换算),加上由AppsFlyer计算的相关代理费用(若有)

-

impressions_discrepancy

  • 广告平台和AppsFlyer之间的数据统计差异。
  • 如果出现以下情况,请忽略该指标:
整数

-

clicks_discrepancy

  • 广告平台和AppsFlyer之间的数据统计差异。
  • 如果出现以下情况,请忽略该指标:
整数

-

installs_discrepancy

  • 广告平台和AppsFlyer之间的数据统计差异。
  • 如果出现以下情况,请忽略该指标:
整数

-

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存储桶加密。

AppsFlyerAdmin_us-en.png 请按以下步骤设置AWS存储桶及Cost ETL:

  1. 登录AWS后台。
  2. 进入S3服务。
  3. 请按以下步骤创建存储桶
    1. 点击Create bucket
    2. 请按以下方式为存储桶命名:先填写必须包含的固定前缀af-xpend-cost-etl-acc-<af-account-id>-,然后再添加自定义的后缀。
      • 您可以按照下文的第7-9步在AppsFlyer面板中找到您的af-account-id
      • 详情请见Amazon S3命名要求
    3. 点击Create bucket
  4. 从AppsFlyer后台进入ROI360 > Cost ETL
  5. 启用Cost ETL
  6. 报告时间中选择您想要接收第一份报告的时间,之后的报告会每隔6小时写入存储桶。
  7. 进入Amazon S3设置部分。

  8. 从下拉菜单中选择您的S3存储桶地区。
    如果菜单中未显示您的地区,请联系您的CSM。
  9. 输入您的Amazon S3存储桶名称。
  10. 点击下一步
    界面显示存储桶策略代码片段。

  11. 将存储桶策略代码片段复制粘贴到您的AWS设置中。
    1. 在AWS后台选择您针对Cost ETL创建的存储桶。
    2. 进入Permission选项卡。
    3. Bucket policy部分,点击Edit
    4. 界面显示存储桶策略窗口。
    5. 将存储桶策略代码片段粘贴到该窗口中。
  12. 在AppsFlyer后台的Cost ETL设置部分,点击下一步
    界面显示验证存储桶部分。
  13. 点击验证
    查看界面是否显示验证成功
  14. 点击下一步
  15. 选择一个、多个或所有应用若点击全选,则Cost ETL会自动包含您目前和后续添加的应用。
  16. 点击生效
  17. 选择至少一个必备维度:流量入口和/或地理位置。
  18. 选择至少一个其他维度。

  19. 选择您想在报告中查看的指标,至少需选择一个。

  20. 点击生效

设置用于GCS的Cost ETL

您需要具备管理员权限才能够完成以下配置操作。

前期准备

  • 启用Cost ETL时,您需要设置GCS存储桶(并为AppsFlyer开放数据写入权限),并在AppsFlyer后台完成Cost ETL配置。
  • 您需要同时具有GCS管理员权限以及AppsFlyer后台的权限才能完成Cost ETL的设置。
  • 在设置期间请不要关闭GCS和AppsFlyer的页面。

AppsFlyerAdmin_us-en.png 请按以下步骤设置GCS存储桶及Cost ETL:

  1. 登录GCS后台。
  2. 创建一个存储桶。
    按以下方式为该存储桶命名:
    • 先填写必须包含的固定前缀af-xpend-cost-etl-acc-<af-account-id>-,然后再添加自定义的后缀。
    • 您可以按照下文的第6-8步在AppsFlyer面板中找到您的af-account-id
    • 详情请见GCS存储桶命名要求
  3. 从AppsFlyer后台进入ROI360 > Cost ETL
  4. 启用Cost ETL
  5. 报告时间中选择您想要接收第一份报告的时间,之后的报告会每隔6小时写入存储桶。
  6. 进入Data destination,选择
  7. 输入您的GCS存储桶名称。
  8. 点击下一步
    界面会显示AppsFlyer服务账户,用于设置GCS权限。
  9. 在GCS后台设置存储桶的IAM权限
    1. 将AppsFlyer服务账户添加为Cost ETL存储桶的主账户。

    2. 指定Storage Object Admin(存储对象管理员)角色。
  10. 在AppsFlyer后台的Cost ETL设置部分,点击下一步
    界面显示验证存储桶部分。
  11. 点击验证
    查看界面是否显示验证成功
  12. 点击下一步
  13. 选择一个、多个或所有应用若点击全选,则Cost ETL会自动包含您目前和后续添加的应用。
  14. 点击生效
  15. 选择至少一个必备维度:流量入口和/或地理位置。
  16. 选择至少一个其他维度。

  17. 选择您想在报告中查看的指标,至少需选择一个。

  18. 点击生效

AWS对象的归属

AppsFlyer将数据写入您的存储桶时,AWS平台默认该数据的所有者是AppsFlyer。您可能需要将默认归属权改为存储桶所有者(即您自己),具体取决于您的数据入库流程。

请按以下步骤更改存储桶中数据的归属权:

  1. 登录AWS Management Console,打开Amazon S3后台,地址为https://console.aws.amazon.com/s3/

  2. Bucket列表中,选择存储桶名称,以启用S3 Object Ownership(对象所有权)。

  3. 进入Permissions选项卡。

  4. 点击Object Ownership下的Edit

  5. 选择Bucket owner preferred

  6. 点击保存

最佳实践

数据覆盖

在拉取和分析数据时,建议您拉取某个日期和批次的数据,或用当前批次的数据覆盖之前收到的同一时段的数据,否则可能会出现重复数据

例如,在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中的成本数据进行对比。详情请见成本数据可用性

特点和局限性

特点 说明
时区

如果时区有所变更,则变更当天的成本数据会重复。详情请见此文档

数据时效性

一天多次。请注意:成本数据写入您的存储桶后,入库BI的数据量可大至数GB,小至数KB,具体取决于报告和parquet文件的大小。