每日投放报告 — 2026-08-02,对比 2026-08-01

广告系列 bailingxia_meituan_ww_cvr_260730:一个 CBO 广告组,日预算 $500,三条素材,全球投放, 仅 Android,优化目标是购买。按 UTC 日算,它在 11 个投放小时里花掉 $278.28,08-01 是 23 个 小时花掉 $733.94。报表时钟、三种收入口径和预算区间的定义都在附录,附录还写了限定本报告每一次 对比的那件事:这两天不在同一个预算区间。

1总览

08-0108-02变化
投放小时数2311−12
花费$733.94$278.28−62.1%
安装数1,963745−62.0%
单次安装成本$0.374$0.374−0.1%
入账收入$1,110.93 · 1.51 (Meta 1.59)$559.00 · 2.01 (Meta 2.19)+32.7%
当日闭合收入$980.99 · 1.34$272.13 · 0.98−26.8%
同期群 24 小时$1,163.16 · 1.58$360.61 · 1.30−18.2%

三个收入行的变化列是 ROAS(广告支出回报率)的变化,不是金额的变化。三个口径的金额都跌了, 跌幅大致跟着花费走。

账户用同样的价格买到了更少的量。 花费跌 62.1%,安装数跌 62.0%,单次安装成本因此和前一天 只差 0.1%。底下 CPM(千次展示成本)涨了 21.1%,CTR(点击率)涨了 21.2%,正好抵消。

入账收入涨了,而这一天自己的流量赚得更少。 08-01 到账的钱里 88.3% 是当天安装的人赚回来的, 08-02 只有 48.7%,所以入账收入记的是更早的买家还在继续付钱。当日闭合收入封存在 0.98, 同期群 24 小时的方向一致,−18.2%。

下跌是真的,幅度取决于用哪个口径。 当日闭合收入读出 26.8%,同期群 24 小时读出 18.2%。 差额来自这一天的形状:投放在 UTC 17:59 就停了,靠后的安装只剩几个小时而不是一整天可以付钱, 当日闭合收入把这笔账算在它们头上。

没有一行分素材收入过了付费用户门槛,付费用户分别是 13、10、9 人,每一行里都有一个人占了 27% 到 42%。第 7 节仍然给它们排了序,但那只能看方向,不能看幅度。

2分小时,2026-08-02

花费、展示次数、点击和安装数落在投放小时上。入账收入落在钱到账的那个小时。当日闭合收入同期群落在安装小时上,也就是这个小时买来的流量后来赚了多少。所以只有当日闭合和同期群这 两个比率是拿一个小时的收入除以同一个小时的花费;入账收入这一列放在这里,是为了让当天的总额能 追到它落在一天中的哪个位置。

UTC 小时花费展示CPM点击CTR安装CPI入账ROAS当日闭合ROAS同期群 24 小时ROAS
00$7.13799$8.92688.51%16$0.446$14.512.03$14.512.03$14.512.03
01$0.00004$2.99$2.99$2.99
02$0.00003$36.50$2.99$2.99
03$0.00001$8.75$0.00$0.00
04$0.00003$20.27$0.00$0.00
05$0.00000$18.74$0.00$0.00
06$0.00005$29.49$4.99$4.99
07$0.00002$23.68$0.00$0.00
08$13.291,512$8.7916610.98%29$0.458$0.000.00$0.000.00$0.000.00
09$36.114,266$8.463738.74%82$0.440$7.120.20$42.581.18$42.581.18
10$41.414,119$10.053889.42%96$0.431$69.021.67$47.031.14$57.291.38
11$27.733,119$8.892949.43%80$0.347$26.360.95$16.150.58$82.262.97
12$30.762,573$11.952559.91%73$0.421$28.260.92$28.260.92$28.260.92
13$31.152,752$11.3230611.12%72$0.433$32.701.05$70.642.27$70.642.27
14$25.462,578$9.8827810.78%79$0.322$89.423.51$21.110.83$21.110.83
15$24.262,670$9.0927210.19%67$0.362$36.831.52$10.900.45$10.900.45
16$27.543,024$9.1131310.35%70$0.393$12.250.44$4.990.18$4.990.18
17$13.441,543$8.711409.07%43$0.313$32.912.45$0.000.00$0.000.00
18$0.000011$16.76$0.00$7.12
19$0.00002$11.96$0.00$0.00
20$0.00003$5.76$4.99$9.98
21$0.00002$15.99$0.00$0.00
22$0.00001$12.99$0.00$0.00
23$0.00001$5.76$0.00$0.00
合计$278.2828,955$9.612,8539.85%745$0.374$559.002.01$272.130.98$360.611.30

Meta 自己给这一天的入账合计是 $610.49 · 2.19,走的是它的转化时钟。零投放小时里出现的安装, 是更早那些小时留在转化时钟上的残余,一共 38 个。

分析。 这个 UTC 日里有两段停投,成因不同。01–07 时是账户日 08-01 的尾巴:按账户时钟, CBO 广告组到 17:59 已经花掉 $505.93,超过每天 $500 的预算,于是它自己那一天剩下的时间都不再投。 18–23 时不是这个原因:预算没动,还是每天 $500,到那时只花掉 $271.15,而且同一个账户日里广告 系列后来又重新投了出去,触到预算上限从不会有这种表现。两段停投之间是一段连续的十个投放小时, 08:00 到 17:59,另外还有 00:00 这一个小时,是从上一个账户日的末尾带过来的。

十三个什么都没买到的小时,入账收入 $209.64,对应的当日闭合收入只有 $15.96。 这是当天入账 总额的 37.5% 在零投放的时候到账,占当日闭合总额的 5.9%。光是 02 时就在零花费上入账 $36.50。

投放小时之内,买量是稳的。CPM 在 $8.46 到 $11.95 之间,CTR 在 8.51% 到 11.12% 之间,整段没有 趋势。单次安装成本从 $0.458 一路滑到 $0.313。流量之后的表现就不稳:在实质相同的投放下, 分小时的当日闭合 ROAS 从 0.00 跑到 2.27;同一批流量,11 时的当日闭合读 0.58,观测时长 24 小时 读 2.97。

最后这一对读数就是截断,一行之内就看得见。小时之间要用同期群那一列比,两天之间要用当日闭合 比。

2026-08-05T10:30:24.258157 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 5 10 15 20 25 30 35 40 USD Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 1000 2000 3000 4000 impressions Impressions and installs by hour impressions installs 0 20 40 60 80 100 installs (Meta Leads) The day's motion — whole account, 2026-08-02 (UTC)
当天的走势:分小时花费,展示次数与安装数对照
2026-08-05T10:30:24.485138 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 8.5 9.0 9.5 10.0 10.5 11.0 CTR % CTR 0 4 8 12 16 20 hour (UTC) 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 18 20 22 24 26 28 30 installs / clicks % Click → install 0 4 8 12 16 20 hour (UTC) 0.32 0.34 0.36 0.38 0.40 0.42 0.44 0.46 USD Cost per install Delivery by hour — whole account, 2026-08-02 (UTC)
全账户分小时的 CTR、CPM、点击→安装和 CPI

对比 2026-08-01,逐小时配对

只比较两天都投放过的小时。在这个账户上做日与日对比时,一天之内的时段结构是最大的混杂因素, 所以某一天缺掉的小时直接丢弃,而不是拿它和空的配对。这一段走报表时钟,用的是上面那张表同一个 加载器:花费、展示次数、点击和安装数都落在 Meta 的投放小时上,能精确地跨两个账户日重新拼接。

按 UTC 时钟,两天都投放的小时:00、08、09、10、12、13、14、15、16、17。2026-08-02 另外还投了 11。2026-08-01 另外还投了 01、02、03、04、05、06、07、18、19、20、21、22、23。只比较共同投放小时。

数一下每个共同投放小时指向哪一边,这不需要加权,问的也只是方向:

指标2026-08-02 更高的小时数更低的小时数符号检验
CPM9 of 101 of 10p = 0.021
CTR9 of 101 of 10p = 0.021
点击→安装3 of 107 of 10p = 0.344
CPI8 of 102 of 10p = 0.109

符号检验扔掉幅度,换来一个不需要加权的方向:它回答这一天往哪边动了,永远不回答动了多少。

一次展示的价格几乎在每个小时都涨了,点击率跟着一起涨。 十个共同投放小时里,08-02 的 CPM 有九个更高,CTR 是同样那九个,p 都是 0.021。点击之后的环节不是这个走向:点击→安装有七个更低, p = 0.344,单次安装成本有八个更高,p = 0.109,两个都分不开。CTR 的一部分变动来自结构,因为 pool5 在 08-02 跑了而 08-01 没跑;但结构抬不高一个预算没动的广告组在十个小时里九个小时的 展示价格。

逐小时完整对照,2026-08-01 → 2026-08-02

每一个共同投放小时,2026-08-01 → 2026-08-02。所有列在比值两端都用 Meta 的计量口径。收入是有意不放的:每小时的付费用户只有 0 到 3 人,一列分小时收入等于把一个人的一笔消费当成比率来读。

小时展示次数CPMCTR点击→安装CPI
00370 → 79912.76 → 8.9216.76% → 8.51%38.7% → 23.5%0.197 → 0.446
087,863 → 1,5126.72 → 8.796.79% → 10.98%25.5% → 17.5%0.389 → 0.458
098,151 → 4,2666.83 → 8.466.31% → 8.74%25.1% → 22.0%0.431 → 0.440
105,917 → 4,1197.50 → 10.056.39% → 9.42%25.4% → 24.7%0.462 → 0.431
121,073 → 2,5737.79 → 11.957.74% → 9.91%26.5% → 28.6%0.380 → 0.421
132,469 → 2,7526.94 → 11.328.67% → 11.12%27.1% → 23.5%0.296 → 0.433
143,175 → 2,5787.80 → 9.889.17% → 10.78%27.8% → 28.4%0.306 → 0.322
153,452 → 2,6707.71 → 9.099.21% → 10.19%24.8% → 24.6%0.337 → 0.362
164,177 → 3,0247.04 → 9.118.55% → 10.35%23.8% → 22.4%0.346 → 0.393
175,594 → 1,5436.70 → 8.717.85% → 9.07%26.4% → 30.7%0.323 → 0.313

00 时是 CPM 和 CTR 上唯一的例外,它也是唯一一个不和其余小时同属一个账户日的小时。 它是从 账户日 08-01 的尾巴带过来的,买到 370 次展示,对面是 799 次,而它在 08-01 的 16.76% CTR 是整张 对照表里唯一一个高过 16% 的读数。08:00 到 17:59 这一段连续投放里,每个共同投放小时在两个比率上 都指同一个方向,符号检验因此只剩一个反向小时,而不是对半分。

2026-08-05T10:30:24.730644 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 hour (UTC) 6 8 10 12 14 16 CTR % CTR 2026-08-01 2026-08-02 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 hour (UTC) 7 8 9 10 11 12 13 USD per 1,000 impressions CPM 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 hour (UTC) 20 25 30 35 installs / clicks % Click → install 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 hour (UTC) 0.20 0.25 0.30 0.35 0.40 0.45 USD Cost per install Delivery by hour — 2026-08-02 against 2026-08-01, shared hours only (UTC)
同样四个比率,把前一天叠在当天上,只取共同投放小时

3分国家

这张表的花费列和安装列按账户日切。 Meta 不提供小时 × 国家的交叉表,所以分国家的投放数据 只存在于广告账户自己的 UTC-7 日上,无法重新拼接。收入列走报表的 UTC 时钟,因此表里每一个比值 都跨了七个小时。这张表要看的是结构;想看水平就看括号里 Meta 自己的数字,那是 Meta 的收入 除以 Meta 的花费、落在 Meta 的日子上。不要拿这里的任何水平值去和第 1 节或第 4 节比。

08-02,按花费排序:

花费安装CPI入账ROAS(Meta)当日闭合ROAS同期群 24 小时ROAS
IN$82.03181$0.453$105.631.291.58$50.980.62$58.100.71
US$16.7732$0.524$25.961.551.07$22.971.37$22.971.37
BR$15.9677$0.207$50.923.197.31$50.923.19$117.037.33
ID$14.1951$0.278$4.990.350.35$0.000.00$0.000.00
TR$11.1322$0.506$21.251.913.36$21.251.91$21.251.91
MY$8.5825$0.343$0.000.000.00$0.000.00$0.000.00
PH$7.4946$0.163$0.000.000.00$0.000.00$0.000.00
GB$7.185$1.436$0.000.000.00$0.000.00$0.000.00
IT$6.305$1.260$0.000.000.00$0.000.00$0.000.00
MX$6.2313$0.479$0.000.000.92$0.000.00$0.000.00
TH$5.8615$0.391$0.000.003.75$0.000.00$0.000.00
AU$5.752$2.875$22.083.840.00$22.083.84$28.674.98

同样这些国家,往前一个账户日:

08-01花费安装CPI入账 ROAS(Meta)当日闭合 ROAS同期群 24 小时 ROAS
IN$159.52394$0.4051.562.051.281.51
US$26.8825$1.0752.271.712.272.27
BR$20.7292$0.2253.501.973.503.50
ID$19.2876$0.2542.620.922.622.62
TR$16.6034$0.4881.280.921.281.28
MY$16.5645$0.3682.591.932.592.59
PH$10.7965$0.1665.121.875.125.12

分析。 结构往世界其他地方挪了。前一个账户日,广告账户花掉的 $505.93 里印度拿了 $159.52; 后一个账户日是 $321.07 里的 $82.03,占比从 31.5% 降到 25.5%,而花费本身跌了 48.6%。印度也是 所有有真实量的国家里安装最贵的,$0.453,巴西是 $0.207,菲律宾是 $0.163。

在这个账户上,单独一天撑不起分国家的结论。最扎眼的比值都落在最小的格子上:澳大利亚的 3.84 只有两次安装,英国和意大利的零各只有五次。覆盖整段投放的估算器用一个能用的样本回答同一个 问题,走 Meta 时钟,覆盖 07-30 到 08-03,4,527 次安装,观测时长 12 小时。对照账户合并后每次 安装 $0.463 的水平,印度是 1,283 次安装、账户回报的 0.87 倍,巴西 370 次安装、0.71 倍, 印尼 279 次、0.57 倍,菲律宾 198 次、0.66 倍,马来西亚 116 次、0.65 倍。在这个样本上高过账户的 只有两个国家:美国 120 次安装、2.32 倍,土耳其 119 次、1.78 倍。

这就把当天最扎眼的两个格子放回了原位。巴西在同期群那一列的 7.33 是 77 次安装,而这个国家在 五倍以上的样本里回报是 0.71 倍;澳大利亚的 3.84 是两次安装。两个都不是市场事实。

2026-08-05T10:30:24.882114 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID TR MY PH GB IT MX TH AU 0 10 20 30 40 50 60 70 80 USD spend and installs are a META-day cut (no hour x country grid exists); revenue is the report day Spend against within-day revenue by country — 2026-08-02 spend within-day revenue
分国家的花费与当日闭合收入
2026-08-05T10:30:24.949170 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US BR ID TR MY PH GB IT MX TH AU 0.0 0.5 1.0 1.5 2.0 2.5 3.0 USD per install Cost per install by country — 2026-08-02 (META day)
分国家的单次安装成本

4汇总:两日对比

按 UTC 时钟,在两天都投放的 10 个小时上合并。每一个比值两端都用 Meta 的计量口径。

花费展示次数CPM点击量CTR安装数点击→安装CPI
2026-08-01$301.3942,2417.143,1907.55%82625.89%$0.365
2026-08-02$250.5525,8369.702,5599.90%62724.50%$0.400

跨小时合并是一次结构对比。 它按每个小时投放了多少来加权,所以只要一天在一天之内买的位置 不同,这几行就会动,哪怕没有任何一个小时本身发生变化。分小时那一节的逐小时配对,是同样两天的 不加权读法;两者对不上的时候,动的是结构。

在这两天上,两种读法是一致的。 合并看,CTR 从 7.55% 走到 9.90%,p = 0.000,点击→安装从 25.89% 走到 24.50%,p = 0.228;第 2 节按小时数,CTR 十个里有九个更高,p = 0.021,点击→安装 七个更低,p = 0.344。两种读法都把 CTR 判成上涨,也都没能把点击→安装读出结果,合并后的 CPM 和 单次安装成本两行,走向和它们的符号检验已经给出的一致。配对两侧都没有哪一个小时在被比较的展示 次数里占主导,所以加权和不加权这两种读法之间没有什么可以拉开。

如果把比较固定在一条两天都跑过的素材上,就只能走广告账户自己的时钟:共同投放小时的计算把每个 格子键在(广告系列,广告组,广告,账户日,账户小时)上,它那套共同小时的逻辑只有对着 Meta 自己的投放日才成立。下面是账户日 08-02 对账户日 08-01,相对本报告其他所有表格是一对偏移七小时 的窗口,水平值和它们对不上。只用两个账户日都投放的九个小时,因为一天之内的时段结构是最大的 混杂因素:01、02、03、05、06、07、08、09、10。

这里的安装数按格子归因、带回溯分配,相对 Meta 的 Leads 和原始注册时间戳,这是第三种计量口径。 这个子集在 H=24 上的同期群覆盖率两天都是 100%

展示次数点击量CTR安装数点击→安装付费用户付费率ROAS
08-01 合并41,8713,1287.47%89628.64%364.02%1.50
08-02 合并25,0372,4919.95%67126.94%253.73%1.04
bodysuit 08-0125,6751,9977.78%55127.59%203.63%1.52
bodysuit 08-0212,8891,0738.32%31829.64%72.20%0.72
bikini 08-0110,9107626.98%23931.36%104.18%1.22
bikini 08-023,10531810.24%7222.64%68.33%1.25

bikini 的共同窗口是四个小时:02、03、05、06;bodysuit 是全部九个。

那个合并漏斗里也没有任何一项能把两天分开。点击→安装跌 6.0%,p = 0.156;付费率跌 7.3%, p = 0.767。固定到 bodysuit,点击→安装涨 7.4%,p = 0.230,付费率跌 39.4%,p = 0.242,底下是 七个付费用户。

bikini 的点击→安装下跌取决于用哪套口径,不能当成定论引用。 按上面那套按格子归因的口径, 它是 31.36% → 22.64%,跌 27.8%,p = 0.004。在同样四个小时上改用 Meta 自己的点击和安装重算, 是 25.72% → 20.75%,跌 19.3%,p = 0.083。一条素材,一个漏斗环节,两套都站得住的口径,两个分居 0.05 两侧的结论,底下 72 次安装。样本太薄,定不下来,而 bikini 的付费率在同样这些格子上往 反方向动了 99%,p = 0.162。

所以点击之后的漏斗,在这两个账户日之间没有实质差别。动的是展示的价格。

回到报表时钟,两天在三种口径上的读数:

08-0108-02
花费$733.94$278.28
安装数1,963745
单次安装成本$0.374$0.374
入账收入$1,110.93 · 1.51 (Meta 1.59)$559.00 · 2.01 (Meta 2.19)
当日闭合收入$980.99 · 1.34$272.13 · 0.98
同期群 24 小时$1,163.16 · 1.58$360.61 · 1.30
同期群 24 小时覆盖率100%,已走完100%,已走完

入账收入按付费用户实际安装的 UTC 日拆开:

付费用户的安装日08-01 的入账收入08-02 的入账收入
当天本身$980.99 (88.3%)$272.13 (48.7%)
前一天$129.94 (11.7%)$239.67 (42.9%)
前两天$47.20 (8.4%)

分析。 拆分表的第一行就是当日闭合收入。 $980.99 和 $272.13 在两处都出现。当日闭合收入 是这一天在自己入账收入里占的那一份,所以两个口径之间的差额就是继承下来的同期群,没有别的东西。

08-01 两者几乎一致,1.51 对 1.34,因为到账的钱有 88.3% 是当天赚的。08-02 两者拉得很开, 2.01 对 0.98,因为不到一半是当天赚的。一天花得更少,而前几天的买家还在继续付钱,这样的日子在 入账收入上一定好看,在 Meta 版本的入账收入上更好看。这就是这个口径按定义该有的行为。

有两件事限定了 0.98 这个数能被推到多远:

两边都不能拿累积不足来解释:两个同期群在观测时长 24 小时上都是 100% 覆盖,08-02 最年轻的一次 安装在支付记录截取时点已经有 61.4 小时。

2026-08-05T10:30:25.031280 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 200 400 600 800 1000 1200 USD 1.51 1.34 1.58 2.01 0.98 1.30 the number above each bar is that measure's ROAS against the same day's spend The three revenue measures, 2026-08-01 against 2026-08-02 (UTC) 2026-08-01 2026-08-02
两天的三种收入口径,每根柱子上方标 ROAS
2026-08-05T10:30:25.098031 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-08-01 2026-08-02 0 200 400 600 800 1000 USD the bottom segment IS the within-day figure: the same number seen twice Booked revenue by the day its payer installed (UTC) the day itself one day earlier two days earlier three days earlier four or more
入账收入按付费用户的安装日拆分

5分广告组,分小时

这个广告系列只有一个 CBO 广告组,里面装着三条广告,所以广告组这一行就是整个账户,能分开的 层级是广告;这里的行按素材标注。

只取投放小时,单一时钟的指标,按 UTC 日。bodysuit 投了 11 个小时,pool5 10 个,bikini 9 个;三条一起跑的是 09:00 到 17:59 这九个小时。

08-02花费展示次数CPM点击量CTR安装数点击→安装CPI
ww_bodysuit_10s$129.1515,331$8.421,2648.24%36729.03%$0.352
ww_pool5_15s$77.056,942$11.1093113.41%21322.88%$0.362
ww_bikini_10s$72.086,682$10.796589.85%16525.08%$0.437

两个 UTC 日都跑过的两条素材:

08-01花费展示次数CPM点击量CTR安装数点击→安装CPI
ww_bodysuit_10s$432.4256,102$7.714,7338.44%1,23526.09%$0.350
ww_bikini_10s$301.5236,344$8.302,7827.65%72826.17%$0.414

分析。 pool5 买的展示最贵,转化也最好;bodysuit 反过来。相对 bodysuitpool5 每次 展示多付 31.8%,从这些展示里多拿 62.7% 的点击,再把其中少 21.2% 的点击转成安装。三个效应几乎 抵消,最后它在单次安装成本上落后 2.8%。bikini 明显是第三,$0.437,付的展示价格接近 pool5, 点击率只有它的三分之二。

日与日之间,两条回来的素材走法不同。bodysuit 的展示价格涨 9.2%,点击率滑了 2.4%,但它多转化 了 11.3% 的点击,单次安装成本因此和前一天只差 0.6%。bikini 的展示价格涨 30.0%,点击率涨 28.8%,两边抵消,每次安装多付 5.6%。所以账户合并后持平的单次安装成本,是两条各自只动了 0.6% 和 5.6% 的素材,加上 pool5 以 $0.362 进场、占 27.7% 的花费。它不是一个把底下的变动盖住的 平均值。

2026-08-05T10:30:25.181663 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 6 8 10 12 14 16 CTR % CTR by hour — every asset, 2026-08-02 (UTC) earner/bodysuit earner/pool5 earner/bikini
分小时 CTR,每条素材一条线
2026-08-05T10:30:25.332170 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 15 20 25 30 35 40 45 installs / clicks % Click → install by hour — every asset, 2026-08-02 (UTC) earner/bodysuit earner/pool5 earner/bikini
分小时点击→安装,每条素材一条线
2026-08-05T10:30:25.399328 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 USD Cost per install by hour — every asset, 2026-08-02 (UTC) earner/bodysuit earner/pool5 earner/bikini
分小时单次安装成本,每条素材一条线
2026-08-05T10:30:25.248271 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 8 10 12 14 USD per 1,000 impressions CPM by hour — every asset, 2026-08-02 (UTC) earner/bodysuit earner/pool5 earner/bikini
分小时 CPM,每条素材一条线

6分广告组 × 国家

花费和安装数是第 3 节说的账户日切法;收入走 UTC 日。 只列花费超过 $3 的格子,按花费排序。

素材国家花费安装CPI入账当日闭合ROAS同期群 24 小时ROAS
bodysuitIN$37.7892$0.411$51.09$11.520.30$11.520.30
pool5IN$23.9547$0.510$11.52$11.520.48$11.520.48
bikiniIN$20.2942$0.483$43.03$27.951.38$35.071.73
bodysuitUS$8.9818$0.499$7.98$4.990.56$4.990.56
bodysuitBR$6.8343$0.159$10.26$10.261.50$76.3711.18
bodysuitID$5.7627$0.213$4.99$0.000.00$0.000.00
pool5BR$5.5022$0.250$35.53$35.536.46$35.536.46
pool5ID$5.1014$0.364$0.00$0.000.00$0.000.00
bodysuitMY$5.0510$0.505$0.00$0.000.00$0.000.00
bodysuitPH$4.4228$0.158$0.00$0.000.00$0.000.00
bodysuitMX$4.3511$0.396$0.00$0.000.00$0.000.00
bikiniUS$4.137$0.590$17.98$17.984.35$17.984.35
bodysuitTR$4.084$1.020$5.89$5.891.44$5.891.44
bikiniTR$4.028$0.503$5.89$5.891.47$5.891.47
bodysuitAU$3.852$1.925$0.00$0.000.00$0.000.00
pool5US$3.667$0.523$0.00$0.000.00$0.000.00
bikiniBR$3.6312$0.303$5.13$5.131.41$5.131.41
bikiniTH$3.335$0.666$0.00$0.000.00$0.000.00
bikiniID$3.3310$0.333$0.00$0.000.00$0.000.00
pool5TR$3.0310$0.303$9.47$9.473.12$9.473.12

分析。 三条素材最大的一行都是印度,在观测时长 24 小时上分别读 0.30、0.48 和 1.73。巴西读 11.18、6.46 和 1.41。这两组读数的跨度和国家之间的跨度一样宽,而每个格子底下只有一两个付费 用户,所以在这个格子规模上素材和国家都分不开,这张表是用来定位收入的,不是用来排名的。

定位这件事它做得好。每条素材的当日闭合数字都靠着一个人。bodysuit 最大的单个付费用户占它 $100.67 的 42.3%,也就是 $42.58,正好是 09 时的当日闭合合计。pool5 最大的那个占它 $105.65 的 33.6%,$35.53,正好是它整个巴西格子。bikini 最大的那个占它 $65.81 的 27.3%,$17.98,正好是 它整个美国格子。三条素材,三个摆在台面上的数字,底下各压着一笔消费。

bodysuit 的巴西行还把截断直接摆了出来:当日闭合 $10.26,24 小时口径 $76.37。这个格子赚到的 钱大部分是在 UTC 午夜之后、买家到来之后的一天之内付的。

2026-08-05T10:30:25.501344 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/pool5 earner/bikini 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-02 (META day) IN US BR ID TR MY other
每条素材买在哪里:各地区占它自己花费的比例
2026-08-05T10:30:25.578267 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/pool5 earner/bikini 0.0 0.2 0.4 0.6 0.8 1.0 USD per install Cost per install by region — every asset, 2026-08-02 (META day) IN US BR ID TR MY
分地区的单次安装成本,全部素材
2026-08-05T10:30:25.641819 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ earner/bodysuit earner/pool5 earner/bikini 0 5 10 15 20 25 30 35 USD Within-day revenue by region — every asset, 2026-08-02 (META day) IN US BR TR
分地区的当日闭合收入,全部素材

地区图承接第 3 节的口径限制,画在账户日的国家切法上。

7分广告组,汇总,三种口径

下面三张表是固定素材区块,由 report_tables.py 生成,原样贴入。这一系列的每一份报告里, 它们的列和列序都相同,所以任意两天都能对着读。

A. 分素材:投放端

每个比值两端都用 Meta 的计量口径。我们自己的注册数据完全不进这张表。

素材花费展示次数CPM点击量CTR安装数点击→安装CPI
earner/bodysuit$129.1515,3318.421,2648.24%36729.03%$0.352
earner/pool5$77.056,94211.1093113.41%21322.88%$0.362
earner/bikini$72.086,68210.796589.85%16525.08%$0.437

B. 分素材:三种收入口径

每一列都是我们自己的口径。Meta 只能表达 booked 这一个,所以它括在那一列旁边,永远不单独成行。付费用户是去重的人数,不是交易笔数。同期群观测时长 H=24h,这一天覆盖率 100%。报表时钟 UTC

素材入账bROAS (Meta)当日闭合wROAS同期群@HcROAS付费用户付费率ARPUARPPU最大付费用户
earner/bodysuit$350.232.71 (3.14)$100.670.78$175.441.36133.3%0.2577.7442.3%
earner/pool5$105.651.37 (1.34)$105.651.37$112.241.46104.4%0.47010.5733.6%
earner/bikini$103.121.43 (1.42)$65.810.91$72.931.0195.0%0.3687.3127.3%

16 付费用户门槛(#37):上面任何一行,只要付费用户数不到 16,就只能看方向,不能看幅度。

C. 分素材:国家结构

这张表按账户日切,不是 UTC 日。 Meta 不提供小时 × 国家的交叉表,所以分国家的投放数据只存在于广告账户自己的 UTC-7 日上,无法重新拼接。相对上面的 A 表和 B 表,它是一个偏移七小时的窗口;看结构可以,绝不能拿它和它们比水平。

这张表说明 B 表里某一行能不能读。最后一列是这条素材自己的当日闭合收入里来自美国的比例:只要它远高于美国的花费占比,这条素材买到的就是一块地域,而不是赚到了一个结果。

素材花费印度 %美国 %其他 %美国占它收入的 %
earner/bodysuit$153.9424.5%5.8%69.6%5.0%
earner/pool5$85.6528.0%4.3%67.8%0.0%
earner/bikini$82.0724.7%5.0%70.2%27.3%

分析。 哪条素材最好,取决于读哪个口径,而各个口径给出的答案对不上。

按当天的入账收入,bodysuit 遥遥领先,2.71 对 1.37 和 1.43,Meta 读得还要高,3.14。按它自己的 流量算,它在当日闭合上垫底,0.78。pool5 说明了原因:它的入账和当日闭合是同一个数, $105.65。 08-01 的 UTC 日它一点量都没买,07-30 和 07-31 收来的买家也没有一个在这个 UTC 日里 付钱,所以记在它头上的每一块钱都来自当天安装的人。bodysuitbikini 在这之前的两个 UTC 日 都投放过,bodysuit 被记上的钱里有 71.3%、bikini 有 36.2%,是更早安装的人付的。只要哪一天 花费下降,入账收入就会把老买家存量最大、而且这些人还在付钱的那条素材推到前面。

不受小时影响的口径把差距收窄了,而不是确认了它。在观测时长 24 小时上,pool5 以 1.46 领先, bodysuit 1.36 在后,bikini 1.01 垫底。bodysuit 从 0.78 跳到 1.36,就是第 4 节说的那个 截断:它在 UTC 日里投得最晚,光是巴西一个格子就从当日闭合的 $10.26 变成 24 小时口径的 $76.37。

2026-08-05T10:30:25.733114 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 day (UTC) 0 1 2 3 4 5 6 7 8 payers / installs % Payer rate by day — every asset (UTC) earner/bodysuit earner/bikini E2/bikini E2/bodysuit E2/pool5 E2/mugshot earner/pool5 E2/spill E2/spill2
每天的付费率,每条素材一条线
2026-08-05T10:30:25.824986 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 day (UTC) 0.0 0.2 0.4 0.6 0.8 1.0 1.2 within-day USD per install ARPU by day — every asset (UTC) earner/bodysuit earner/bikini E2/bikini E2/bodysuit E2/pool5 E2/mugshot earner/pool5 E2/spill E2/spill2
每天的 ARPU(每安装收入),每条素材一条线
2026-08-05T10:30:25.925764 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 day (UTC) 0 5 10 15 20 25 within-day USD per payer ARPPU by day — every asset (UTC) earner/bodysuit earner/bikini E2/bikini E2/bodysuit E2/pool5 E2/mugshot earner/pool5 E2/spill E2/spill2
每天的 ARPPU(每付费用户收入),每条素材一条线
2026-08-05T10:30:26.022938 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 08-01 08-02 08-03 08-04 day (UTC) 0.0 0.5 1.0 1.5 2.0 revenue / spend Within-day ROAS by day — every asset (UTC) earner/bodysuit earner/bikini E2/bikini E2/bodysuit E2/pool5 E2/mugshot earner/pool5 E2/spill E2/spill2
每天的当日闭合 ROAS,每条素材一条线

上面四张图里的空心点表示未过 16 付费用户门槛,而这一天所有点都是空心的。安装数不到 20 的素材 不进下面的合成图,也不进第 6 节的地区图:四次安装出一个付费用户,在归一化的收入轴上就到 1.0, 会把每一条真实的实验臂压到图的底部。

2026-08-05T10:30:26.123626 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ CTR click→install CPI payer rate * ARPU * wROAS * 0.0 0.2 0.4 0.6 0.8 1.0 normalised across the day (1.0 = best of the pack) * axis sits under the 16-payer bar on most days: direction only, never a level. Assets under 20 installs on the day are not plotted. Composite — every asset across every measure, 2026-08-02 earner/bodysuit earner/pool5 earner/bikini
合成图:所有素材在所有口径上的表现,按当天归一化

同预算区间、结构中性的切法

估算器把每个格子键在账户日和账户小时上,它的预算区间以 Meta 时钟上的具体时刻为界:预算是在 账户时钟 04:10 改的,那就是事件本身。所以下面这张表走 Meta 的时钟,跨的是完整的预算区间而不是 一天,观测时长 12 小时。结构中性这一列把每条素材的回报,按它所在预算区间合并后的国家结构 重新折算,回答的是「如果这条素材买的国家和它的同伴一样,它会跑成什么样」。

素材预算区间$/天安装数花费CPMCTR印度占比CPI同期群 12 小时 ROAS结构中性
ww_bikini_10sR5500352$135.1$10.169.57%27%$0.3841.521.54
ww_bodysuit_10sR55001,430$501.2$8.578.37%29%$0.3511.181.20
ww_pool5_15sR5500309$116.6$10.9512.20%19%$0.3771.111.02
ww_bikini_10sR4875732$286.7$8.337.62%32%$0.3921.171.17
ww_bodysuit_10sR4875488$144.2$6.167.86%39%$0.2961.451.45

R5 内部,两条最大的实验臂的 95% 置信区间是 bikini 0.73–2.51、bodysuit 0.82–1.60,估算器 自己的受众检验算出它们的国家结构相互只值 +1.5%,而这个区间跨过零。

在 Meta 时钟上按完整预算区间来看,排序又变了。R5 里三条都跑在每天 $500,bikini 以 1.52 领先, bodysuit 1.18,pool5 1.11 垫底,而结构中性这一列说这里面没有一项是国家结构造成的假象: 它把 bikinibodysuit 各抬 0.02,把 pool5 压低 0.09。整个 R5 里 pool5 买的结构是三条 中最便宜的,印度占 19%,把这个优势去掉之后它仍然垫底。同时 bikini 在 R4、每天 $875 时是 1.17,在 R5、每天 $500 时是 1.52,印度占比从 32% 变到 27%:预算是地域旋钮,跨过一次预算改动 得出的结论,说的是预算。

所以按天和按预算区间在 pool5 上给的答案是相反的,两个都不足以定案。 它的领先建立在一个 UTC 日、十个付费用户,以及一笔占它三分之一收入的消费上。它的同预算区间数字覆盖整个 R5,把它 排在两条同伴之后,底下是 309 次安装,bodysuit 是 1,430 次。R5 的置信区间几乎完全重叠。不靠 样本量争论也能说的是:pool5 的 CTR 领先超过一半,单次安装成本和最便宜的那条只差 3% 以内, 而且它至今还没有在一个自己也带着继承同期群的日子里被读过。

8口径与边界

9要把这些问题定下来,需要什么

问题需要什么
pool5 在当日闭合上的领先是真的,还是因为它新?一个它自己也带着继承同期群的日子。它在整个 R5 上的同预算区间数字是 1.11,落后两条同伴,所以日级别的领先目前还没有旁证
印度的折价有多大?覆盖整段投放的读法算出印度是账户水平的 0.87 倍,底下 1,283 次安装,折价是真实的,但比任何单独一天显示的都小得多。给它一个自己的广告组和自己的预算,才能定下来这个折价能不能绕开
巴西的暴涨是真的吗?更多付费用户。在整段投放的 370 次安装上,巴西回报是账户的 0.71 倍,所以当天那个数字是一笔消费,不是一个市场
到底哪条素材赢?E2 的随机分流。在这样的付费用户数下,这个广告系列的结构没有任何东西能把一个 CBO 广告组里的三条素材分开

10交给 E2 的东西

按 Meta 时钟,CBO 广告组在 08-03 的 04:20 停止投放,接替它的是 E2:一个随机素材测试,每个 ABO 广告组只放一条素材。

要超过的基准是 UTC 时钟上当日闭合 ROAS 0.98、单次安装成本 $0.374,或者观测时长 24 小时上的 1.30。不是入账的 2.01,也不是 Meta 记的 2.19。 E2 的每一条实验臂都是全新的,因此没有继承 同期群,就像 pool5 在 08-02 一个都没攒到一样;拿一条 E2 实验臂去比这个广告系列的入账数字, 等于用当期新增去比累计存量,会让 E2 显得比实际差。当日闭合比当日闭合,同期群 24 小时比同期群 24 小时。印度仍然占买量的四分之一,价值是账户的 0.87 倍,任何素材测试都碰不到这一点。

11附录:报表时钟、三种口径与预算区间

报表日是 UTC 日,为的是和 Adjust 对齐。Meta 的分小时导出按广告账户自己的时区 UTC-7 打时间 戳,所以上面每一个投放数字都是从两个账户日重新拼接出来的:08-01 17:00–23:59 和 08-02 00:00–16:59。

三种收入口径贯穿每一张表,彼此从不混用。

口径统计什么这一天结束后还会变吗
入账收入在这个 UTC 日之内到账的钱,无论付钱的人哪天安装。它继承更早的买家午夜之后几个小时结算完,之后固定。Meta 自己的数字就是这个口径
当日闭合收入当天安装并且在这一天结束前付了钱的人不会。午夜封存
同期群 24 小时当天的安装,按每个人自己安装之后的 24 小时来计,这样就去掉了早上安装相对晚上安装的优势会涨,直到每一次安装都满 24 小时。这里两天都已走完

三个都读我们自己的支付记录,Meta 的数字括在入账收入旁边,永远不单独占一行。两者之间的口径 校验走 Meta 时钟,在那里它的转化价值可以对着它所属的那一天来读;两个账户日上,我们的记录分别 是 Meta 入账价值的 0.94 和 0.91,落在已记录的 0.91–1.06 区间里。

两套口径统计的安装人群不同。 Meta 归因出 1,963 和 745 次安装;我们自己的记录把 2,134 和 795 条注册系到这些广告上。本报告里每一个 ROAS 都是收入除以花费,两个数都没有用到。安装数和 单次安装成本这两行用的是 Meta 的。

预算区间是广告组日预算没有发生变化的一段时间。 它之所以重要,是因为在这个账户上预算是 地域旋钮:调高预算就会买到更宽、更便宜的国家,所以跨过一次预算改动去测两条素材,比的是不同 的受众。

这两天不在同一个预算区间,这一条限定了报告里的每一次对比。 08-02 整天都落在一个预算区间 里,R5,每天 $500,按 Meta 时钟它从 08-01 04:10 跑到 08-03 04:20。08-01 不是:它的窗口开在 更早一段每天 $500 设置的尾巴上,中间跑在每天 $875,UTC 11:10 又回到每天 $500,它的花费里 $435.60 落在这次改动之前,$298.34 落在之后。这是时钟造成的,不是买量造成的。预算区间要从 Ads Manager 的操作历史里读,任何导出文件都还原不出来。

12复现

报表日 2026-08-02 00:00 → 24:00 UTC,从账户日 08-01 17:00–23:59 和 08-02 00:00–16:59 重新 拼接,账户固定在 UTC-7。所以一次 UTC 口径的拉取,除了当天的分小时导出,还需要前一个账户日的。 支付记录截取到 2026-08-05 10:59 UTC,这让 08-02 的安装有 61.4 到 82.9 小时、08-01 的有 83.1 到 106.9 小时,两个 24 小时同期群因此都已走完。国家数字来自一次全账户的 Country × Day 拉取,按账户日切。

Meta 的行按 Ad ID 选取,不按广告组名或素材名:E2 的素材名和这个广告系列的逐字节相同, 而它的第一个广告组在 08-02–08-03 有十个小时也叫 ww_broad_purchase_adv_cbo150。按名字过滤会 多归因约 70%。

cd C:/Projects/VideoGenAI_Related
CFG=_runs/2026-08-05_0804_settled/run_config.json          # tz: UTC
python -m ad_ops.measures      --config $CFG --day 2026-08-02 --prev 2026-08-01
python -m ad_ops.cohort_arpu   --config $CFG --days 2026-07-31,2026-08-01,2026-08-02
python -m ad_ops.report_tables --config $CFG --day 2026-08-02 --prev 2026-08-01
python -m ad_ops.report_charts --config $CFG --day 2026-08-02 --prev 2026-08-01 \
    --days 2026-07-31,2026-08-01,2026-08-02 \
    --out ad_ops/figures/2026-08-02 --relpath figures/2026-08-02

# META clock — the instrument gate, §4's per-creative tests, and the regime table
python -m ad_ops.measures --config _runs/2026-08-05_0804_settled/run_config_meta.json \
    --day 2026-08-02 --prev 2026-08-01
python -m ad_ops.day_compare --config $CFG --today 2026-08-02 --prev 2026-08-01 --h 24 \
    --campaign bailingxia_meituan_ww_cvr_260730 --ads ww_bikini_10s,ww_bodysuit_10s,ww_pool5
python -m ad_ops.asset_estimator hourly --horizon 12 \
    --meta ad_ops/_data/b1_meta_exports/B1-Ads-Jul-30-2026-Jul-30-2026.csv \
           ad_ops/_data/b1_meta_exports/B1-Ads-Jul-31-2026-Jul-31-2026.csv \
           _runs/2026-08-03_aug2_hourly/exports/ads_hourly_aug1_settled.csv \
           _runs/2026-08-03_aug2_hourly/exports/ads_hourly_aug2_settled.csv \
           _runs/2026-08-04_e2_start_and_0803_report/exports/ads_hourly_aug3_settled.csv \
    --lum _runs/2026-08-05_0804_settled/lum \
    --fx  _runs/2026-08-02_today_read/fx_rates.json \
    --ads ww_bikini,ww_bodysuit,ww_pool5

report_tables --prev 会输出第 2 节的共同投放小时配对、第 4 节的合并漏斗,以及第 7 节的三张 固定表格。report_charts 会写出全部十九张图,以及按小节分块的图片链接。

如果前一个账户日的分小时导出缺失,measures 这一步会直接报出缺的是哪一个文件,而不是把 UTC 日的前七个小时填成偏低的数字。估算器出于反方向的同一个原因需要 08-03 的分小时文件:广告系列 跨过午夜还在投放,没有这个文件,attach_cohorts 会把午夜之后的每一次安装都带回到 08-02 的 最后一个格子里。

Internal — noindex. Not for distribution outside the team.