每日投放报告:2026-08-03,对比 2026-08-02

这个 UTC 日里有两个广告系列在买量,而且没有共用过任何一个小时。原有的全球投放广告系列从 UTC 04:00 开始投,到 11:20 被关掉;一个新搭的广告系列带五个广告组、每组一条素材、日预算各 $100,从 12:44 开始投,一直跑到午夜。两者合计花费 $445.83,按 Meta 的口径买到 766 次安装,按我们自己的记录是 805。报表时钟、三种收入口径和预算区间的定义在附录。

1总览

2026-08-022026-08-03
花费$278.28$445.83
展示次数28,955213,053
CPM(千次展示成本)$9.61$2.09
链接点击量2,8535,649
CTR(点击率)9.85%2.65%
安装数(Meta)745766
点击→安装26.1%13.6%
单次安装成本(CPI)$0.374$0.582
安装数(我们的记录)795805
入账收入$559.00 · ROAS 2.01 (Meta $610.49 / 2.19)$709.35 · ROAS 1.59 (Meta $738.83 / 1.66)
当日闭合收入$272.13 · ROAS 0.98$397.69 · ROAS 0.89
同期群 24 小时$360.61 · ROAS 1.30 · 覆盖率 100%$474.05 · ROAS 1.06 · 覆盖率 100%
当日闭合付费用户3239
当日闭合 ARPU / ARPPU$0.342 / $8.50$0.494 / $10.20

⚠ 08-03 的混合投放各列不能用,也不能被引用。 一条广告(spill)买走了当天 85.7% 的展示次数,而它自己 99.6% 的展示落在同一个小时里,CPM 只有 $0.52。就是这一个小时,把账户 CPM 拖到 $2.09、CTR 拖到 2.65%、点击→安装拖到 13.6%,这三个数没有一个代表得了这一天。把这条广告剔掉:

08-0208-03 混合08-03 剔除 spill
花费$278.28$445.83$336.11
展示次数28,955213,05330,405
CPM$9.61$2.09$11.05
CTR9.85%2.65%8.61%
点击→安装26.1%13.6%26.5%
单次安装成本$0.374$0.582$0.485

按诚实的那组数字,这一天是变贵了,转化没有变差。 展示次数多 5%,CPM 高 15%,点击转安装的比率持平(26.5% 对 26.1%),每次安装贵 30%。花费涨 21%,而 Meta 记的安装数掉 7%,这一天的变化全在这里。

三种收入口径同时下跌,所以这个方向不是口径造成的假象。 入账收入 2.01 → 1.59,当日闭合收入 0.98 → 0.89,同期群 24 小时 1.30 → 1.06。

2分小时:2026-08-03

投放各列,比值两端都取 Meta 的计量口径;付费用户数、ARPU 和 ARPPU 两端都取我们自己的。两套安装数从不交叉使用。入账收入挂在付款小时上,当日闭合收入和同期群挂在安装小时上。小时为 UTC。

小时花费展示CPM点击CTR安装点击→安装CPI入账$bROAS闭合$wROAS闭合付费同期群$cROAS
00.000038.750.000.0000.000.00
10.0000160.760.000.0000.000.00
20.0000041.690.000.0000.000.00
30.0000126.210.000.0000.000.00
45.6551510.975811.26%1017.2%0.5656.471.140.000.0000.000.00
519.642,0099.781899.41%3820.1%0.51710.730.554.990.2514.990.25
624.632,4719.972228.98%6127.5%0.40426.321.0720.060.81320.060.81
727.852,8049.932428.63%5422.3%0.51625.870.9336.631.32440.191.44
830.143,4208.812667.78%6223.3%0.48623.950.7978.622.61578.622.61
929.743,7267.982947.89%7726.2%0.38638.961.3129.981.01348.721.64
1029.543,2039.222507.81%6124.4%0.48419.710.6714.710.50214.710.50
119.081,0468.68999.46%3535.4%0.25952.185.7549.725.48449.725.48
120.29338.79412.12%4100.0%0.07315.5653.670.000.0000.000.00
1318.841,59011.851116.98%2522.5%0.75421.601.1520.411.08326.311.40
14107.17182,8050.593,0001.64%612.0%1.75721.960.200.000.00019.160.18
158.108239.84769.23%2127.6%0.38638.224.725.630.7015.630.70
1614.191,08013.14948.70%2425.5%0.59187.446.1623.201.63223.201.63
1716.031,26712.651038.13%2423.3%0.66822.861.435.760.3615.760.36
1818.311,18115.501079.06%3229.9%0.57228.871.5825.771.41434.941.91
1921.441,26316.981219.58%3327.3%0.65018.880.8832.521.52132.521.52
2018.581,14116.2811610.17%4034.5%0.4659.160.490.000.0006.840.37
2119.931,04619.0512912.33%3426.4%0.58623.221.170.000.0000.000.00
2213.6685915.909511.06%3637.9%0.37948.373.5418.101.33321.771.59
2313.0277116.89739.47%2939.7%0.44931.592.4331.592.43240.923.14
合计445.83213,0532.095,6492.65%76613.6%0.582709.351.59397.690.8939474.051.06

14 时这一行就是这一天全部的异常。 $107.17 买到 182,805 次展示,CPM $0.59,其他每个有投放的小时都在 $8 到 $19;它把 2.0% 的点击转成安装,而其他每个买到一百次以上点击的小时都在 17% 到 40%;61 次安装带回的当日闭合收入是。这一个小时占当天花费的 24.0%、展示次数的 85.8%。

前四行没有花费,却有入账收入。那几个小时没有人在买量,但前一天和前两天安装的人还在付钱,这正是入账口径要计的部分,另外两个口径不计。

每小时的付费用户数在 0 到 5 之间,所以分小时的 ARPPU 是某一个人的一笔账,不是一个比率。水平看合计那一行,各小时只看形状。这张表里干净的信号是 CPM 走势,因为它的分母是展示次数而不是付费用户:原有广告系列那几个小时(04:00–11:00)在 $7.98 到 $10.97 之间,没有趋势;新广告系列那几个小时从 13:00 的 $11.85 一路爬到 18:00–23:00 的 $15.50 和 $19.05。

2026-08-05T10:30:27.056632 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 3 6 9 12 15 18 21 hour (UTC) 0 20 40 60 80 100 USD Spend by hour 0 3 6 9 12 15 18 21 hour (UTC) 0 25000 50000 75000 100000 125000 150000 175000 impressions Impressions and installs by hour impressions installs 0 10 20 30 40 50 60 70 80 installs (Meta Leads) The day's motion — whole account, 2026-08-03 (UTC)
这一天的走势:分小时花费,以及展示次数对安装数
2026-08-05T10:30:27.279759 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 4 8 12 16 20 hour (UTC) 2 4 6 8 10 12 CTR % CTR 0 4 8 12 16 20 hour (UTC) 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 USD per 1,000 impressions CPM 0 4 8 12 16 20 hour (UTC) 5 10 15 20 25 30 35 40 installs / clicks % Click → install 0 4 8 12 16 20 hour (UTC) 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 USD Cost per install Delivery by hour — whole account, 2026-08-03 (UTC)
全账户分小时的 CTR、CPM、点击→安装与 CPI

对比 2026-08-02:逐小时对齐

只比较两天都有投放的小时。在这个账户上做日环比,一天之内的时段结构是最大的混杂因素,所以只要有一天缺了某个小时,这个小时就整个丢掉,不拿去和空值配对。这一段按报表时钟计算,读表的代码和上面那张表是同一套,因为花费、展示次数、点击和安装都挂在 Meta 的投放小时上,跨两个账户日可以精确重新拼接。

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

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

指标2026-08-03 更高的小时数更低的小时数符号检验
CPM9 个里 5 个9 个里 4 个p = 1.000
CTR9 个里 1 个9 个里 8 个p = 0.039
点击→安装9 个里 5 个9 个里 4 个p = 1.000
CPI9 个里 7 个9 个里 2 个p = 0.180

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

只有一个比值分得开,是 CTR。 9 个共同投放小时里有 8 个在 08-03 更低,p = 0.039,这是这一天本身的性质,不属于其中某一个小时。CPM 和点击→安装在不加权的计数上各自都是抛硬币,p 都是 1.000;CPI 有 7 个小时偏贵,但没过 0.05。最后这一条,正是价格上涨在九小时样本上会呈现的样子:数得出来,还判不了。第 4 节的合并行在同样这九个小时上读出点击→安装 −62.8%、p = 0.000,和这里的小时计数正好相反,而两种读法同时跑,为的就是把这种不一致摆出来。

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

每一个共同投放小时,2026-08-02 → 2026-08-03。所有列的每个比值,两端都是 Meta 的计量口径。这里刻意不放收入:每小时的付费用户数在 0 到 3 之间,收入列会把某一个人的一笔账当成比率来读。

小时展示次数CPMCTR点击→安装CPI
081,512 → 3,4208.79 → 8.8110.98% → 7.78%17.5% → 23.3%0.458 → 0.486
094,266 → 3,7268.46 → 7.988.74% → 7.89%22.0% → 26.2%0.440 → 0.386
104,119 → 3,20310.05 → 9.229.42% → 7.81%24.7% → 24.4%0.431 → 0.484
113,119 → 1,0468.89 → 8.689.43% → 9.46%27.2% → 35.4%0.347 → 0.259
132,752 → 1,59011.32 → 11.8511.12% → 6.98%23.5% → 22.5%0.433 → 0.754
142,578 → 182,8059.88 → 0.5910.78% → 1.64%28.4% → 2.0%0.322 → 1.757
152,670 → 8239.09 → 9.8410.19% → 9.23%24.6% → 27.6%0.362 → 0.386
163,024 → 1,0809.11 → 13.1410.35% → 8.70%22.4% → 25.5%0.393 → 0.591
171,543 → 1,2678.71 → 12.659.07% → 8.13%30.7% → 23.3%0.313 → 0.668

合并行是 14 时一手造成的。 在对照里它是展示次数 2,578 → 182,805、CPM 9.88 → 0.59、CTR 10.78% → 1.64%,而另外八个共同投放小时的变动都在正常幅度内,方向也有来有回。第 4 节的合并行给这一天记的 198,960 次展示里,182,805 次来自这一个小时。它是已被否掉的 spill 版本(DECISION_LOG.md #50),所以这两天的任何合并对比,主要都是在讲它。

2026-08-05T10:30:27.528711 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 8 10 12 14 16 hour (UTC) 2 4 6 8 10 CTR % CTR 2026-08-02 2026-08-03 8 10 12 14 16 hour (UTC) 0 2 4 6 8 10 12 USD per 1,000 impressions CPM 8 10 12 14 16 hour (UTC) 5 10 15 20 25 30 35 installs / clicks % Click → install 8 10 12 14 16 hour (UTC) 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 USD Cost per install Delivery by hour — 2026-08-03 against 2026-08-02, shared hours only (UTC)
同样这四个比值,把前一天叠在当天上,只取共同投放小时

3分国家

这张表的花费列和安装列按账户日切。 Meta 不提供「小时 × 国家」的交叉表,所以分国家的投放数据只存在于广告账户自己的 UTC-7 日上,无法重新拼接。它的收入列和报告其余部分一样按 UTC 时钟分桶,所以比值那几列跨了七小时的偏移。这张表只能读结构,绝不能拿去和第 1 节或第 2 节比水平。

按花费取前十二,三种口径全列。

国家花费安装CPI入账bROAS闭合wROAS同期群@24cROAS
IN121.991930.632147.931.2197.680.80125.731.03
US41.57291.43333.940.824.990.124.990.12
GB16.69240.69516.901.0116.901.0116.901.01
PH16.44460.35715.670.955.630.345.630.34
MX14.55270.53911.420.7811.420.7814.821.02
ID14.15300.47221.951.5515.961.1315.961.13
MY13.86160.86611.740.8511.740.8511.740.85
TR13.18190.69453.224.0453.224.0453.224.04
FR13.08190.68831.152.3831.152.3831.152.38
AR12.34360.3432.990.240.000.000.000.00
AU8.9481.11719.762.210.000.000.000.00
ES8.3481.04238.844.6638.844.6638.844.66

印度占账户日买量的四分之一,是账户日花费的 24.4%,也是这张表上唯一一个样本值得读的国家:193 次安装,单次 $0.632,同期群 24 小时 1.03。整整一天只有 39 个当日闭合付费用户,人均 $10.20,所以印度以下每一个国家都只是几笔账:土耳其的 $53.22 和西班牙的 $38.84 是其中最大的两笔,背后都不可能超过五六个人。这些比值只能看方向,不能看幅度;哪个国家顶着一个抢眼的数字,能不能当真要看最大那一个付费用户占了多少。

泰国和巴西没有出现在这张表的前列,原因不在表现。这个账户已经投不了这两个国家,当天在这两地花费超过一美元的格子全部属于原有广告系列,而它中午之前就停止买量了。见 _runs/2026-08-04_e2_start_and_0803_report/th_br_what_its_worth.md

2026-08-05T10:30:27.683191 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US GB PH MX ID MY TR FR AR AU ES 0 20 40 60 80 100 120 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-03 spend within-day revenue
分国家:花费对当日闭合收入
2026-08-05T10:30:27.739141 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ IN US GB PH MX ID MY TR FR AR AU ES 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 USD per install Cost per install by country — 2026-08-03 (META day)
分国家的单次安装成本

4汇总:两日对比

按 UTC 时钟,合并两天都有投放的那 9 个小时。每个比值两端都是 Meta 的计量口径。

花费展示次数CPM点击CTR安装数点击→安装CPI
2026-08-02$240.3925,5839.402,5309.89%61824.43%$0.389
2026-08-03$262.83198,9601.324,2932.16%3909.08%$0.674

跨小时合并是一次结构对比。 它按每个小时投放了多少来加权,所以只要一天在时钟上的买量分布变了,这几行就会动,而任何一个小时本身可以完全没变。分小时那一节的逐小时对照,是同样这两天的不加权读法;两者对不上,动的就是结构。

两种读法在点击→安装上对不上,在 CTR 上一致。 合并起来,点击→安装跌 62.8%,p = 0.000;逐小时数,它在 9 个共同投放小时里了 5 个,符号检验读作 p = 1.000。合并出来的这个跌幅全部来自 14 时一个小时,那 182,805 次展示只把 2.0% 的点击转成了安装,所以它讲的不是这个账户怎么转化,也不能被当成这样引用。CTR 是另一种情况:合并起来跌 78.2%,不加权的计数也说它跌了,9 个小时里跌了 8 个,p = 0.039。即使在这里,幅度仍然属于 14 时,两种读法共同撑住的只有方向。两种读法一致的地方,动的是这一天;只有合并行在动的地方,动的是结构。

以下固定在原有广告系列的三条素材上,按广告账户自己的时钟。单条素材的共同投放小时数据只能按导出文件自带的时钟来切,所以下面这些小时是广告账户自己的 UTC-7 小时。它们落在两个报告日内部的 UTC 08:00–11:59,所以这一段既在本报告的这一天里,也在对比那一天里;但它的小时标签和第 2 节不是一套,它的合并行合并的是四个账户日小时,而不是上面那九个 UTC 小时。

有投放的账户日小时,08-02:[1–10, 21–23];08-03:[0–4]。共同投放小时:[1, 2, 3, 4]。 观测时长 H=6 的覆盖率两天都是 100%。两天都存在的只有原有广告系列的三条素材,所以对比固定在它们身上。

固定在指标08-0208-03变化p判定
合并点击→安装25.63%29.37%+14.6%0.055分不开
合并付费率2.88%5.24%+82.4%0.145分不开
合并CPI$0.379$0.369更好
合并RPI$0.338$0.479更好
合并ROAS0.891.30更好
bodysuit付费率1.81%6.45%+257.0%0.041更好
bikini付费率7.94%3.23%−59.4%0.252分不开
pool5付费率1.19%3.57%+200.0%0.341分不开

在共同投放小时上,原有广告系列持平到更好。 每一个合并项都朝账户有利的方向走,没有一个分得开。唯一过了 0.05 的是 bodysuit 的付费率,它建立在 3 个对 8 个付费用户之上,是八次检验里的一次显著,扛不过 Holm 校正。本报告不采信它。

这件事之所以要紧,是因为第 1 节的全天画面显示三种口径的 ROAS 全部下跌。两件事同时成立:整体上这一天投得不如 08-02,而同样三条素材两天都在跑的那几个小时并没有变差。差别在于构成。报告日有十二个小时买的是一个全新的广告系列,对比日没有对应的东西;CPM 一路走高,中间还夹着一个坏掉的小时。

三种口径并排,下面一行是不设观测时长上限的迄今同期群,仅供参考:

口径08-0208-03当天结束后还会变吗
入账收入$559.00 · 2.01$709.35 · 1.59午夜后几小时结算完成,此后固定
当日闭合收入$272.13 · 0.98$397.69 · 0.89不会
同期群 24 小时$360.61 · 1.30$474.05 · 1.06覆盖满即冻结,两天都是 100%
迄今同期群$542.23 · 1.95$524.63 · 1.18约 72 小时内持续上升,仅供参考,从不跨日比较

把入账收入按付款人安装的那个 UTC 日拆开,第一行就是当日闭合收入:

付款人安装于08-02 的入账08-03 的入账
当天$272.13 (48.7%)$397.69 (56.1%)
前一天$239.67 (42.9%)$109.64 (15.5%)
前两天$47.20 (8.4%)$137.54 (19.4%)
前三天$58.74 (8.3%)
前四天$5.74 (0.8%)

继承来的收入从当天入账的 51.3% 降到 43.9%。 入账收入和当日闭合收入之间的差额全部是它,也正因为这样,一个花费在涨的日子,在入账口径上会比在会封存的那两个口径上好看。

2026-08-05T10:30:27.809664 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ booked within-day cohort @ 24h 0 100 200 300 400 500 600 700 USD 2.01 0.98 1.30 1.59 0.89 1.06 the number above each bar is that measure's ROAS against the same day's spend The three revenue measures, 2026-08-02 against 2026-08-03 (UTC) 2026-08-02 2026-08-03
两天的三种收入口径,每根柱子上方是 ROAS
2026-08-05T10:30:27.883889 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 2026-08-02 2026-08-03 0 100 200 300 400 500 600 700 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分广告组:分小时

各行按素材标注。新广告系列里每个广告组只有一条广告、一条素材,所以广告组这一行就是素材这一行;原有广告系列的三条素材是同一个广告组里的三条广告,那几行比广告组低一层。

每条素材完整的分小时表格在 _runs/2026-08-05_0804_settled/utc_2026-08-03/measures_out.txt。要看的形状是每条素材什么时候在投,因为这一天两个广告系列没有共用过任何一个小时:

素材投放小时(UTC)花费
earner/bodysuit04:00 – 11:00$88.59
earner/bikiniearner/pool505:00 – 11:00$48.16, $39.52
E2/bikiniE2/mugshot12:00 – 23:00$48.91, $54.49
E2/spill13:00 – 22:00(99.6% 的展示落在 14 时内)$109.72
E2/bodysuitE2/pool518:00 – 23:00$24.16, $32.28

原有广告系列拿走当天 39.5% 的花费和 55.0% 的 Meta 记安装数,混合 CPI $0.419;新广告系列拿走 60.5% 的花费和 45.0% 的安装数,CPI $0.781。按当日闭合收入算,原有广告系列回报 1.35,新广告系列 0.59;按同期群 24 小时算是 1.51 对 0.77。剔掉 spill,新广告系列的 CPI 是 $0.588,仍比原有广告系列高 40%。

新广告系列做不了分素材的日环比,因为它在 08-02 还不存在。第 4 节的共同投放小时那一段,是这里唯一一次把时钟对齐的读数,而它只覆盖原有广告系列的三条素材。

2026-08-05T10:30:27.958518 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ 0 2 4 6 8 10 12 14 16 18 20 22 hour (UTC) 5 10 15 20 CTR % CTR by hour — every asset, 2026-08-03 (UTC) E2/spill earner/bodysuit E2/mugshot E2/bikini earner/bikini earner/pool5 E2/pool5 E2/bodysuit
分小时 CTR,每条素材一条线
2026-08-05T10:30:28.166182 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 10 20 30 40 50 60 installs / clicks % Click → install by hour — every asset, 2026-08-03 (UTC) E2/spill earner/bodysuit E2/mugshot E2/bikini earner/bikini earner/pool5 E2/pool5 E2/bodysuit
分小时点击→安装,每条素材一条线
2026-08-05T10:30:28.264587 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.5 1.0 1.5 2.0 2.5 3.0 USD Cost per install by hour — every asset, 2026-08-03 (UTC) E2/spill earner/bodysuit E2/mugshot E2/bikini earner/bikini earner/pool5 E2/pool5 E2/bodysuit
分小时单次安装成本,每条素材一条线
2026-08-05T10:30:28.052068 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 5 10 15 20 25 USD per 1,000 impressions CPM by hour — every asset, 2026-08-03 (UTC) E2/spill earner/bodysuit E2/mugshot E2/bikini earner/bikini earner/pool5 E2/pool5 E2/bodysuit
分小时 CPM,每条素材一条线

6分广告组 × 国家

和第 3 节一样,花费与安装按账户日切。 只列花费超过 $1 的格子,按花费排序;完整表格在 _runs/2026-08-05_0804_settled/utc_2026-08-03/measures_out.txt。这里是它最前面的几行:

素材国家花费安装CPI闭合wROAS同期群@24cROAS
E2/spillIN23.6945.9230.000.000.000.00
E2/mugshotIN23.56191.2400.000.000.000.00
E2/bikiniIN21.93470.46720.830.9520.830.95
earner/bodysuitIN19.59500.39259.573.0481.874.18
E2/pool5IN9.52170.5600.000.000.000.00
E2/pool5US9.2761.5450.000.000.000.00
earner/bikiniIN9.12290.3145.760.635.760.63
E2/bodysuitUS8.8261.4700.000.000.000.00
E2/bodysuitIN8.19170.4820.000.005.760.70
earner/pool5IN6.39100.63911.521.8011.521.80

在成本上,各实验臂分得最开的地方是印度。 同一个国家,原有广告系列的 bodysuit 买一次安装 $0.392spill$5.923mugshot$1.240,一个地区内部拉开十五倍。

同一条素材在两个广告系列里都跑过的位置,也只有印度这三处。bikini 在原有广告系列是 $0.314,在新广告系列是 $0.467;bodysuit 是 $0.392 对 $0.482;pool5 是 $0.639 对 $0.560。三对里有两对老广告组便宜 23% 和 49%,这和新广告组要付一笔溢价对得上,和素材本身对不上;第三对反过来,新广告组便宜 12%。所以这笔溢价在三对样本上只是一种倾向,不是量出来的数。

2026-08-05T10:30:28.398124 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/spill E2/mugshot E2/bikini E2/pool5 earner/bodysuit E2/bodysuit earner/bikini earner/pool5 0 20 40 60 80 100 % of that asset's spend Where each asset bought — share of its own spend by region, 2026-08-03 (META day) IN US GB PH MX ID other
每条素材买在哪里:它自己的花费按地区的占比
2026-08-05T10:30:28.501184 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/spill E2/mugshot E2/bikini E2/pool5 earner/bodysuit E2/bodysuit earner/bikini earner/pool5 0 1 2 3 4 5 6 USD per install Cost per install by region — every asset, 2026-08-03 (META day) IN US GB PH MX ID
分地区的单次安装成本,全部素材
2026-08-05T10:30:28.592297 image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ E2/spill E2/mugshot E2/bikini E2/pool5 earner/bodysuit E2/bodysuit earner/bikini earner/pool5 0 10 20 30 40 50 60 USD Within-day revenue by region — every asset, 2026-08-03 (META day) IN US GB PH MX ID
分地区的当日闭合收入,全部素材

这三张地区图和上表出自同一份分国家导出,所以同样带着账户日的口径限制,每张图的标题上都标了。

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

下面三张表由 report_tables.py 生成,列和顺序与本系列其他每一份报告完全一致,这正是一天能拿去和另一天比的前提。它们切在 2026-08-05 10:59 UTC 的支付数据切点上。当日闭合收入在午夜已封存,入账收入在午夜后几小时已结算,两者都不会再动;同期群 24 小时在这一天覆盖率 100%,因此同样冻结。各行按素材标注,和第 5 节同一套。

A. 分素材:投放端

每个比值两端都是 Meta 的计量口径。我们自己的注册记录不进这张表。

素材花费展示次数CPM点击CTR安装数点击→安装CPI
E2/spill$109.72182,6480.603,0301.66%732.41%$1.503
earner/bodysuit$88.5910,8258.188017.40%20825.97%$0.426
E2/mugshot$54.493,39416.052878.46%6924.04%$0.790
E2/bikini$48.914,37511.183748.55%10227.27%$0.480
earner/bikini$48.164,67010.314529.68%12828.32%$0.376
earner/pool5$39.523,69910.683679.92%8523.16%$0.465
E2/pool5$32.281,80917.8421511.89%5324.65%$0.609
E2/bodysuit$24.161,63314.791237.53%4839.02%$0.503

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

每一列都是我们自己的记录。Meta 只能给出入账收入,所以它以括注形式跟在那一列旁边,从不单独占一行。付费用户是去重的人数,从不是交易笔数。同期群观测时长 H=24h,这一天覆盖率 100%。报表时钟为 UTC

素材入账bROAS (Meta)当日闭合wROAS同期群@HcROAS付费用户付费率ARPUARPPU最大付费用户占比
E2/spill$5.890.05 (0.11)$5.890.05$25.050.2311.3%0.0755.89100.0%
earner/bodysuit$340.673.85 (4.61)$127.821.44$156.951.77125.2%0.54910.6522.2%
E2/mugshot$10.700.20 (0.26)$10.700.20$16.600.3022.9%0.1575.3553.4%
E2/bikini$73.431.50 (1.65)$73.431.50$80.511.6598.6%0.6998.1623.0%
earner/bikini$159.563.31 (2.15)$86.261.79$86.261.7975.3%0.65812.3248.0%
earner/pool5$43.341.10 (1.12)$23.580.60$23.580.6044.5%0.2655.8926.8%
E2/pool5$44.601.38 (1.38)$44.601.38$44.601.3835.8%0.85814.8772.9%
E2/bodysuit$25.411.05 (1.05)$25.411.05$40.491.6812.1%0.52925.41100.0%

16 付费用户门槛(#37):上表里付费用户数不到 16 的行,只能看方向,不能看幅度。

C. 分素材:国家结构

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

这张表解释 B 表里哪一行读得住、哪一行读不住。最后一列是该素材自己的当日闭合收入里来自美国的比例:只要它远高于美国的花费占比,这条素材买到的就是一个地域,而不是挣到了一个结果。

素材花费印度 %美国 %其他 %美国占其收入 %
E2/spill$110.0521.5%4.5%74.0%0.0%
earner/bodysuit$57.1134.3%3.0%62.7%0.0%
E2/mugshot$78.3630.1%6.9%63.0%46.6%
E2/bikini$68.5632.0%8.5%59.5%0.0%
earner/bikini$38.3023.8%9.1%67.1%0.0%
earner/pool5$30.9520.6%6.8%72.6%0.0%
E2/pool5$64.6114.7%14.3%70.9%0.0%
E2/bodysuit$53.7715.2%16.4%68.4%0.0%

原有广告系列的入账 ROAS 被继承来的收入抬高了,新广告系列没有这回事。 原有广告系列在 UTC 11:20 就停止买量,却整天都在收更早安装日的付款;earner/bodysuit 入账 3.85 对当日闭合 1.44,差的就是这一块。新广告系列的各实验臂完全没有更早的同期群,所以它们的入账和当日闭合数字按定义就相等。比较各实验臂要用当日闭合或同期群,绝不能用入账。

B 表没有一行过得了 16 付费用户门槛。earner/bodysuit 以 12 个当日闭合付费用户排当天第一,所以这一天分素材的收入排名整体只是一组方向。

2026-08-05T10:30:28.700533 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:28.797322 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:28.890837 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:29.061875 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,每条素材一条线

收入按天画、跨整段投放,不按小时画,因为每条素材每小时只有 0 到 2 个付费用户,分小时的 ARPPU 是某一个人的一笔账,不是比率。上面四张图里的空心点表示未过 16 付费用户门槛,这一天的每一个点都是空心的。安装数不足 20 的素材不进下面的综合图,也不进第 6 节的地区图;这一天八条素材全部过了这道关,所以一条都没缺。

2026-08-05T10:30:29.175309 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-03 E2/spill earner/bodysuit E2/mugshot E2/bikini earner/bikini earner/pool5 E2/pool5 E2/bodysuit
综合图:每条素材在每个指标上的表现,在当天范围内归一化

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

账户时钟。 五个新实验臂处在同一个预算区间里,从 08-03 05:44 到 08-04 00:01 PT 每个都是日预算 $100,所以它们彼此之间的预算天然对齐,可以直接比较。结构中性一列把每个实验臂的 ROAS 按这个预算区间的合并国家结构重新定价,同时保留它自己的成本效率和收入效率,从而抹掉实验臂之间的地域差异。各格已按观测时长 H=6 累积。

广告预算区间日预算安装花费CPMCTRIN%CPIRPIROAS结构中性
bikiniE2-R110016069.811.328.82%34%0.4360.4901.121.08
bodysuitE2-R110011156.212.586.90%17%0.5060.4230.840.80
pool5E2-R110011166.714.889.93%15%0.6010.5991.000.81
mugshotE2-R11009580.916.978.64%22%0.8520.1790.210.22
spillE2-R110085111.10.611.67%7%1.3080.0690.050.08

按合并国家结构重新定价,没有哪个实验臂的 ROAS 变动超过 0.19,排序也一个都没变,所以这个排名不是地域造成的假象。单次安装成本把各实验臂拉开了三倍($0.436 到 $1.308);它们的 ROAS 没有拉开,领先的三个臂都落在 0.84 到 1.12 之间,各自背后只有几个付费用户。

安装同期群的 ARPU 与 ARPPU,固定观测时长

安装日按 UTC 时钟,安装数和付费用户数取自我们自己的记录。这一天八个实验臂在 H=24 上覆盖率都是 100%。付费率和 ARPPU 两列是迄今数字,会随同期群变老而增长,所以它们描述的是这一天,不能跨日读;能跨日比的是 H=24 那一列。

实验臂安装数付费用户付费率ARPPU(迄今)ARPU @ H=24
earner/bodysuit233135.6%$12.890.674
earner/bikini13196.9%$10.950.658
earner/pool58955.6%$7.070.265
E2/bikini105109.5%$9.640.767
E2/bodysuit4836.2%$13.500.844
E2/pool55235.8%$14.870.858
E2/mugshot6834.4%$5.530.244
E2/spill7922.5%$12.530.317

只有原有广告系列的三条素材在同一观测时长、同一覆盖率下有前一天的数据。在 H=24 上,bodysuit 从 0.449 走到 0.674,bikini 从 0.407 走到 0.658,pool5 从 0.499 掉到 0.265。三条里两涨一跌,各自背后只有 5 到 13 个付费用户。新广告系列的 mugshotspill 停在 0.244 和 0.317,低于账户里其他任何一个实验臂,而它们也正是单次安装成本排最后的那两个。

8口径与边界

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

10交给五臂测试的东西

预算对齐的那个区间在 08-04 00:01 PT 结束,五个新广告组从那一刻起成为一次随机化测试的实验臂。这一天是它们的观察基线:

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

报告日是一个 UTC 日。 Meta 的导出文件按广告账户自己的时区 UTC-7 打时间戳,所以这一天是 Meta 的 08-02 17:00–23:59 接上 Meta 的 08-03 00:00–16:59,上面每一个投放数字都是跨这两个账户日重新拼接出来的。

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

口径计什么当天结束后还会变吗
入账收入在这个 UTC 日之内到账的钱,不论付款人哪天安装午夜后几小时结算完成,此后固定。Meta 自己的数字就是这个口径
当日闭合收入当天安装并且在当天结束前付了钱的人不会。午夜已封存
同期群 H 小时收入当天的安装,每个人只计到他自己活满 H 小时为止。本项目的观测时长 H=24,两天在这个口径下覆盖率都是 100%一直上升,直到每一次安装都活满 H 小时

三种口径读的都是我们自己的支付记录;Meta 的数字以括注形式出现在入账那一列旁边,从不单独占一行。

口径校验按账户时钟做,因为 Meta 的转化金额挂在它自己的转化小时上,是唯一一列无法诚实地重新拼接进 UTC 日的数据。固定在那个时钟上,我们的记录在 08-03 是 Meta 入账金额的 0.98,08-02 是 0.91,都落在已记录的 0.91–1.06 区间内。第 1 节表里的括注 Meta 数字是为了可追溯;在报表时钟上,两者之间的比值不是一次有效的校验。

预算区间指的是广告组日预算没有变动的那一段时间。 它之所以要紧,是因为在这个账户上预算是地域旋钮:预算提上去,买到的国家就更宽、更便宜,所以跨越预算变动去衡量两条素材,比的是两批不同的人群。

这一天处在两个时间上不重叠的预算区间里。 原有广告系列到 UTC 11:20 为止一直是每天 $500 不变,这也是它整个 08-02 所处的同一个预算区间,两天能比较全靠这一点。之后新广告系列从 UTC 12:44 到午夜跑五个广告组,每组每天 $100 不变,这个预算区间在对比日没有对应物。没有任何东西横跨两者,所以本报告不做跨预算区间的比较。

12复现

CFG=_runs/2026-08-05_0804_settled/run_config.json          # tz = UTC
MET=_runs/2026-08-05_0804_settled/run_config_meta.json     # tz = META

# 1 — the three revenue measures, at campaign / hourly / country / asset
PYTHONIOENCODING=utf-8 python -m ad_ops.measures --config $CFG --day 2026-08-03 --prev 2026-08-02

# 1b — the instrument gate, which is only valid on Meta's clock
PYTHONIOENCODING=utf-8 python -m ad_ops.measures --config $MET --day 2026-08-03 --prev 2026-08-02

# 2 — matched clock hours at a fixed horizon, with two-proportion tests (META clock)
PYTHONIOENCODING=utf-8 python -m ad_ops.day_compare --config $MET \
  --today 2026-08-03 --prev 2026-08-02 --h 6 \
  --ads "ww_bikini_10s,ww_bodysuit_10s,ww_pool5_15s" \
  --campaign "bailingxia_meituan_ww_cvr_260730"

# 3 — regimes, horizons, delivery overlap, the decidability gate (META clock)
PYTHONIOENCODING=utf-8 python -m ad_ops.asset_estimator hourly \
  --meta _runs/2026-08-04_e2_start_and_0803_report/exports/ads_hourly_aug3_settled.csv \
         _runs/2026-08-05_0804_settled/exports/ads_hourly_aug4_settled.csv \
  --lum _runs/2026-08-05_0804_settled/lum \
  --fx _runs/2026-08-02_today_read/fx_rates.json \
  --ads "ww_bikini_10s,ww_bodysuit_10s,ww_pool5,ww_mugshot,ww_spill" \
  --campaign "bailingxia_meituan_ww_cvr_260802" --horizon 6

# 4 — install-cohort ARPU and ARPPU, to date and at fixed horizons
PYTHONIOENCODING=utf-8 python -m ad_ops.cohort_arpu --config $CFG \
  --days 2026-07-31,2026-08-01,2026-08-02,2026-08-03

# 5 — §7's three standing tables, §2's matched-hours pairing, §4's pooled funnel,
#     and the nineteen standing charts
PYTHONIOENCODING=utf-8 python -m ad_ops.report_tables --config $CFG \
  --day 2026-08-03 --prev 2026-08-02
PYTHONIOENCODING=utf-8 python -m ad_ops.report_charts --config $CFG \
  --day 2026-08-03 --prev 2026-08-02 \
  --days 2026-08-01,2026-08-02,2026-08-03 --out ad_ops/figures/2026-08-03 \
  --md _runs/2026-08-05_0804_settled/chartblock_2026-08-03.md --relpath figures/2026-08-03

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

报表时钟是 UTC,广告账户的时钟是 UTC-7,所以按 UTC 拉数比按账户日拉数每次都要多一份导出:前一个账户日的分小时文件,每次都要。这一天由 ads_hourly_aug2_settled.csv 的 17–23 时和 ads_hourly_aug3_settled.csv 的 00–16 时拼成,对比日由 ads_hourly_aug1_settled.csv 的 17–23 时和 ads_hourly_aug2_settled.csv 的 00–16 时拼成。估算器还会额外载入 ads_hourly_aug4_settled.csv,这样午夜之后的安装就不会被倒算回 08-03 最后一个有投放的格子。

Meta 的导出文件都是在各自那一天收尾并结算之后拉的,每一份都用它自己的内容、行数,以及从 Reporting starts / Reporting ends 读出的窗口来核验,从不靠文件名。分国家数据来自 ads_country_day_jul1_aug5.csv,它按账户日组织,这就是第 3 节、第 6 节、C 表和地区图无法跟随报表时钟的原因。

支付记录:两个通知频道的 Telegram 导出,用 ad_ops/lum_notifications/parse_export.py 解析。支付数据切至 2026-08-05 10:59 UTC,此时两天的同期群在 H=24 上覆盖率都是 100%;切点处各次安装的年龄,08-03 是 35.0–58.1 小时,08-02 是 61.4–82.9 小时。

全程按 Ad ID 选取,从不按广告名或广告组名。两个广告系列跑的素材名逐字节相同,按名字过滤会多归因约 70%。

Internal — noindex. Not for distribution outside the team.