Budget Optimiser
Answer strategic trade-off questions with confidence. The Budget Optimiser uses historical performance data to model how each marketing channel responds to spend changes, helping you understand allocation trade-offs before committing budget. This tool doesn’t create perfect forecasts—ecommerce performance depends on creative quality, competitive dynamics, seasonality, and dozens of other factors the model can’t predict. Instead, it answers questions like: “If we shift £10K from Meta to TikTok, what’s the likely impact on new customer acquisition?” or “How much budget can Paid Search absorb before efficiency drops?”How it works
The system builds mathematical models of each channel’s performance curve using your historical data, then simulates different budget scenarios to show expected outcomes. Three core concepts drive the methodology:1. Elasticity: How channels respond to spend changes
Elasticity measures the relationship between spend increases and revenue outcomes. A channel with 0.8 elasticity means a 10% spend increase typically generates an 8% revenue increase. Higher elasticity indicates better scaling potential; lower elasticity suggests diminishing returns. The model uses logarithmic regression on your complete historical data to calculate elasticity per channel. For example, if Meta historically shows 0.75 elasticity whilst TikTok shows 0.85, the model will recommend allocating more growth budget to TikTok—assuming similar efficiency and confidence levels. Elasticity is capped at 0.9 maximum to prevent unrealistic scaling assumptions. A channel showing 1.0+ elasticity (suggesting exponential growth) gets constrained to 0.9, with a flag indicating the cap was applied. This prevents the model from over-recommending channels with limited data or unusual historical patterns.2. Performance Score: Weighting efficiency and scale
Raw elasticity alone is insufficient for budget allocation. A channel with high elasticity but terrible margins shouldn’t receive more budget. The Performance Score combines multiple factors:- Elasticity (0-0.9): Channel’s responsiveness to spend changes
- Recent aMER (last 12 weeks): Revenue efficiency from recent performance
- Recent Margin (last 12 weeks): CM2 margin percentage on new customer revenue
- LN(Historical Spend): Logarithmic bias toward proven scale—channels with established spend history receive priority over untested channels
3. Historical time windows
The model uses different time windows for different purposes, balancing recency with statistical reliability: Full historical data (typically 18-24 months):- Elasticity calculation via logarithmic regression
- Requires minimum 6 weeks of active spend per channel
- Channels with insufficient history are excluded
- Recent aMER (new customer revenue per £1 spend)
- Recent CM2 margin percentage
- Captures current efficiency without overweighting old performance
- Current budget mix anchor
- Recommended allocations are constrained to ±20% swing from this baseline
- Prevents dramatic shifts that might disrupt stable channels
- Starting point for demand capture channel caps (Paid Search - Brand, Affiliate)
- Seasonally adjusted for forecasting
Demand Capture vs Demand Generation
Marketing channels split into two fundamentally different categories requiring distinct treatment:Demand Capture Channels
Paid Search - Brand, Affiliate These channels harvest existing demand—people already searching for your brand or clicking referral links. Performance scales with brand awareness and traffic, not budget increases. Doubling spend doesn’t double revenue; it captures marginal incremental searches. The model treats demand capture channels as fixed costs:- Calculate last month’s spend
- Apply seasonal index for target month
- Use channel-specific performance curve to forecast revenue at that spend level
- Deduct from total budget before allocating to growth channels
Demand Generation Channels
Paid Meta, Paid TikTok, Paid Search - Generic, VIP Influencer, etc. These channels create demand—driving awareness and consideration amongst audiences who weren’t actively searching. Performance scales more directly with spend, though diminishing returns still apply. Growth budget allocation uses performance scoring:- Calculate total available budget (Total Budget - Demand Capture Fixed Costs)
- Compute Performance Score for each demand generation channel
- Allocate growth budget proportional to Performance Scores
- Apply guardrails: ±20% swing from current mix (±10% for low-confidence channels)
- Normalise final allocations to 100%
Why separate demand capture?Optimising a brand search campaign means bid adjustments and negative keywords, not budget increases. Capturing 100% of brand searches costs £X; spending £2X won’t generate £2X revenue. Growth channels operate differently—they scale audience reach, making them suitable for budget reallocation logic.
Confidence Levels and Constraints
Not all performance curves are equally reliable. The model classifies each channel by confidence level, then applies appropriate constraints:R² Thresholds
- High Confidence (R² ≥ 0.7): Historical data fits the curve tightly; ±20% budget swing allowed
- Medium Confidence (R² ≥ 0.4): Moderate fit; ±20% budget swing allowed
- Low Confidence (R² < 0.4): Weak fit; ±10% budget swing allowed (conservative)
Minimum Data Requirements
Channels need sufficient history for inclusion:- Minimum 6 weeks of active spend (≥£500/week)
- Minimum £1,000 total historical spend
- Positive elasticity (negative curves indicate data issues)
Saturation and Diminishing Returns
Every channel eventually saturates—audience size is finite, creative performance declines, competition increases. The model handles saturation through dynamic elasticity adjustment: Base Formula:- Threshold Multiplier (default 1.2): How far beyond historical max the model trusts the curve (120% of peak)
- Decay Strength (default 0.2): How quickly efficiency degrades past saturation point (higher = harder wall)
Historical_Max × Threshold, elasticity decays proportionally. A channel with 0.8 base elasticity hitting 150% of its saturation limit with 0.2 decay strength would see adjusted elasticity drop to ~0.67—still scaling, but at reduced efficiency.
Seasonality Adjustments
Ecommerce revenue fluctuates by month—November performs differently than February. The model applies month-level seasonal indices to forecasts: Seasonal Index Calculation:- Demand capture channel spend: Last month’s spend × Seasonal index = Forecasted spend
- Revenue forecasts: Base revenue forecast × Seasonal index = Seasonally-adjusted forecast
- AOV adjustments: New customer forecast adjusted for seasonal AOV patterns
Reading the Output
The Budget Optimiser generates two primary views:Channel Summary
Per-channel performance DNA:- Elasticity: Channel’s scaling responsiveness (0-0.9, capped if needed)
- R²: Curve fit quality / confidence level
- Last 12 Weeks aMER: Recent revenue efficiency
- Weighted CM2 Margin %: Recent profitability on new customers
- Current Share: Last 8 weeks’ budget allocation percentage
- Recommended Share: Model’s suggested allocation (growth channels only)
Monthly Allocation
Month-by-month forecast for each budget scenario:- Total Budget Scenario: Input budget level (e.g., £50K, £75K, £100K)
- Month: Target forecast month (1-12)
- Channel: Specific marketing channel
- Recommended Monthly Spend: Allocated budget for this channel/month
- Forecast New Revenue: Expected new customer revenue at this spend level
- Forecast New Customers: Expected new customer acquisition count
- Forecast aMER: Implied efficiency (Revenue / Spend)
Using the Optimiser Strategically
The Budget Optimiser is a strategic planning tool for informed trade-off decisions, not a replacement for marketing judgment. Here’s how to use it effectively:Good Use Cases
✓ Quarterly budget planning: “We have £300K for Q2. How should we allocate across channels given current efficiency?” ✓ Scaling analysis: “If we increase budget from £60K to £90K/month, which channels can absorb the additional spend?” ✓ Channel comparison: “Meta currently gets 45% of budget. Does its performance justify that share vs TikTok?” ✓ Reallocation scenarios: “What happens if we shift £15K from Paid Search - Generic to VIP Influencer?” ✓ Saturation detection: “Which channels are approaching their efficiency ceilings at current spend levels?”Poor Use Cases
✗ Day-to-day optimisation: The model operates on monthly timeframes; use platform-level optimisation for daily/weekly adjustments ✗ Creative testing decisions: The model can’t predict which ad creative will perform; it only knows historical averages ✗ New channel launches: Channels need 6+ weeks of data before modelling works; initial spend should follow test-and-learn principles ✗ Board/investor projections: Revenue forecasts depend on too many unpredictable factors for external reporting ✗ Blended/multi-touch attribution scenarios: The model attributes based on your configured attribution (typically new customer, last-click); it doesn’t re-attribute across modelsInterpreting Unexpected Recommendations
If allocations surprise you, investigate before dismissing: “Why is TikTok getting 35% when it’s only 20% currently?”- Check Performance Score components: Likely high elasticity + strong recent aMER + healthy margins
- Review R²: If confidence is low, the ±10% constraint prevents larger shifts; high confidence allows ±20%
- Consider strategic context: Is TikTok genuinely underfunded, or do you have operational constraints the model doesn’t know?
- Check elasticity: Meta might be saturating (low elasticity = poor scaling potential)
- Check recent aMER: Overall ROAS includes returning customers; model uses new customer aMER
- Check saturation threshold: Meta may be hitting historical maximum spend levels
- Verify data requirements: Minimum 6 weeks, £1K total spend, positive elasticity
- Check channel categorisation: Is it marked as demand capture (excluded from growth allocation)?
- Review R² and elasticity: Channels with negative or zero elasticity indicate data quality issues
Combining with Other Data
The optimiser works best alongside qualitative inputs it can’t measure:- Creative pipeline: Can your team produce enough TikTok content to justify 40% budget share?
- Platform relationships: Does a rep partnership give you beta access or fee discounts the model doesn’t account for?
- Strategic priorities: Are you deliberately investing in a channel for long-term positioning despite current inefficiency?
- Market conditions: Have CPMs increased significantly since the model’s training data?
Frequently Asked Questions
How often should budget allocations be updated?
Review monthly, adjust quarterly. The model uses 12-week performance windows, so weekly changes create noise without signal. Review allocations monthly to spot emerging trends, but implement major shifts quarterly to give channels time to stabilise. Exception: If a channel’s performance dramatically changes (new creative strategy, platform algorithm shift), re-run optimiser analysis immediately rather than waiting for quarterly review.What if my recommended allocation differs significantly from current spend?
Treat large swings as signals for investigation, not instructions. If the model recommends shifting Meta from 40% to 25% share:- Check the Performance Score breakdown—which component drives this?
- Review recent aMER trends—has efficiency genuinely declined, or is it a temporary blip?
- Examine saturation metrics—is Meta hitting its ceiling, or is there operational headroom?
- Consider qualitative factors—creative quality, audience expansion opportunities, platform changes
Can I manually override channel allocations?
Yes, via custom budget scenario inputs. The optimiser calculates recommended allocations based on performance data, but you can create custom scenarios with manual overrides:- Use the channel summary to understand model recommendations
- Create a custom allocation scenario based on strategic priorities
- Input that scenario’s spend levels to see forecasted outcomes
- Compare custom scenario vs optimiser recommendation
Why does forecasted aMER decline as budget increases?
Diminishing returns and saturation. As spend increases beyond historical patterns, the model applies elasticity decay through the saturation logic. A channel with 0.75 elasticity means revenue grows slower than spend—if you increase budget 33%, revenue might grow only 25%, causing aMER to decline. This reflects real-world constraints: finite audiences, creative fatigue, competitive bidding pressure. The forecast shows expected efficiency at scale, helping you make informed decisions about whether incremental spend justifies lower marginal efficiency.What data quality issues affect optimiser accuracy?
Several factors reduce model reliability:- Inconsistent tracking: If attribution setup changed mid-history, regression captures the inconsistency as performance variance
- Small sample sizes: Channels with
<12weeks of consistent £500+ weekly spend lack statistical power for robust curves - Outlier weeks: One-off promotions, platform bugs, or seasonal spikes create noise; the model includes them but can’t distinguish from baseline
- Missing COGS data: CM2 margin calculations require accurate product-level COGS; missing data flows through to performance scores
How does the optimiser handle new channels?
New channels require 6-8 weeks of baseline data before inclusion. When launching a new channel:- Run initial test budget outside the optimiser (typically £2-5K/month)
- Collect 6+ weeks of performance data at consistent spend levels
- After minimum data threshold, the channel appears in optimiser output
- Initial recommendations will show “Low” confidence due to limited history
- As data accumulates over 3-6 months, confidence increases and allocations stabilise
Can I use this for annual planning?
Yes, with important caveats. The optimiser forecasts up to 12 months forward using:- Historical seasonality patterns (monthly indices)
- Channel-specific performance curves
- Your specified annual budget
- Creative performance decay (campaigns age, audiences saturate)
- Competitive landscape shifts (CPMs fluctuate, new competitors enter)
- Platform algorithm changes (targeting, attribution, auction dynamics)
- Product/market evolution (new SKUs, geographic expansion, positioning shifts)
- Use optimiser for directional budget allocation across channels
- Review and update quarterly as actual performance data arrives
- Build in 15-20% budget flexibility for adjustments
- Treat 6+ month forecasts as strategic frameworks, not precision predictions
Why are some channels marked with elasticity caps?
Channels showing elasticity >0.9 get capped to prevent unrealistic scaling assumptions. An elasticity of 1.0 implies linear scaling (10% spend increase = 10% revenue increase), whilst >1.0 implies exponential growth. This typically indicates:- Limited data: Few data points create regression artifacts
- Inconsistent tracking: Attribution changes mid-history
- Outlier-driven fit: One exceptional month skews the curve
is_elasticity_capped flag alerts you to review the channel’s historical data for quality issues.
If you believe a channel genuinely has >0.9 elasticity (e.g., emerging platform with massive headroom), investigate the raw data and consider whether the cap should be adjusted—but err on the side of conservative estimates.
Technical Implementation Notes
Data Pipeline Architecture
Data Pipeline Architecture
The Budget Optimiser runs as a DBT pipeline with four intermediate models feeding two final marts:Intermediate Models:
int_budget_optimiser__channel_data: Weekly aggregations of spend, revenue, customers, CM2 by channelint_budget_optimiser__channel_weights: Performance scoring and growth budget allocation logicint_budget_optimiser__demand_capture_caps: Fixed spend forecasts for brand search and affiliateint_budget_optimiser__seasonality: Monthly seasonal indices for revenue and AOV
budget_optimiser__channel_allocation: Month × Channel × Budget Scenario forecasts (partitioned table)budget_optimiser__channel_summary: Per-channel performance DNA and recommendations
total_budget_scenario for query performance when filtering specific budget levels. Scenario ranges are generated via GENERATE_ARRAY(25000, 1500000, 25000) at £25K intervals—adjust based on client scale.Logarithmic Regression Implementation
Logarithmic Regression Implementation
Elasticity calculation uses log-log regression in BigQuery:This transforms the power law relationship (Revenue = a × Spend^b) into a linear regression in log-space, where the slope coefficient equals elasticity.Revenue forecasts then apply:
Revenue = EXP(Intercept) × (Spend ^ Elasticity)Weekly spend is converted to monthly via × 4.345 (average weeks per month) rather than × 4 to match calendar reality over annual periods.Guardrail and Anchoring Logic
Guardrail and Anchoring Logic
Budget allocation guardrails prevent excessive reallocation:This anchoring approach allows gradual shifts toward optimal allocation whilst preventing shock reallocation that could destabilise performance.
Saturation Decay Formula
Saturation Decay Formula
Dynamic elasticity adjustment when spend exceeds historical thresholds:Example: Channel with 0.8 elasticity, £10K historical max, 1.2× threshold, 0.2 decay:
- At £12K spend (saturation limit): elasticity = 0.8 (no decay)
- At £15K spend (125% of limit): elasticity = 0.8 × (12/15)^0.2 ≈ 0.77
- At £20K spend (167% of limit): elasticity = 0.8 × (12/20)^0.2 ≈ 0.74
Related Documentation
Statistical Health Indicators
Understand the anomaly detection system that monitors channel performance metrics
Marketing Performance Dashboards
View channel-specific dashboards showing historical performance data used by the optimiser
Attribution Methodology
Learn how new customer revenue attribution feeds the optimiser’s aMER calculations
Analysis On Demand
Request custom budget scenarios or allocation adjustments beyond the standard optimiser output