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:

Sales(t) = β × TV_Adstocked(t)

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):

Adstocked(t) = Spend(t) + λ × Adstocked(t-1)

Expanded Form (Shows Decay):

Adstocked(t) = Spend(t) + λ×Spend(t-1) + λ²×Spend(t-2) + λ³×Spend(t-3) + ...

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:

Half-Life = ln(0.5) / ln(λ)

Example with λ = 0.7:

Half-Life = ln(0.5) / ln(0.7) = 1.94 weeks

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


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

In MixModeler:

  1. Navigate to Variable Testing

  2. Select Marketing Variable (e.g., TV_Spend)

  3. Test Multiple Adstock Rates (e.g., 30%, 40%, 50%, 60%, 70%)

  4. Compare t-statistics across rates

  5. 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:

  1. Test if TV(t-1) predicts Sales(t)

  2. Test if TV(t-2) predicts Sales(t)

  3. Test if TV(t-3) predicts Sales(t)

  4. 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:

  1. Build model with λ = 0.5 (baseline)

  2. Rebuild with λ = 0.3, 0.4, 0.6, 0.7

  3. Compare model fit metrics (R², AIC)

  4. Check coefficient stability

  5. 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)

λ_holiday = 0.3 during season
λ_post = 0.7 after season (brand halo)

New Product Launch: Slow initial decay (awareness building)

λ_launch = 0.8 (Weeks 1-12)
λ_mature = 0.5 (Week 13+)

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:

  1. Add Variable to Model (e.g., TV_Spend)

  2. Set Adstock Parameter directly in Model Builder

  3. Model applies transformation automatically

  4. 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)

1. Apply adstock: TV_ads60
2. Apply saturation: f(TV_ads60)

Logic: Marketing impact accumulates over time (adstock), then diminishing returns apply to accumulated impact (saturation).

Option 2: Saturation THEN Adstock (Less Common)

1. Apply saturation: f(TV)
2. Apply adstock to saturated values

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:

Sales = 1000 + 0.8 × TV_ads60

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)

ROI = (Immediate_Sales_Lift / Marketing_Spend) - 1
ROI = ($50K / $100K) - 1 = -50% (appears unprofitable)

With Adstock (Correct)

ROI = (Total_Sales_Lift_Including_Carryover / Marketing_Spend) - 1
ROI = ($150K / $100K) - 1 = 50% (actually profitable)

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:

Adstocked(t) = Spend(t-d) + λ × Adstocked(t-1)

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