埃里克·本杰明·苏弗特 (Eric Benjamin Seufert) 是 移动开发备忘录,一个流行的移动广告贸易博客。 他还负责管理平台和出版工作 N3T工作,一家总部位于旧金山的移动游戏公司,并发布了 免费增值经济,一本关于免费增值商业模式的书。 你可以 在 Twitter 上关注埃里克.
注意:如果您正在寻找比下面 Eric 的方法更省力的广告货币化方法,请与您的Singular客户服务代表联系(并敬请关注其他公告)。
各种宏观市场力量已在 过去两年 为应用程序开发者创造从应用程序内广告中获得可观收入的商业机会。 新流派如 超休闲游戏 甚至传统游戏类型和非游戏类型也通过构建深度、复杂的内容,通过向用户提供富媒体视频和可玩广告来创建大型业务。 货币化循环 与某些应用内购买相比,这丰富了用户体验并产生了更少的可用性摩擦。
但不幸的是,虽然有才华的分析产品设计师能够通过解构玩家行为和优化广告投放来利用游戏内数据来增加广告收入,但用户获取经理在优化此类货币化的获取渠道时可使用的数据较少。 围绕应用内广告货币化构建获取渠道具有挑战性,因为创建应用内广告所需的许多投入 生命周期价值 应用内广告的模型不可用或被混淆。 事实证明,谷歌搜索“移动应用 LTV 模型”会在广泛的统计严格性中产生数百个结果,但搜索“移动应用广告 LTV 模型”几乎不会产生任何有用的结果。
为什么移动广告生命周期价值这么难计算?
其一,应用程序中的广告点击对收入的直接影响对于开发者来说是不可知的,并且很大程度上超出了他们的控制范围。 开发商获得 有效每千次展示费用 当他们付款时,他们会每月从广告网络合作伙伴那里获取数据,但由于有效每千次展示费用的导出方式,他们无法真正知道任何给定点击的价值(广告网络通常根据应用程序安装付费,而不是根据展示次数付费) ,因此 eCPM 是一个综合指标)。
其次,应用程序开发人员无法跟踪其应用程序内的广告点击次数,只能跟踪展示次数。 因此,虽然开发人员可能了解哪些用户在其应用程序中看到的广告最多,并且可以将这些数据汇总为每天的平均广告浏览量(可能按来源划分),但由于大多数广告收入是由用户点击后发生的后续安装驱动的对于广告而言,单独的广告观看次数并不能帮助理解广告生命周期价值。
第三,对于大多数开发者来说,借用 IAP 货币化的概念,有多个“商店”,广告观看(并希望点击)用户可以从中“购买”:应用程序开发者运行广告的每个网络,与开发者从中收集信息的单一 App Store 或 Google Play 商店。 因此,不仅整合广告收入数据变得更加繁重,而且还进一步搅乱了盈利水域,因为即使可以将各个网络的每千次展示费用推算为收入,也无法确定应用程序中的印象构成会是什么样子。未来在某个特定国家/地区(换句话说:仅仅因为 Network X 本月在美国投放了我 50% 的广告,我不知道下个月它是否会在美国投放我 50% 的广告) 。
为了深入研究包含多个未知、可变输入的问题,我经常从这样的角度出发:如果我知道一切,我将如何解决这个问题? 为了构建广告 LTV 模型,一个非常广泛的概念计算可能如下所示:
这意味着:对于通过渠道 A 获取、使用平台 B 且居住在地理位置 C 的给定用户,他们预期产生的终身广告收入是我们为该用户估计的每月广告浏览量的总和。配置文件(例如渠道 A、平台 B、地理位置 C)乘以向该配置文件的用户提供的广告展示次数的每月混合 CPM。
在这个等式中,使用Singular提供的用户归因数据以及内部行为数据,我们可以很容易地得出按获取渠道、平台和地理位置细分的终身广告视图:这或多或少是一个简单的维度化累积广告视图随时间变化的曲线,其导出方式与 累计IAP收入曲线.
但这个等式中的混合 CPM 部分非常混乱。 这是因为:
- 广告网络不会按用户传达每千次展示费用,仅在地理层面上传达; [ 编者注: 有一些 重大变化 发生在这里; 我们将随时向您通报新的进展。 ]
- 大多数开发人员在其中介组合中运行许多网络,并且这种组合每月都会发生变化;
- 展示次数、点击次数和视频完成次数可以通过中介服务在用户级别进行计算,例如 塔普达克 、 铁源,但截至目前,这些数据还没有附带收入数据。
请注意,在中期内,上述许多与数据可用性和透明度有关的问题将通过应用内标头竞价得到改善(有关该主题的详细阅读,请参阅 本文由 Tapdaq 的 Dom Bracher 撰写)。 与此同时,我们可以采取一些步骤来合理估计混合每千次展示费用,以了解我们的归因数据为我们提供的粒度级别,这对于获取用户的目的很有价值(阅读:提供可以出价的生命周期价值反对用户获取渠道)。
但在这一点显现之前,用户获取经理在可用于构建广告 LTV 估算的数据方面仍存在一些空白。 第一个明显的差距是印象池的网络组成:假设有一个多样化的中介池,则无法知道哪些网络将在下个月占据总体印象的百分比。 第二个是前瞻性地通过这些网络实现的每千次展示费用,因为这几乎完全取决于用户是否通过他们观看的广告安装应用程序。
解决这两个差距的唯一方法是依靠历史数据来暗示未来会是什么样子(其中 违反了价值投资的关键规则 但仍然有助于形成对未来的看法)。 在这种情况下,我们希望查看过去的每千次展示费用表现和过去的网络印象构成,以获取对未来任何特定月份的预期的指导。
使用 Python 估算移动广告 LTV
为了展示如何做到这一点,我们可以用 python 构建一个简单的脚本,从生成一些随机样本数据开始。 此数据考虑的是仅向美国、加拿大和英国的 Facebook、Unity 和 Vungle 用户投放广告的应用程序:
[代码] import pandas as pd import matplotlib import numpy as np from itertools import product import random geos = [ '美国', '加拿大', '英国' ] 平台 = [ 'iOS', 'Android' ] 网络 = [ 'Facebook ', 'Unity', 'Applovin' ] def create_historical_ad_network_data( geos, 网络 ): 历史 = pd.DataFrame(list(product(geos, 平台, 网络)), columns=[ 'geo', '平台', '网络' ]) for i in range( 1, 4 ): 历史[ 'cpm-' + str( i ) ] = np.random.randint ( 1, 10, size=len( 历史 ) ) 历史[ 'imp-' + str ( i ) ] = np.random.randint( 100, 1000, size=len( 历史 ) ) 历史[ 'imp-share-' + str( i ) ] = 历史[ 'imp-' + str( i ) ] /历史['imp-'+str(i)].sum()返回历史历史记录=create_historical_data(geos,networks)打印(历史记录)[/code]
运行此代码会生成一个 Pandas DataFrame,如下所示(您的数字会因随机生成而有所不同):
[代码/表] geo platform network cpm-1 imp-1 imp-share-1 cpm-2 imp-2 \ 0 US iOS Facebook 2 729 0.070374 9 549 1 US iOS Unity 7 914 0.088232 3 203 2 US iOS Applovin 7 826 0.079737 4 100 3 美国 Android Facebook 2 271 0.026161 2 128 4 美国 Android Unity 5 121 0.011681 9 240 5 美国 Android Applovin 6 922 0.089005 9 784 6 CA iOS Facebook 2 831 0.080220 9 889 7 CA iOS统一8 483 0.046626 5 876 8 CA iOS Applovin 7 236 0.022782 9 642 9 加利福尼亚州 Android Facebook 8 486 0.046916 4 523 10 加利福尼亚州 Android Unity 1 371 0.035814 5 639 11 加利福尼亚州 Android Applovin 8 588 0.056762 7 339 12 英国 iOS Facebook 2 850 0.08 2054 8 680 13 英国 iOS Unity 7 409 0.039483 3 310 14 英国 iOS Applovin 1 291 0.028092 5 471 15 英国 Android Facebook 7 370 0.035718 6 381 16 英国 Android Unity 3 707 0.068250 6 117 17 英国 Android Applovin 3 954 0.092094 3 581 imp-share-2 c pm-3 imp-3 imp -份额-3 0 0.064955 8 980 0.104433 1 0.024018 4 417 0.044437 2 0.011832 3 157 0.016731 3 0.015144 7 686 0.073103 4 0.028396 3 55 0 0.058610 5 0.092759 8 103 0.010976 6 0.105182 1 539 0.057438 7 0.103644 6 679 0.072357 8 0.075958 5 883 0.094096 9 0.061879 1 212 0.022592 10 0.075603 8 775 0.082587 11 0.040109 6 378 0.040281 12 0.080454 6 622 0.066283 13 0.036678 8 402 0.042839 14 0.055726 7 182 0.019395 15 0.045078 2 623 0.066390 16 0.013843 2 842 0.089727 17 0.068741 1 354 0.037724 [/代码]
此时需要考虑的一件事是,我们必须假设,在每个月的基础上,任何给定国家/地区的任何用户都将与同一平台上的任何其他用户接触到相同的网络组成(即,向 iOS 上的美国用户投放的 Applovin 广告的比例对于指定月份内某个应用程序的所有用户而言是相同的)。 这几乎肯定不是严格正确的,因为对于任何给定的印象,用户所使用的设备类型(例如 iPhone XS Max 与 iPhone 6)以及其他特定于用户的信息将影响哪个网络填充印象。 但总的来说,这种假设可能足够安全,可以在模型中使用。
另一件需要指出的事情是,保留率是在与源渠道相关的每月广告浏览量估计中捕获的。 构建广告 LTV 模型时常见的一个困惑是,漏斗的两侧都涉及广告网络:从中获取用户的网络以及用户通过应用中投放的广告获利的网络。 在构建我们的模型时,我们在 A 部分的每月广告浏览量组件中捕获了“用户质量”,其中包含保留率,其方式与基于 IAP 的传统 LTV 曲线相同。 因此,没有理由在等式的 B 部分中包含“用户质量”,因为它已经用于通知 A 部分。
鉴于此,近似 B 部分的下一步是获取每个网络的历史份额,在地理和平台级别进行聚合。 一旦我们有了这个,我们就可以在地理和平台级别生成混合 CPM 值,以乘以 A 部分中的公式(同样,由于我们假设所有用户都看到相同的广告网络混合,因此我们不必进一步按用户源网络聚合网络份额)。
在下面的代码中,跟踪三个月的展示次数在地理和平台级别计算为总数的份额。 然后,对每个网络过去三个月的 CPM 进行平均,并返回总和:
[代码] 历史[ 'trailing-3-month-imp' ] = 历史[ 'imp-1' ] + 历史[ 'imp-2' ] + 历史[ 'imp-3' ] 历史[ 'trailing-3-month -imp-share'] = 历史[ 'trailing-3-month-imp' ] / History.groupby( [ 'geo', 'platform' ] )[ 'trailing-3-month-imp' ].transform( sum )历史[ 'trailing-3-month-cpm' ] = 历史[ [ 'cpm-1', 'cpm-2', 'cpm-3' ] ].mean( axis=1 ) Blended_cpms = ( 历史[ [ 'trailing -3-month-imp-share', 'trailing-3-month-cpm' ] ].prod( axis=1 ) .groupby( [ 历史[ 'geo' ], 历史[ '平台' ] ] ).sum( ).reset_index( ) ) Blended_cpms.rename( columns = { Blended_cpms.columns[ len( Blended_cpms.columns ) - 1 ]: 'CPM' }, inplace = True ) print( Blended_cpms ) [/code]
运行这段代码应该输出一个看起来像这样的 DataFrame(同样,数字会不同):
[code] 地理平台 CPM 0 CA Android 5.406508 1 CA iOS 4.883667 2 英国 Android 4.590680 3 英国 iOS 5.265561 4 美国 Android 4.289083 5 美国 iOS 4.103224 [/code]
那么现在我们有什么? 我们有一个在地理和平台级别分解的混合 CPM 矩阵(例如 Unity Ads 为美国、iOS 用户提供的 CPM)——这是上面等式中的 B 部分。 该等式中的 A 部分(即我们期望与与其来源渠道、地理位置和平台相关的各种个人资料特征相匹配的用户在给定月份内的平均广告浏览次数)将取自内部归因数据与内部应用程序数据,但我们可以生成一些随机数据以匹配此函数的外观:
[代码] def create_historical_one_month_ad_views(geos,networks):ad_views = pd.DataFrame(list(product(geos,platforms,networks)),columns = ['geo','platform','source_channel'])ad_views ['ad_views' ] = np.random.randint( 50, 500, size=len( ad_views ) ) return ad_viewsmonth_1_ad_views = create_historical_one_month_ad_views(geos,networks) print(month_1_ad_views) [/code]
运行上面的代码片段应该输出如下内容:
[代码] geo platform source_channel ad_views 0 US iOS Facebook 73 1 US iOS Unity 463 2 US iOS Applovin 52 3 US Android Facebook 60 4 US Android Unity 442 5 US Android Applovin 349 6 CA iOS Facebook 279 7 CA iOS Unity 478 8 CA iOS Applovin 77 9 CA Android Facebook 479 10 CA Android Unity 120 11 CA Android Applovin 417 12 英国 iOS Facebook 243 13 英国 iOS Unity 306 14 英国 iOS Applovin 52 15 英国 Android Facebook 243 16 英国 Android Unity 106 17 英国 Android Applovin 195 [/code ]
现在,我们可以将用户群的效果数据(使用归因数据收集)与预计的 CPM 数据进行匹配,以使用以下代码估算给定月份的广告收入:
[代码]合并 = pd.merge(month_1_ad_views, Blended_cpms, on=[ 'geo', 'platform' ] ) 合并[ 'month_1_ARPU' ] = 合并[ 'CPM' ] * ( 合并[ 'ad_views' ] / 1000 ) print (合并)[/代码]
运行上面的代码片段应该输出如下内容:
[code] geo platform source_channel ad_views CPM Month_1_ARPU 0 美国 iOS Facebook 73 5.832458 0.425769 1 美国 iOS Unity 463 5.832458 2.700428 2 美国 iOS Applovin 52 5.832458 0.303288 3 美国 Android Facebook 60 5.327445 0.319 647 4 美国 Android Unity 442 5.327445 2.354731 5 美国 Android Applovin 349 5.327445 1.859278 6 CA iOS Facebook 279 6.547197 1.826668 7 CA iOS Unity 478 6.547197 3.129560 8 CA iOS Applovin 77 6.547197 0.504134 9 CA Android Facebook 479 4.108413 1.967930 10 CA Android Unity 120 4.108413 0.493010 11 加拿大 Android Applovin 417 4.108413 1.713208 12 英国 iOS Facebook 243 4.626163 1.124158 13 英国 iOS Unity 306 4.626163 1.415606 14 英国 iOS Applovin 52 4.626163 0.240560 15 英国 Android Facebook 243 5.584462 1.357024 16 英国 Android Unity 106 5.584462 0.591953 17 英国 Android Applovin 19 5 5.584462 1.088970 [/代码]
最后一列 - Month_1_ARPU - 是您期望用户在第一个月获得的广告收入金额,与他们的来源渠道、地理位置和平台相匹配。 换句话说,这是他们的 30 天 LTV。
把它们放在一起
希望这篇文章展示了这样一个事实:虽然它很混乱且有些令人费解,但确实存在一种使用归因和广告效果数据来估计广告 LTV 的合理方法。 进一步采用这种方法,人们可以将更多月份的广告观看效果数据组合在一起,以扩展广告 LTV 估计的限制(到第二个月、第三个月、第四个月等),然后使用历史 CPM 波动来获得更实际的估计未来任何给定点的每千次展示费用(例如,在圣诞节前夕,每千次展示费用激增时,使用历史混合平均值是没有意义的)。
在移动周期的这个阶段,通过丰富的广告赚钱的机会和可能性令人兴奋,但它们也伴随着新的挑战。 总的来说,随着移动广告生态系统的发展 算法驱动和程序化的活动管理,用户获取团队需要赋予自己分析创造力,以找到新颖的方法来扩展应用程序并实现盈利。
. . .
. . .
下一个: 立即免费获取完整的移动归因无废话指南。