账户在 2026-08-04 花过钱的每一条素材,按这一天撑得住的指标逐项排序,每一项都先过样本门槛。范围限定在 这一天:全生命周期的数字会把不同的预算区间、广告系列结构和国家结构混在一起,而这个账户一周之内三样 都会变。凡是需要不止一天才有意义的对比,本报告直接说明,不绕过去。
报表时钟是 UTC。 Meta 的分小时导出按广告账户自己的时区打时间戳,也就是 UTC-7,所以这一天是账户的 08-03 17:00–23:59 加上它的 08-04 00:00–16:59,由两份分小时导出重新拼接而成。有两样东西跟不了这个 时钟,它们出现在哪里就在哪里标明:分国家的切分,因为 Meta 不提供小时 × 国家的网格;以及共同投放 小时和预算区间这两个计量口径,它们按设计就锚在 Meta 的挂钟时刻上。
这一天:$446.00 花在七个有花费的对象上,785 次安装(Meta 口径),CPI(单次安装成本) $0.568,当日闭合收入 $588.70(ROAS 1.32),入账收入 $921.86(2.07),同期群 24 小时 $783.90(1.76),覆盖率 35%。支付数据切至 2026-08-05 10:59 UTC。固定素材区块在 asset_performance_report_2026-08-04.md 第 8 节,这里不 重复;本文是建立在它之上的排序论证。
投放端答得了。 CPM(千次展示成本)、CTR(点击率)、点击→安装和 CPI 都是单一时钟上的量,每条实验臂 背后有数千次展示、数百到数千次点击。它们不需要成熟度,也不需要观测时长。
收入端答不了,而且卡在两道门槛上,不是一道。 远的那道是样本:1,596 次安装、81 个付费用户,变异 系数是 7.72,所需样本量按它的平方增长,所以要分辨 20% 的差别,每条实验臂需要 23,363 次安装。这 一天最大的一条实验臂只有 221 次。相当于所需量的 0.9%。
近的那道先卡住。这一天没有任何一条实验臂达到 16 付费用户门槛(#37):pool5 12 个,bodysuit 11 个,bikini 8 个,spill2 4 个,mugshot 1 个。这里没有一份可以拿去辩护的单素材收入排名。下文 每一个收入排序都只能看方向,而十二个付费用户和十一个付费用户之间的差别,根本算不上结果。
| 排名 | 素材 | CPI | CTR | 点击→安装 | CPM | 花费 |
|---|---|---|---|---|---|---|
| 1 | spill2 | $0.369 | 13.34% | 25.71% | 12.66 | $30.27 |
| 2 | bodysuit | $0.513 | 7.63% | 27.56% | 10.77 | $113.28 |
| 3 | bikini | $0.540 | 9.03% | 24.79% | 12.09 | $111.81 |
| 4 | pool5 | $0.562 | 8.88% | 23.56% | 11.77 | $103.49 |
| 5 | mugshot | $1.034 | 10.43% | 14.99% | 16.17 | $75.48 |
三条读数,在这个样本量下都站得住:
spill2 买到全账户最便宜的安装,$0.369,其余四条落在 $0.513 到 $1.034;而且在它投放过的每一个 六小时段里,它的安装都是最便宜的。它的 CTR 是当天最高的 13.34%,在 18–23 时段达到 15.37%;不过在 更早的两个时段里 mugshot 的 CTR 略高于它,而那两个时段也正是 spill2 买得最少的两个。它在这一天 的 07 时才第一次投放,没有跑满整个时钟。mugshot 两头都贵,点击这一段最贵。 它的安装单价是其余四条合并后的 2.00 倍,而这个倍数拆得 干干净净:CPM 是它们的 1.39 倍,CTR 是 1.18 倍,点击→安装是 0.59 倍。人确实会点它,但这些点击里只有 14.99% 变成安装,其余四条是 23.6% 到 27.6%。它在账户时间 12:32 被关掉。bodysuit、bikini 和 pool5 三条的价格只差 9.6%,各段之间互有得失。bodysuit 买到 全账户最便宜的展示,拿到的点击最少,然后把点击转成安装的比例又高过其他任何一条;bikini 和 pool5 拿到更多点击,转化率更低。三条最后落在 $0.513、$0.540 和 $0.562。投放端有一个结果在日环比上过了显著性,走的是广告账户的时钟。 共同投放小时这个计量口径锚在 Meta 自己的投放小时上,所以这里照它产出的样子报出,它的日界不是本报告的日界。固定在共同投放小时、观测 时长六小时上,bodysuit 的点击→安装从 36.33% 掉到 25.55%,−29.7%,p = 0.001,同期 CPI 是平的 ($0.511 → $0.506)。这是整个对比里唯一一个 p < 0.05 的负向结果,而它的窗口和 bodysuit 自己在账户 时间 12:31 的 $100 → $150 预算变动重叠,所以这里分不开是下滑还是预算。bikini(p = 0.224)、 pool5(p = 0.240)和 mugshot(p = 0.052)都分不开。spill 的 +913%(p = 0.000)是被否掉的那版 素材换成了它的副本,已经记录在案(DECISION_LOG.md #50)。
当日闭合收入已封存,本表只用这一个收入口径。花费以及在它之上算出的 wROAS 走 UTC 日;两个国家列是 账户日的切分,和旁边所有列相差七小时。
| 素材 | 当日闭合收入 | wROAS | 付费用户 | ARPPU | 最大付费用户占比 | 美国花费占比 (账户日) | 美国收入占比 |
|---|---|---|---|---|---|---|---|
pool5 | $228.50 | 2.21 | 12 | 19.04 | 38.9% | 13.5% | 41.1% |
bodysuit | $177.48 | 1.57 | 11 | 16.13 | 25.3% | 13.4% | 21.4% |
bikini | $54.67 | 0.49 | 8 | 6.83 | 23.6% | 9.2% | 9.1% |
spill2 | $38.61 | 1.28 | 4 | 9.65 | 54.2% | 7.9% | 0.0% |
mugshot | $6.32 | 0.08 | 1 | 6.32 | 100.0% | 3.2% | 0.0% |
这张表里没有一行过了付费用户门槛。 这一天最高的一条是十二个,门槛是 16,所以 wROAS 这一列只能看 方向,不能看幅度。
头两条实验臂谁在前面,由一个人决定。 有一个付费用户在这一天之内付了 $88.95。这占 pool5 全部 收入的 38.9%,占全账户当日闭合收入的 15.1%。把他去掉,pool5 从 2.21 变成 1.35,低于 bodysuit 原封不动的 1.57。这一天领先的两条实验臂谁排在前面,取决于一个人,而且无论他算在哪个国家 都一样。
他坐在 pool5 的美国那一格里。 在分国家的切分上,pool5 在美国花了 $14.10,占它自己花费的 13.5%,换回当日闭合收入 $93.94,是这条素材收入的 41.1%,是当天全账户的 16.0%。这一格里正好 两个付费用户,$88.95 和 $4.99,大的那个占 94.7%。同一条素材在同一份切分上花了 $15.17 买印度, 那边的当日闭合收入是 0.76。
国家结构这一列把两条实验臂和其余分开,两条都在正的一侧。 pool5 的美国收入占比是它美国花费占比 的 3.0 倍,bodysuit 是 1.6 倍。bikini 持平,收入占 9.1% 对花费占 9.2%;mugshot 和 spill2 在 美国一分钱都没挣到。这个比值的两侧坐在不同的时钟上,所以它只是钱从哪里来的一个方向,不是量出来的 差距。
spill2 的 $38.61 背后是四个付费用户,其中一个人占了 54.2%。和 pool5 那一格形状相同,钱只有五分 之一,离门槛更远。
本节走的是广告账户的时钟。 估算器把每一格都锚在 Meta 的投放小时上,它的预算区间也是 Meta 的挂钟 时刻:预算在账户时钟的 12:31 变动,事件就是这个时刻。它的窗口横跨账户的 08-03 和 08-04,不是本报告 这个 UTC 日。各格已成熟到 H=12。结构中性把每条实验臂的回报按它所在预算区间的合并国家结构重新定价, 保留它自己的成本效率和收入效率。它回答的是:如果这条素材买的是同伴买的那些国家,它会挣回多少。
| 预算区间 | 素材 | 安装数 | CPI | CTR | 印度占比 | ROAS | 结构中性 |
|---|---|---|---|---|---|---|---|
| E2-R1 | bikini | 160 | 0.436 | 8.82% | 34% | 1.12 | 1.00 |
| E2-R1 | bodysuit | 111 | 0.506 | 6.90% | 17% | 1.05 | 1.08 |
| E2-R1 | pool5 | 111 | 0.601 | 9.93% | 15% | 1.00 | 0.81 |
| E2-R1 | mugshot | 95 | 0.852 | 8.64% | 22% | 0.21 | 0.25 |
| E2-R1 | spill | 85 | 1.308 | 1.67% | 7% | 0.05 | 0.07 |
| E2-R2 | bikini | 132 | 0.545 | 8.29% | 40% | 0.54 | 0.63 |
| E2-R2 | bodysuit | 106 | 0.546 | 7.02% | 25% | 1.12 | 1.17 |
| E2-R2 | pool5 | 81 | 0.668 | 8.59% | 15% | 3.34 | 1.93 |
| E2-R2 | mugshot | 50 | 0.981 | 10.95% | 22% | 0.00 | — |
| E2-R2 | spill | 35 | 0.309 | 10.64% | 23% | 2.46 | 3.81 |
| E2-R3 | bikini | 23 | 0.383 | 12.43% | 35% | 0.96 | 0.97 |
| E2-R3 | bodysuit | 32 | 0.343 | 12.00% | 12% | 2.39 | 2.06 |
| E2-R3 | pool5 | 37 | 0.232 | 10.60% | 0% | 2.16 | 1.89 |
| E2-R3 | spill | 24 | 0.377 | 15.18% | 12% | 0.64 | 0.98 |
E2-R1 是这个账户唯一一段五条实验臂同在 $100 日预算上跑的时间,也是国家结构这个混杂因素最容易读 清楚的地方。在这里,pool5 原始的 1.00 在它的国家结构被中性化之后变成 0.81,落到 bikini 的 1.00 和 bodysuit 的 1.08 之下。
做结构中性之后 pool5 在三个预算区间里都往下走,而其他实验臂往下走的幅度没有超过 0.33 的,那一个 是 E2-R3 里的 bodysuit,背后 32 次安装。这和第 3 节从付费用户那一侧得到的是同一个结论,只是这次从 国家那一侧独立得到。
中性化之后有两条实验臂上升,两次都落在很薄的格子上:spill 在 E2-R2(2.46 → 3.81,35 次安装)和在 E2-R3(0.64 → 0.98,24 次)。在这个量级上两个都分不开。
这个 UTC 日正好压在接缝上。它的头七个小时落在 E2-R1 里,五条实验臂都是 $100;中间一段跑完整个 E2-R2,spill 是 $25,其余是 $100;最后四个小时进入 E2-R3,bodysuit 是 $150。二十四小时里有七小时 是预算对齐的。
mugshot 死了,而且证据一边倒。 全球五条实验臂里展示最贵,CPM 16.17,其余在 10.77 到 12.66;点击→安装最差,14.99%,其余在 23.6% 到 27.6%;安装单价是其余合并后的 2.00 倍;当日闭合收入 $6.32,来自一个付费用户,付费率 1.3%。在估算器的全生命周期切分上,H=1、H=6 和 H=12 都读 0.13,覆盖 完整;H=24 读 0.26,覆盖率 69%。它在账户时间 12:32 被关掉,不该再回来。spill2 值得给更多预算。 最便宜的安装、当天最高的 CTR,从 07 时起算。钱那一侧只有四个付费用户, 所以它现在的状态是没验证,不是好,而这恰恰就是多买它的理由。pool5 在每一个收入指标上都领先,靠的是十二个付费用户, 其中一个人占了这条臂的 38.9%;bodysuit 以十一个排在后面。两条都未过门槛,而它们之间 0.64 的 ROAS 差距,比决定这个差距的那一个付费用户还小。bodysuit 身上有当天唯一一个显著的负向结果,而它的钱守住了。 两件事说的是同一条素材,谁也抵消 不了谁:它的漏斗变差了,同时它的收入在全账户排第二。这次下滑和一次预算变动共用一个窗口,所以它也 不是一个干净的素材结论。pool5 放量。 它的领先是一个只有两个付费用户的美国格子,格子里一个人占 94.7%。如果目的是买到这类付费用户,那是一个定向决策,属于地域问题,不属于素材排名。bikini 是不声不响掉队的那一条。 每一个投放列上都是五条里的第三,当日闭合收入 0.49,背后八个 付费用户。在分国家的切分上,它 34.9% 的花费去了印度,是所有实验臂里印度占比最高的;在同一份切分上, 全账户口径印度的当日闭合收入是 1.15,美国是 2.73。这两个国家数字分别只有十三个和五个付费用户撑着, 所以它们只能把国家排出先后,量不出差距有多大。在这个时钟上,这一天只截到这笔投放的头三个投放小时,21:00 到 23:59,而共用一个广告组的十五条素材 里,只有两条在这三小时里花到钱。共花 $11.67,五次安装,单次 $2.334,当日闭合收入 $25.41,来自一个 付费用户。
| 素材 | 花费 | 展示次数 | CPM | CTR | 点击→安装 | 安装数 | CPI | 当日闭合收入 |
|---|---|---|---|---|---|---|---|---|
german_mature_10s | $9.88 | 203 | 48.67 | 5.42% | 36.36% | 4 | $2.470 | $25.41 |
latina_true_10s | $1.79 | 36 | 49.72 | 8.33% | 33.33% | 1 | $1.790 | $0.00 |
没有哪条德语区素材是可判定的,而且离可判定还差得远。 两条里看起来更好的那条背后是一个付费用户, 而其中一条素材吃掉了这个窗口 84.7% 的花费。
这个窗口撑得住的,是一次德语区展示的价格。 和同一天的全球投放比:
| CPM | CTR | 单次点击成本 | 点击→安装 | CPI | |
|---|---|---|---|---|---|
| 德语区 | $48.83 | 5.86% | $0.834 | 35.7% | $2.334 |
| 全球投放,五条实验臂 | $12.20 | 9.05% | $0.135 | 23.8% | $0.566 |
| 德语区倍数 | 4.00× | 0.65× | 6.19× | 1.50× | 4.12× |
只有第一列过得了样本这一关。239 次展示,单价是全球实验臂付的四倍,这是一个价格,而价格在几百次展示上 就读得干净。它右边的每一列都建立在 14 次点击和 5 次安装上:正因为如此,这里点击→安装那一列读出来 才会高于全球的水平,而这不是任何人该从这张表里带走的结论。在这个深度上,展示以下的漏斗只能看方向, 绝不能当成比率,也没法从中说出关于落地页、商店详情页或购买流程的任何一句话。
这句话说的是这个窗口,不是这笔德语区投放。 跨越整笔投放全生命周期的漏斗读数是另一份切分,点击 样本大得多,本报告在哪个方向上都不做这个读数。这里关于点击之上或点击之下得出的任何结论,只适用于三个 小时和十四次点击。
这笔投放第一天余下的部分,在这个时钟上归 08-05。另有三条德语区素材在账户的 08-04、账户时间 17:00 之后花了钱,全部落在这个 UTC 日之外;在账户日的分国家切分上,光 turkish_mature 一条在德国就花了 $18.69,比上面那个窗口里所有素材加起来还多,而这些在这里一点都看不到。
由此有两条推论,两条都不是关于挑哪条德语区素材:
pool5 的 12 个是这一天最深的一格。spill 变成 $25,再之后 bodysuit 变成 $150,mugshot 关掉。任何横跨全天的跨实验臂对比,有一部分 是在比预算。bodysuit 的漏斗下滑和它的预算变动共用一个窗口,在这批数据上分不开。从仓库根目录运行,带 PYTHONIOENCODING=utf-8。配置里 tz: "UTC"。
python -m ad_ops.measures --config _runs/2026-08-05_0804_settled/run_config.json \
--day 2026-08-04 --prev 2026-08-03
python -m ad_ops.report_tables --config _runs/2026-08-05_0804_settled/run_config.json \
--day 2026-08-04 --prev 2026-08-03
python -m ad_ops.cohort_arpu --config _runs/2026-08-05_0804_settled/run_config.json \
--days 2026-08-03,2026-08-04
第 2 节的双比例检验和第 4 节的预算区间表走的是广告账户的时钟,用同目录的配置 run_config_meta.json,它和 UTC 那份只有 tz 不同:
python -m ad_ops.day_compare --config _runs/2026-08-05_0804_settled/run_config_meta.json \
--today 2026-08-04 --prev 2026-08-03 --h 6
python -m ad_ops.asset_estimator hourly --campaign bailingxia_meituan_ww_cvr_260802 --adset '' \
--ads ww_bikini_10s,ww_bodysuit_10s,ww_pool5,ww_mugshot,ww_spill,ww_lounge \
--meta <08-03 hourly> <08-04 hourly> <08-05 hourly> \
--lum _runs/2026-08-05_0804_settled/lum --fx <fx_rates.json>
一个 UTC 日除了自己那天的分小时导出,还需要前一个账户日的,缺了的话 measures.py 会点名报错,而不是 少一截照样出数。
单个国家格子内部的付费用户集中度,固定素材区块只按素材报、不按格子报,这次是用一段短脚本读的,跑在 measures.Ctx 自己的加载器上,没有另起一个计量口径: _runs/2026-08-05_0804_settled/utc_2026-08-04/cell_payers.py。