The optimizer selects one canonical signal from the campaign objective, checks which
platforms report that signal, and converts the eligible platforms' scores into target
budget shares. Legacy revenue, ROAS, generic conversions, CTR, and CVR are not blended
into the current decision score. Budget only moves when the target/current drift is large
enough, and every move is capped, friction-adjusted, and smoothed.
Algorithm Pipeline
1
Select Objective Signal
Use purchase value return, leads per spend, or installs per spend—never a substitute metric.
2
Estimate Decision Score
Normalize eligible signals, then blend the result with confidence, a neutral prior, and exploration.
3
Solve Target Mix
Transform scores into constrained budget shares using softmax, floors, and caps.
4
Execute Delta
Move only the bounded, capacity-safe fraction of the target/current allocation gap.
Objective Signal and Eligibility
objective_signal_p =
platform_conversion_value_p / spend_p if objective = purchase_value
leads_p / spend_p if objective = lead
installs_p / spend_p if objective = install
eligible_p =
spend_p > 0
and the platform reports the required objective metric
and conversion-value currency matches campaign currency
when objective = purchase_value
An ineligible platform keeps its operator-defined allocation. The optimizer does not
replace a missing purchase value, lead, or install metric with generic conversions.
Eligible objective signals are min-max normalized; when all values are equal, each
normalized value is 0.5.
Confidence Adjustment
event_confidence_p =
objective_events_p
/ (objective_events_p + half_saturation_objective)
recency_weight_p =
exp(-ln(2) * metric_age_p / 24 hours)
confidence_p = event_confidence_p * recency_weight_p
normalized_signal_p = min_max(objective_signal_p)
decision_score_p =
confidence_p * normalized_signal_p
+ (1 - confidence_p) * 0.5
+ exploration_bonus_p
exploration_bonus_p =
0.2 * sqrt(
ln(total_decision_rounds + 1)
/ (platform_decision_rounds_p + 1)
)
Objective event half-saturation is 20 purchases, 30 leads, or 50 installs. Confidence
falls as the metric snapshot gets older. The exploration term gives limited preference
to eligible platforms with fewer completed decision rounds; it is a heuristic, not a
statistical confidence interval.
Target Allocation
fixed_total = sum(current_allocation_p for ineligible platforms)
eligible_total = 100 - fixed_total
raw_weight_p = softmax(decision_score_p / 0.85)
target_p = project_to_total(
raw_weight_p * eligible_total,
minimum = 15%,
maximum = 60%
)
Ineligible platforms are fixed first. Only the remaining percentage is distributed
among eligible platforms. If the 15% floor, 60% cap, fixed allocations, and 100% total
cannot all be satisfied, the optimizer reports a configuration error and holds the
current allocation.
Execution Rule
raw_delta_p = target_p - current_p
maxDrift = max(abs(raw_delta_p))
if maxDrift < 5 percentage points:
hold current allocation
else:
drift_scale = min(1, 10 / maxDrift)
friction = max(0.25, 1 - 0.03 * maxDrift)
blend = 0.65 * friction * drift_scale
proposed_p = current_p + raw_delta_p * blend
projected = bounded_sum_to_100(proposed, floor, cap)
final = round_to_0.1(projected)
The score determines the destination; the execution layer controls how quickly the
allocation moves toward it. The current capacity factor is fixed at 1.0. Audience
saturation, creative fatigue, and marginal spend-response are future inputs and are not
claimed by the current implementation.