Adstock & Carryover Effects
Capturing the Lasting Impact of Marketing
Marketing investments don't stop working the moment a campaign ends. A TV commercial seen this week continues to influence purchase decisions for weeks or even months. Adstock modeling (also called carryover effects or decay) mathematically captures this temporal persistence, ensuring accurate attribution of long-term marketing impact.
The Adstock Problem
Without Adstock: Immediate Attribution Only
Scenario:
You spend $100K on TV in Week 1
Sales spike in Week 1: +$80K
Sales remain elevated in Weeks 2-4: +$40K, +$25K, +$15K
Total lift: $160K
Linear Model Without Adstock:
Sales(t) = β × TV_Spend(t)Only captures $80K (Week 1), missing $80K of carry-over lift (50% of total impact).
Result: TV appears only half as effective as it truly is.
With Adstock: Full Attribution
Adstock Model:
Where TV_Adstocked captures the decaying effect:
Week 1: $100K (original spend)
Week 2: $60K (60% carries over)
Week 3: $36K (60% of Week 2)
Week 4: $21.6K (60% of Week 3)
Result: Model correctly attributes all $160K lift to TV investment.
Geometric Adstock: The Standard Approach
Mathematical Formula
Recursive Form (Easiest to Understand):
Expanded Form (Shows Decay):
Where:
λ (lambda): Adstock rate (0 to 1)
Spend(t): Original marketing spend at time t
Adstocked(t): Transformed value accounting for carryover
Understanding Lambda (λ)
Lambda represents the percentage of impact that persists to the next period.
λ = 0 (No Carryover)
All impact occurs immediately
No persistence to future periods
Typical for: Very short-term promotions, flash sales
λ = 0.3 (30% Carryover)
30% of impact carries to next period
70% decays immediately
Typical for: Search advertising, email
λ = 0.5 (50% Carryover)
Half of impact persists
Balanced decay rate
Typical for: Digital display, radio
λ = 0.7 (70% Carryover)
Strong persistence
Impact lasts many weeks
Typical for: TV, print, outdoor
λ = 0.9 (90% Carryover)
Very long-lasting effect
Slow decay
Typical for: Brand campaigns, sponsorships, PR
Visualizing Adstock Decay
Example: $100K Spend in Week 1, λ = 0.6
Pattern: Each week retains 60% of previous week's value, creating exponential decay.
Half-Life Calculation
Formula:
Example with λ = 0.7:
After ~2 weeks, impact decays to 50% of original.
Interpretation Guide:
Typical Adstock Rates by Channel
Television
Typical Range: 0.4 - 0.7 Most Common: 0.5 - 0.6
Rationale:
High reach builds awareness over weeks
Creative messaging has lasting impact
Frequency effects accumulate
Brand recall persists
Business Reality: TV ad seen Week 1 influences purchases in Weeks 2-6 as consumers:
Remember the brand when shopping
Discuss ads with friends/family
Search for product online (delayed response)
Radio
Typical Range: 0.3 - 0.6 Most Common: 0.4 - 0.5
Rationale:
Shorter creative (15-30 sec vs TV's 30-60 sec)
Often consumed passively (background)
Lower production value = less memorable
Still builds frequency over time
Digital Display
Typical Range: 0.2 - 0.5 Most Common: 0.3 - 0.4
Rationale:
Often served to high-intent users (immediate action)
Banner blindness reduces lasting impact
Frequency caps limit persistence
Some retargeting effect carries over
Paid Search
Typical Range: 0.0 - 0.3 Most Common: 0.1 - 0.2
Rationale:
Captures existing demand (bottom-funnel)
Users already searching = immediate conversion
Minimal brand-building component
Short-term transactional nature
Social Media (Paid)
Typical Range: 0.3 - 0.6 Most Common: 0.4 - 0.5
Rationale:
Engagement creates lasting impressions
Content may be shared (extended reach)
Algorithm amplification over time
Community effects
Print
Typical Range: 0.5 - 0.8 Most Common: 0.6 - 0.7
Rationale:
Physical presence lasts (magazines kept for weeks)
Pass-along readership extends impact
Deeper engagement than digital
Premium context enhances recall
Outdoor (Billboards, Transit)
Typical Range: 0.6 - 0.8 Most Common: 0.7
Rationale:
Repeated daily exposure (same commute route)
4-week+ campaign durations typical
High frequency builds memory
Environmental integration
Sponsorships & PR
Typical Range: 0.7 - 0.9 Most Common: 0.8 - 0.85
Rationale:
Halo effect lasts months/years
Association building is gradual
Credibility compounds over time
Long-term brand equity impact
Finding Optimal Adstock Rates
Method 1: Statistical Testing (Recommended)
In MixModeler:
Navigate to Variable Testing
Select Marketing Variable (e.g., TV_Spend)
Test Multiple Adstock Rates (e.g., 30%, 40%, 50%, 60%, 70%)
Compare t-statistics across rates
Select Rate with Highest t-statistic (strongest significance)
Example Results:
Rationale: Highest t-stat indicates the transformation that best explains KPI variance.
Method 2: Granger Causality
Question: Does marketing spending "Granger-cause" KPI at different lag periods?
Process:
Test if TV(t-1) predicts Sales(t)
Test if TV(t-2) predicts Sales(t)
Test if TV(t-3) predicts Sales(t)
Continue until non-significant
Result: Significant lags reveal carryover duration
Translation to Lambda:
Significant at lag 1 only → λ ≈ 0.2-0.3
Significant at lags 1-2 → λ ≈ 0.4-0.5
Significant at lags 1-4 → λ ≈ 0.6-0.7
Significant at lags 1-6+ → λ ≈ 0.8+
Method 3: Business Judgment
Questions to Ask:
How long do customers typically remember this advertising?
What's the purchase cycle duration for your product?
Is this brand-building or direct response?
What's the creative quality/memorability?
Heuristic:
Short purchase cycle (days-weeks) → Lower lambda
Long purchase cycle (months) → Higher lambda
Memorable creative → Higher lambda
Forgettable/generic → Lower lambda
Method 4: Sensitivity Analysis
Process:
Build model with λ = 0.5 (baseline)
Rebuild with λ = 0.3, 0.4, 0.6, 0.7
Compare model fit metrics (R², AIC)
Check coefficient stability
Select optimal lambda
Best Practice: If multiple lambdas give similar fit, choose based on business knowledge.
Advanced: Time-Varying Adstock
Some campaigns have non-constant decay based on context:
Holiday Campaigns: Rapid decay after holiday (gift purchased)
New Product Launch: Slow initial decay (awareness building)
Implementation: Split variable by time period and model separately.
Applying Adstock in MixModeler
Manual Adstock Creation
Step 1: Variable Workshop Navigate to Variable Workshop
Step 2: Create Adstock Variable
Select base variable (e.g., TV_Spend)
Choose "Create Adstock Transformation"
Set lambda rate (e.g., 60% = 0.6)
Name: TV_Spend_ads60
Step 3: Add to Model Use adstocked variable in Model Builder instead of raw spend
Integrated Adstock in Model Builder
Alternative Workflow:
Add Variable to Model (e.g., TV_Spend)
Set Adstock Parameter directly in Model Builder
Model applies transformation automatically
Preview changes before applying
Benefit: Faster iteration without creating new variables
Combining Adstock with Saturation
Most realistic MMM models apply both transformations:
Order Matters:
Option 1: Adstock THEN Saturation (Recommended)
Logic: Marketing impact accumulates over time (adstock), then diminishing returns apply to accumulated impact (saturation).
Option 2: Saturation THEN Adstock (Less Common)
Logic: Each period's spend saturates immediately, then effect carries over.
MixModeler Default: Option 1 (adstock first) aligns with industry best practices.
Common Adstock Mistakes
❌ Mistake 1: No Adstock for Media Channels
Problem: Underestimates long-term effectiveness Fix: Always apply adstock to TV, Radio, Print, Outdoor (λ ≥ 0.4)
❌ Mistake 2: Identical Adstock Across All Channels
Problem: Different channels have different persistence Fix: Customize lambda by channel type
❌ Mistake 3: Over-Adstocking
Problem: λ = 0.9 when reality is λ = 0.5 Symptom: Coefficient becomes non-significant or wrong sign Fix: Test multiple rates, select based on t-statistics
❌ Mistake 4: Ignoring Initial Conditions
Problem: Model doesn't account for pre-period advertising Fix: Use first 4-8 weeks as "warm-up" period for adstock accumulation
❌ Mistake 5: Forgetting Adstock in Forecasting
Problem: Future predictions ignore carryover from past periods Fix: When forecasting, include adstocked values from historical spend
Diagnostic: Is Your Adstock Rate Right?
✅ Good Signs
Marketing variable has significant coefficient (t-stat > 2)
Coefficient sign is positive (makes business sense)
Model R² improved vs. non-adstocked version
Residuals show reduced autocorrelation (Durbin-Watson closer to 2)
ROI estimates align with business expectations
⚠️ Warning Signs
Coefficient becomes negative (over-adstocked)
t-statistic decreases vs. non-adstocked
High multicollinearity introduced (VIF spikes)
Business stakeholders disagree with implied persistence
Action: Test alternative lambda values.
Interpreting Adstocked Coefficients
Example Model:
Interpretation: "A $1 increase in TV spending generates $0.80 in sales:
$0.40 immediately (Week 0)
$0.24 in Week 1 (60% carryover)
$0.14 in Week 2 (60% of Week 1)
$0.02 in Weeks 3+ (remaining decay)"
Total: $0.80 cumulative effect from $1 spent.
Critical Point: The coefficient represents the total cumulative effect including all carryover, not just immediate impact.
Adstock and ROI Calculation
Without Adstock (Underestimate)
With Adstock (Correct)
Lesson: Adstock is essential for accurate ROI measurement. Without it, long-term channels (TV, Print) appear less effective than they truly are.
Special Case: Promotions and Price
Question: Should we apply adstock to price reductions or promotions?
Answer: Usually no or very low adstock (λ = 0.1-0.2)
Rationale:
Price promotions have immediate effect
Customers respond quickly to discounts
Pull-forward effect (future sales borrowed)
Limited memory of past promotions
Exception: Brand equity from sustained promotions may justify modest adstock.
Adstock in Decomposition Analysis
When running decomposition to calculate channel contributions:
Adstock is Already Incorporated: The model uses adstocked variables, so contributions automatically include carryover effects.
Example Decomposition:
Week 1 TV spend: $100K
Week 1 TV contribution: $80K (includes immediate + future carryover)
Week 2 TV spend: $0
Week 2 TV contribution: $48K (carryover from Week 1)
Total TV contribution over 2 weeks: $128K from $100K spend
Key Insight: Contributions in periods with zero spend reflect carryover from previous investments.
Best Practices for Adstock Modeling
✅ Do's
Test Multiple Rates Always test 3-5 different lambda values (e.g., 0.3, 0.4, 0.5, 0.6, 0.7)
Use Variable Testing Leverage MixModeler's Variable Testing feature to compare t-statistics
Channel-Specific Rates Don't use the same adstock rate for all channels
Document Decisions Record why specific lambda values were chosen
Consider Business Context Statistical fit + business judgment = best results
Validate with Stakeholders Show decay curves to marketing teams - do they make sense?
Update Periodically Adstock rates may change as creative quality or media mix evolves
❌ Don'ts
Don't Skip Adstock It's not optional for media channels - essential for accuracy
Don't Over-Complicate Geometric adstock works for 95% of use cases
Don't Ignore t-statistics If adstocked variable has low significance, try different rate
Don't Apply Blindly Not all marketing needs adstock (e.g., search often doesn't)
Don't Forget in Forecasts Future predictions must account for carryover from historical spend
Adstock Rate Summary Table
Quick reference for starting values by channel:
Note: These are starting points. Always validate with data using Variable Testing.
Advanced: Delayed Adstock
Sometimes impact doesn't occur immediately - there's a lag before effect starts:
Formula:
Where d = delay period (e.g., d=2 means 2-week delay)
Use Cases:
Direct mail (2-3 week delivery + response time)
Magazine print (4-8 week production + readership)
Trade show sponsorships (deals close months later)
Implementation in MixModeler: Create lead/lag variable first, then apply adstock to lagged version.
Summary
Key Takeaways:
⏱️ Adstock captures lasting impact of marketing beyond immediate period
📉 Geometric decay (exponential) is industry standard and sufficient for most cases
🎯 Lambda (λ) controls persistence - higher λ = longer carryover
📊 Different channels have different rates - TV (0.6) vs Search (0.1)
🔬 Test multiple rates using Variable Testing to find optimal lambda
✅ Essential for accurate ROI - without adstock, long-term channels appear ineffective
🔗 Combine with saturation for realistic marketing response (adstock first, then saturation)
Properly modeling adstock ensures you capture the full value of marketing investments, especially for awareness-building channels that drive sustained impact over time.
Last updated