全球与德语区素材对比 — 2026-08-04

账户在 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 节,这里不 重复;本文是建立在它之上的排序论证。

1两个问题

投放端答得了。 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 个。这里没有一份可以拿去辩护的单素材收入排名。下文 每一个收入排序都只能看方向,而十二个付费用户和十一个付费用户之间的差别,根本算不上结果。

2投放

排名素材CPICTR点击→安装CPM花费
1spill2$0.36913.34%25.71%12.66$30.27
2bodysuit$0.5137.63%27.56%10.77$113.28
3bikini$0.5409.03%24.79%12.09$111.81
4pool5$0.5628.88%23.56%11.77$103.49
5mugshot$1.03410.43%14.99%16.17$75.48

三条读数,在这个样本量下都站得住:

投放端有一个结果在日环比上过了显著性,走的是广告账户的时钟。 共同投放小时这个计量口径锚在 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)。

3收入

当日闭合收入已封存,本表只用这一个收入口径。花费以及在它之上算出的 wROAS 走 UTC 日;两个国家列是 账户日的切分,和旁边所有列相差七小时。

素材当日闭合收入wROAS付费用户ARPPU最大付费用户占比美国花费占比 (账户日)美国收入占比
pool5$228.502.211219.0438.9%13.5%41.1%
bodysuit$177.481.571116.1325.3%13.4%21.4%
bikini$54.670.4986.8323.6%9.2%9.1%
spill2$38.611.2849.6554.2%7.9%0.0%
mugshot$6.320.0816.32100.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%;mugshotspill2 在 美国一分钱都没挣到。这个比值的两侧坐在不同的时钟上,所以它只是钱从哪里来的一个方向,不是量出来的 差距。

spill2 的 $38.61 背后是四个付费用户,其中一个人占了 54.2%。和 pool5 那一格形状相同,钱只有五分 之一,离门槛更远。

4把预算和国家结构固定住

本节走的是广告账户的时钟。 估算器把每一格都锚在 Meta 的投放小时上,它的预算区间也是 Meta 的挂钟 时刻:预算在账户时钟的 12:31 变动,事件就是这个时刻。它的窗口横跨账户的 08-03 和 08-04,不是本报告 这个 UTC 日。各格已成熟到 H=12。结构中性把每条实验臂的回报按它所在预算区间的合并国家结构重新定价, 保留它自己的成本效率和收入效率。它回答的是:如果这条素材买的是同伴买的那些国家,它会挣回多少。

预算区间素材安装数CPICTR印度占比ROAS结构中性
E2-R1bikini1600.4368.82%34%1.121.00
E2-R1bodysuit1110.5066.90%17%1.051.08
E2-R1pool51110.6019.93%15%1.000.81
E2-R1mugshot950.8528.64%22%0.210.25
E2-R1spill851.3081.67%7%0.050.07
E2-R2bikini1320.5458.29%40%0.540.63
E2-R2bodysuit1060.5467.02%25%1.121.17
E2-R2pool5810.6688.59%15%3.341.93
E2-R2mugshot500.98110.95%22%0.00
E2-R2spill350.30910.64%23%2.463.81
E2-R3bikini230.38312.43%35%0.960.97
E2-R3bodysuit320.34312.00%12%2.392.06
E2-R3pool5370.23210.60%0%2.161.89
E2-R3spill240.37715.18%12%0.640.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。二十四小时里有七小时 是预算对齐的。

5这一天撑得住的结论

6德语区的素材

在这个时钟上,这一天只截到这笔投放的头三个投放小时,21:00 到 23:59,而共用一个广告组的十五条素材 里,只有两条在这三小时里花到钱。共花 $11.67,五次安装,单次 $2.334,当日闭合收入 $25.41,来自一个 付费用户。

素材花费展示次数CPMCTR点击→安装安装数CPI当日闭合收入
german_mature_10s$9.8820348.675.42%36.36%4$2.470$25.41
latina_true_10s$1.793649.728.33%33.33%1$1.790$0.00

没有哪条德语区素材是可判定的,而且离可判定还差得远。 两条里看起来更好的那条背后是一个付费用户, 而其中一条素材吃掉了这个窗口 84.7% 的花费。

这个窗口撑得住的,是一次德语区展示的价格。 和同一天的全球投放比:

CPMCTR单次点击成本点击→安装CPI
德语区$48.835.86%$0.83435.7%$2.334
全球投放,五条实验臂$12.209.05%$0.13523.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,比上面那个窗口里所有素材加起来还多,而这些在这里一点都看不到。

由此有两条推论,两条都不是关于挑哪条德语区素材:

  1. 集中度是十五条素材挤在一个广告组里造成的,换哪个时钟都动不了它。在一个广告组内部换素材,能 回答这个地域够不够格,仍然回答不了哪条德语区素材有效。那需要一条素材一个广告组(#41)。
  2. 德语区里答得了的问题是投放端的问题。 展示价格是四倍,在这个账户买得起的任何量级上,都不可能用 收入把两条德语区素材分开(#48)。用 CPM 和单次点击成本判断它们,一条素材一个广告组,永远不要用 收入。

7口径与边界

8复现

从仓库根目录运行,带 PYTHONIOENCODING=utf-8。配置里 tz: &quot;UTC&quot;

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

Internal — noindex. Not for distribution outside the team.