Dynamic creative optimization decides which creative of an ad to render for each request. Recent work places that choice before ad ranking, but relies on deterministic point predictors with no calibrated uncertainty. AI-generated content has made creatives nearly free, while feedback per creative remains sparse and selection faces a tight latency budget. We introduce a creative pre-ranker that scores every recalled creative and shortlists each campaign's pool before the per-user ranker runs. Creatives sit in a hierarchy of audience segment, advertised item, campaign and creative, so a cold creative falls back on what its parent levels have earned, and how much it borrows from its parents is set in closed form from historical logs, with one parameter per level and nothing tuned. To stay within the latency budget, the pre-ranker predicts for an audience segment rather than an individual user, from per-attribute counters. It selects by a single Thompson draw per creative, balancing exploration and exploitation so that a new creative still has a chance to be learned. Replaying Roblox Sponsored-ads traffic over campaigns with competing creatives, the shortlist lifts predicted play-through rate by 8.14% against 2.80% for an equally sized random shortlist, forwards more than 40% fewer creatives than the full pool, and adds only 0.2% to serving time. After an A/B test on live traffic, the method now serves in production at Roblox.
Figures & tables
Figure 1: Two different creatives of a single advertised item.
Figure 2: The creative pre-ranker in context. It scores every recalled creative with one draw from its hierarchical posterior, assembled offline and refreshed online from single-attribute counters, and shortlists the top Eg=max(1,⌊ρ∣Cg∣⌋) of each campaign (inset) up to a global budget B filled by round robin. Only that shortlist reaches ad ranking, which scores it with the production creative-selection model and keeps at most one creative per advertised item. The cap B controls its per-candidate cost.
Algorithm 1 Exploratory Creative Pre-Ranking by Hierarchical Empirical-Bayes Thompson Sampling.
Method
Forwarded
Lift ( 95% CI)
Gap
Uniform
≈L
—
0.0%
RR-Random
600.0
+2.80[2.71,2.90]
15.3%
TS-One
≈L
+6.09[5.62,6.58]
33.2%
TS-RR
600.0
+8.14[7.64,8.65]
44.3%
Mean-RR
600.0
+9.51[8.87,10.18]
51.8%
Oracle
>1,000
+18.36[17.78,18.97]
100%
Table 1: Predicted play-through rate on contested pools, ρ=0.8 , B=600 . Lifts are against Uniform with 95% request-clustered bootstrap intervals; lift and gap follow ( 24 ). Forwarded is the mean creatives per request reaching the ranker.
Pre-ranker ( μ s)
Ranker
Total
Method
Fwd.
Score
Select
(ms)
(ms)
Uniform
≈L
0.1
14.8
33.0
33.0
RR-Random
600.0
6.6
2,109.9
39.4
41.5
TS-One
≈L
78.0
2,071.0
33.0
35.1
TS-RR
600.0
79.2
2,122.5
39.4
41.6
Oracle
>1,000
0.1
3.0
83.1
83.1
Table 2: Per-request computation time. Score and select are the pre-ranker’s two timed phases, and total adds the ranker the cap protects. Oracle ’s ranker entry is extrapolated past the largest shortlist measured.
ρ
B
Fwd. ( ×L )
RR-Random
TS-RR
Gap
0.2
600
1.00
+0.02%
+3.34%
32.5%
0.4
600
1.03
+0.26%
+3.52%
34.2%
0.6
600
1.15
+1.14%
+4.17%
40.5%
0.8
500
1.01
+0.04%
+3.39%
33.0%
0.8
600
1.21
+1.62%
+4.52%
44.0%
0.8
800
1.57
+4.09%
+6.29%
61.2%
Table 3: Quota fraction ρ against latency cap B under another deployed ranking model, with 50 draws per candidate. Lifts are against Uniform and gap is TS-RR ’s, as in ( 24 ). Forwarded is in multiples of the one-creative-per-campaign shortlist.
Appendix figures & tables2 assets
Supplementary material from the paper’s appendix.
Appendix
Recalled pools that are contested ( ∣Cg∣≥2 )
99.1%
Campaigns per request, mean
just under L
Creatives per request, mean
>1,000
Creatives per campaign, mean
2.637
Creatives per campaign, max
20
Cold-start candidates ( neff=0 )
16.9%
Appendix
Table 4: The replay sample, as shares and per-request or per-campaign rates rather than totals. A pool is a (request, campaign) pair, contested when the campaign has at least two recalled creatives.
Method
Forwarded
Lift ( 95% CI)
Gap
Uniform
≈L
—
0.0%
RR-Random
600.0
+1.62[1.51,1.72]
15.7%
TS-One
≈L
+3.35[3.01,3.69]
32.5%
TS-RR
600.0
+4.54[4.16,4.91]
44.0%
Mean-RR
600.0
+5.10[4.68,5.52]
49.5%
Oracle
>1,000
+10.30[9.68,10.92]
100%
Appendix
Table 5: Robustness under L1. The setup matches Table 1 .