Skip to content

mwheeler235/media-mix-model

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

10 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Media Mix Model (MMM) Comparison & Optimization

A comprehensive Bayesian Media Mix Modeling system for analyzing marketing channel effectiveness, optimizing budget allocation, and measuring incremental sales impact with MLOps experiment tracking.

Project Overview

This project implements an Bayesian Media Mix Model that significantly outperforms traditional Ridge regression approaches by incorporating statistical modeling techniques and marketing domain knowledge.

Key Features

  • Enhanced Seasonality: 3 Fourier terms capturing quarterly business cycles
  • Student-t Robustness: Resistant to outliers and noise
  • Saturation Transforms: LogisticSaturation modeling diminishing returns
  • Adstock Transforms: GeometricAdstock for carryover effects
  • Data-informed Priors: Calibrated to actual channel efficiency
  • MLOps Experiment Tracking: Systematic parameter optimization and performance logging

Quick Start

Installation

# Clone the repository
git clone <repository-url>
cd media-mix-model

# Create virtual environment
python -m venv .env
source .env/bin/activate  # On Windows: .env\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Launch Jupyter
jupyter notebook mmm_model_comparison.ipynb

Basic Usage

  1. Load Data: The model works with synthetic data including 6 marketing channels:

    • TV Spend
    • Paid Social Spend
    • Paid Search Spend
    • Native Spend
    • Display Spend
    • Radio Spend
  2. Run Model Comparison: Execute the notebook to compare Bayesian MMM vs Ridge Regression

  3. Optimize Allocation: Analyze budget allocation strategies and ROAS optimization

Technical Architecture

Core Components

  1. Bayesian MMM (bayesian_mmm function)

    • PyMC probabilistic programming
    • Student-t likelihood for robustness
    • Hierarchical priors for channel effects
    • Advanced seasonality modeling
  2. Saturation & Adstock Transforms

    • LogisticSaturation for diminishing returns
    • GeometricAdstock for carryover effects
    • Customizable parameter optimization
  3. MLOps Experiment Tracking

    • Automated parameter logging
    • Performance comparison dashboard
    • JSON-based experiment persistence

Key Parameters

# Saturation Parameters (Less Aggressive Configuration)
saturation_params = {
    'tv_spend': {'lam': 1.8, 'contr': 50000},
    'paid_social_spend': {'lam': 1.5, 'contr': 30000},
    'paid_search_spend': {'lam': 2.2, 'contr': 20000},
    'native_spend': {'lam': 1.2, 'contr': 15000},
    'display_spend': {'lam': 1.7, 'contr': 25000},
    'radio_spend': {'lam': 2.0, 'contr': 80000}
}

Analysis Capabilities

1. Channel Performance Analysis

  • Individual channel ROAS calculation
  • Contribution percentage analysis
  • Coefficient comparison across models

2. Budget Allocation Optimization

  • MMM-Optimized: Data-driven allocation based on marginal ROAS
  • Equal Allocation: Baseline uniform distribution
  • Historical Allocation: Current spending patterns

3. Incremental Sales Measurement

  • Lift over baseline scenarios
  • Performance gap analysis
  • ROI quantification

πŸ”¬ MLOps & Experimentation

The project includes a comprehensive experiment tracking system:

Experiment Logging

# Automatic logging of model runs
log_mmm_experiment(
    saturation_params=saturation_params,
    bayes_metrics=bayes_metrics,
    ridge_metrics=ridge_metrics,
    bayes_roas=bayes_roas,
    ridge_roas=ridge_roas
)

Performance Dashboard

  • 6-panel visualization system
  • Parameter optimization insights
  • Performance trend analysis
  • Experiment comparison utilities

Experiment Files

  • Stored in mmm_experiments/ directory
  • JSON format with timestamps
  • Searchable parameter history

πŸ“ Project Structure

media-mix-model/
β”œβ”€β”€ README.md
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ mmm_model_comparison.ipynb    # Main analysis notebook
β”œβ”€β”€ synthetic_data_generation.ipynb
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ synthetic_mmm_data_high_noise.csv
β”‚   β”œβ”€β”€ synthetic_mmm_data_low_noise.csv
β”‚   └── lift_priors.csv
└── mmm_experiments/             # MLOps experiment logs
    └── *.json                   # Timestamped experiment files

Configuration Options

Model Hyperparameters

  • Sampling: 3000 samples + 3000 tune (MCMC)
  • Seasonality: 3 Fourier terms (annual, semi-annual, quarterly)
  • Likelihood: Student-t distribution for robustness
  • Priors: Data-informed hierarchical priors, incorporating lift test results

Customizable Components

  • Channel-specific saturation curves
  • Adstock decay parameters
  • Prior distributions
  • Sampling configuration

Dependencies

Core Libraries:

  • pymc (4.0+) - Bayesian modeling
  • pymc-marketing - MMM components
  • pandas, numpy - Data manipulation
  • scikit-learn - ML utilities
  • matplotlib, seaborn - Visualization
  • jupyter - Notebook hosting

Analysis:

  • statsmodels - Statistical modeling
  • arviz - Bayesian analysis

Key Insights

Model Comparison Results

  1. Bayesian MMM superiority: Consistent outperformance in accuracy and business metrics
  2. Saturation importance: Less aggressive parameters improve realistic ROAS estimates
  3. Budget optimization: 15-25% efficiency gains through data-driven allocation

License

This project is open source. Please refer to the LICENSE file for details.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests and documentation
  5. Submit a pull request

About

A comprehensive Bayesian Media Mix Modeling system for analyzing marketing channel effectiveness, optimizing budget allocation, and measuring incremental sales impact with MLOps experiment tracking.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors