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

高阶付费

概要:AppsFlyer ROI360解决方案中的Cost ETL可为广告主提供最详细的分渠道投放成本。该工具以每天最多4次的频率更新相关数据,并将其写入您的AWS S3或GCS存储桶中,以备BI入库。

5896_CostETL_graphic__2_.png

Cost ETL的作用原理

投放成本数据:

  • 写入您的数据存储桶,以便您对成本数据进行查看、传输、入库。
  • 数据每天写四次(即后文中所说的“数据时效性:一日多次”)。
  • 涵盖当天和前6天(即本文中所说的“最近7天”),以及第14天、29天、88天的数据。 
    • 示例:假设当天日期为2024年10月14日,则文件覆盖以下几天的数据:10月14日(当天)、10月13日(1天前)、10月12日(2天前)、10月11日(3天前)、10月10日(4天前)、10月9日(5天前)、10月8日(6天前)、9月30日(14天前)、9月15日(29天前)以及7月18日(88天前)。
    • 数据回滚是为了对上报的成本数据进行更新和校准。
  • 适用于匹配到归因(转化)、点击或展示的成本。
    请注意
    • 最近7天的数据是取自渠道的最新数据,而第14/29/88天的数据则是经过重新处理得到的。
    • 数据的回滚更新仅针对成本,不涵盖归因数据。

Cost ETL的数据一定具备以下两种主要维度:

  • 国家/地区(Geo):按国家细分
  • 流量入口(Channel):即媒体渠道的流量入口,如YouTube是Google的一个流量入口。

您可以根据实际需求自行调整报告所含的其他维度和指标。

查看示例文件请注意:该示例文件为Excel格式,其中的数据按流量入口(Channel)分组;实际Cost ETL文件会以parquet格式写入您的存储桶。 

启用方式

报告维度

  • Cost ETL中的报告覆盖所有应用, 并可细分到天或更新批次。 
  • 每次写入存储桶中的数据(每天最多4次)涵盖所有的可用数据,包括历史数据、更新,以及对前6天和第14/29/88天数据的校正。在数据入库时需要注意这一点。 
  • 关于报告结构的详细说明请参见文件字段部分中的表格。报告结构分为以下几种:
    • 总结报告(summary report):数据颗粒度较粗(信息较简略),便于快速理解。
    • 维度报告(dimension report):至少有一个主要维度在所有数据中都可用。也就是说, 报告所含的 所有媒体渠道都提供 该维度的数据。反之,如果某个 渠道 不提供这个主要维度的数据,那么 报告中 就不会包含该数据。 此外, 维度报告还包含所有可用的次要维度数据,但不保证 次要维度 在所有数据中都可用。
    • 可用的主要维度(总是可用)如下:
      • 国家/地区(Geo):按国家分组的数据
      • 流量入口(Channel):即媒体渠道的流量入口,如YouTube是Google的一个流量入口,Instagram是Meta ads的一个流量入口。
    • 建议选择最适合您业务需求的维度和指标,具体的最优解视渠道而定。
    • 【封闭Beta】完全成本报告:按国家/地区维度分组,涵盖全平台的所有营销活动所产生的成本数据,包括未添加到AppsFlyer的应用/平台(这时应用ID会标记为“unknown”,即未知)。

目录与文件名结构

  • 本节说明了Cost ETL数据写入存储桶时所使用的目录和文件结构。查看示例文件。 请注意:该示例文件为Excel格式,其中的数据按流量入口(Channel)分组;实际Cost ETL文件会以parquet格式写入您的存储桶。
  • Cost ETL在某个目录中写入数据后,会创建一个名为success的文件,以标记数据写入成功,该文件总是带有该目录下最新的时间戳。
  • 每次写入的数据包含当天和前6天的数据(本文中称其为“最近7天的数据”),以及第14、29、88天的数据。
  • 文件夹/文件数量的规则如下:
    • 总结报告:每天4个文件夹,每个文件夹为一个批次。
      • 每个批次的文件夹内 包含 最近7天数据的parquet文件。
    • 维度报告:每个主要维度下每天有4个 批次 的文件夹。
      • 每个批次的文件夹内 包含的parquet文件 以数字命名(从1开始)。
    • 【封闭Beta】完全成本报告:以 国家/地区 维度为基础,每天有4个批次的文件夹。

目录结构示例

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

批次 以数字1-4命名
dimension

数据维度:

  • geo
  • channel
file_name
  • summary
  • all-cost
Parquet文件编号
  • 从00000开始编号
  • 示例:part-

文件名结构

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

Publisher 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

点击率。

整数

reported_conversions

由渠道统计

整数

 

re_engagements

点击率。

整数

re_attributions

点击率。

整数

cost

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

参数值

original_cost

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

参数值 

-

impressions_discrepancy

  • 广告平台和AppsFlyer之间的数据统计差异。
  • 如果出现以下情况,请忽略该指标:
    • 成本与归因结果不匹配。
    • 广告平台不支持“reported impressions”指标(渠道上报的展示)。
整数

-

clicks_discrepancy

  • 广告平台和AppsFlyer之间的数据统计差异。
  • 如果出现以下情况,请忽略该指标:
    • 成本与归因结果不匹配。
    • 广告平台不支持“reported clicks”指标(渠道上报的点击)。
整数

-

installs_discrepancy

  • 广告平台和AppsFlyer之间的数据统计差异。
  • 如果出现以下情况,请忽略该指标:
    • 成本与归因结果不匹配。
    • 广告平台不支持“reported conversions”指标(渠道上报的转化)。
整数

-

fees

代理商在广告成本以外额外收取的费用。由AppsFlyer统计

整数

-

cost_without_fees

剔除代理费后的成本。由AppsFlyer统计。

整数

-

original_cost_without_fees

广告平台上报的原始成本数据, 不含 代理费用

整数

-

ctr

  • 由AppsFlyer统计的由AppsFlyer统计
  • 计算方式为:点击量/展示量

 

 

 

 

整数

-

cvr

  • 由AppsFlyer统计的由AppsFlyer统计
  • 计算方式为:激活量/点击量
整数

-

ecpm

  • 点击率。
  • 计算方式为:(成本/展示量)* 1000 
整数

cpi

  • 点击率。
  • 计算方式为:成本/激活量
整数

ccvr

  • 每次转化的平均成本
  • 计算方式为:成本/(激活量+再归因+再互动)

整数

cvvr

  • 视频完播率,由AppsFlyer统计
  • 计算方式为:视频完播量/展示量
整数

-

reported_cvr

  • 广告平台上报的转化率
  • 计算方式为:上报转化量/上报点击量
整数

ecpc

  • 点击率。
  • 计算方式为:成本/点击量
整数

-

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的页面。
  • 请注意:我们目前正在对支持KMS存储桶加密的功能进行Beta测试。

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

  1. 登录AWS后台。
  2. 进入“S3 service”部分。
  3. 请按以下步骤创建存储桶:
    1. 点击Create bucket
    2. 按以下方式填写Bucket name (存储桶名称): 先填写必须包含的固定前缀 af-xpend-cost-etl-acc-- 然后再添加自定义的后缀。
      • 如需查找您的af-account-id, 可以按照下文的 第7-9步,在AppsFlyer面板中查看。 
      • 详情请见 Amazon S3命名要求
    3. 点击Create bucket
  4. 从AppsFlyer后台的侧边栏中选择导出 > Cost ETL
  5. 启用Cost ETL
  6. 定时拉取报告中选择 每天需要接收的报告数量以及 各每份报告的接收 时间。每天最多可拉取4份报告。 详情请见此处说明。
  7. 进入Amazon S3 settings部分。

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

  11. 将存储桶策略代码片段复制粘贴到您的 AWS 设置中。
    1. 在AWS后台选择您专为 Cost ETL创建的存储桶。 
    2. 进入Permission选项卡。
    3. Bucket policy部分, 点击Edit
    4. 界面显示存储桶策略窗口。
    5. 将存储桶策略代码片段粘贴到该窗口中。
  12. 在AppsFlyer后台的Cost ETL设置部分,点击下一步
    界面会显示验证存储桶部分。 
  13. 点击验证
    查看界面是否显示验证成功。 
  14. 点击Next
  15. 您可以选择一个、多个或所有应用。点击全选可自动添加后续加入的新应用。
  16. 点击启用
  17. 选择至少一个必备维度: 流量入口(Channel) 和/或国家地区(Geo)。
  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面板中查看。 
    • 详情请见 GCS存储桶命名要求
  3. 从AppsFlyer后台的侧边栏中选择导出 > Cost ETL
  4. 启用Cost ETL。 
  5. 定时拉取报告中选择 每天需要接收的报告数量以及 各每份报告的接收 时间。每天最多可拉取4份报告。 详情请见此处说明。
  6. 进入Data destination,选择
  7. 输入您的GCS存储桶名称。
  8. 点击Next
    界面会显示AppsFlyer服务账户,用于 设置 GCS权限。
  9. 在GCS后台设置存储桶的 IAM权限
    1. AppsFlyer服务账户添加为 Cost ETL存储桶的主账户。

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

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

  18. 点击启用

AWS对象的归属

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

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

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

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

  3. 进入Permissions选项卡。

  4. 点击Object Ownership下的 Edit。 

  5. 选择Bucket owner preferred

  6. 点击Save

最佳实践

定时拉取报告

您可以利用定时拉取报告的设置根据实际需求获得最新数据。 

设定报告拉取时间时: 

  • 尽量选择离您BI系统处理数据的时间最近的选项。
  • 如果您合作的某个广告平台在提供前一天的数据时晚于其他平台,可以在该平台的数据可用时额外设置一次报告拉取。

数据覆盖

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

例如,在2月20日写入的第1批数据中包含2月14-20日的数据,但在2月19日写入的各批数据中也包含2月14-20日的数据。这种情况下,建议用最近收到的(即2月20日)数据覆盖掉之前收到的(即2月19日)数据。

国家/地区(Geo)与流量入口(Channel)

不是所有的广告平台都会同时提供所有维度的数据,最常见的例子就是Meta ads的国家/地区(Geo)数据和流量入口(Channel)数据。因此,我们将这两个维度的数据分为两个数据集。Geo数据集必定包含Geo数据,而 Channel数据集则必定包含Channel数据。

一般情况下,对大多数媒体渠道来说,Geo和Channel数据集中的数据完全一致。因此,您可以根据您的业务需求选用最合适的数据集(Geo或Channel)。

如果某个渠道的对接协议中不包含流量入口(Channel)上报,则流量入口字段为空,AF仍将其视为包含流量入口的数据。

汇总数据

Cost ETL能从广告平台侧提取最深入的数据,从而为广告主提供更细的颗粒度和更灵活的报告配置。建议您考量实际业务需求,并以最合适的方式对数据进行汇总,否则数据量过于庞大,难以汲取真正有决策价值的洞察。举例来说,如果您想要了解广告系列和国家层级的成本数据,可以仅拉取这些维度的数据。

广告平台数据的标准化

各广告平台支持的数据颗粒度不尽相同。比如Meta ads不提供子渠道层级的成本数据,而X Ads不提供国家/地区层级的成本数据。在对Cost ETL数据进行汇总时,需注意这方面的差别,确保您在对比各渠道时使用的数据具有可比性。

数据对比分析

Cost ETL提供的信息涵盖您所有的成本数据。Cost ETL中有时会出现AF面板上没有的广告系列数据,比如空耗的广告系列(即未带来激活的广告系列)产生的成本数据。如需对比数据,请在数据总览面板中找出具体的广告系列ID,然后将其面板数据与Cost ETL中的成本数据进行对比。详情请见成本数据可用性

合并Cost ETL和群组报告

您可以将Cost ETL报告和高级汇总群组报告(或Data Locker中的常规群组报告)相结合,导入BI系统。这两种报告合并后可以提供最全面、最准确、时效性最高的营销效果信息,其中包含点击、展示、成本、收入、应用内事件等各种数据。您还可以使用合并后的数据计算ROAS、CPA等等。详情请见此处说明。

其他相关信息

特点与局限性

特点 说明
时区 如果时区有所变更,则变更当天的成本数据会重复。详情请见此处说明。
数据时效性
  • 一天多次。Cost ETL的配置流程包含定时拉取报告的设置,您可以通过该设置来指定报告的送达时间。
  • 相关数据会在指定时间前的一小时内写入存储桶。也就是说,如果您选择的报告送达时间为早晨6,则该报告会在早晨5-6之间写入存储桶。
请注意:成本数据写入您的存储桶后,入库BI的数据量可大至数GB,小至数KB,具体取决于报告和parquet文件的大小。