Guide: Configuring the Model Run
This guide explains how to configure AMMM V2 with config.yml, and how that
configuration interacts with runme.py CLI flags.
What This Guide Covers
Section titled “What This Guide Covers”- Required and high-impact YAML keys
- Current V2 run controls (
runme.pyflags) - Stage-based output expectations
- Diagnostic gating behaviour (
diagnostics_gating)
Minimal Workflow
Section titled “Minimal Workflow”- Start from a known-good config (for example
data-config/demo_config.yml). - Set data columns and media channel mappings.
- Configure baseline controls and priors.
- Run
python runme.py. - Review diagnostics in
50_diagnostics/before downstream interpretation.
Core YAML Sections
Section titled “Core YAML Sections”Data and Target
Section titled “Data and Target”raw_data_granularity: weeklydate_col: datetarget_col: kpitarget_type: revenuetrain_test_ratio: 1.0Media Channels
Section titled “Media Channels”media: - display_name: TV impressions_col: tv_impressions spend_col: tv_spend - display_name: Search impressions_col: search_impressions spend_col: search_spendControls
Section titled “Controls”extra_features_cols: - competitor_sales - newsletter - events
extra_features_impact: competitor_sales: negativeProphet-Assisted Baseline
Section titled “Prophet-Assisted Baseline”prophet: include_holidays: true holiday_country: US yearly_seasonality: true weekly_seasonality: true trend: truePractical note:
trend: trueuses an assisted baseline (Prophet trend estimated from the target and injected as a control), which can reduce collinearity but introduces attribution leakage risk.- For a more conservative setup, compare against
trend: false.
Sampling Controls
Section titled “Sampling Controls”tune: 2000draws: 2000chains: 4target_accept: 0.95ad_stock_max_lag: 8seed: 42Diagnostics Gating
Section titled “Diagnostics Gating”diagnostics_gating: warnAllowed policy values in practice:
strict: halt after failed convergence gatewarn: continue with warningsoff: treated as non-strict in current workflow
Run Modes Are Controlled by CLI
Section titled “Run Modes Are Controlled by CLI”Budget mode is not selected by a YAML run_mode key. Use runme.py flags:
# Scenario planning (default)python runme.py
# Scenario planning with custom levelspython runme.py --scenarios "-10,-5,0,5,10"
# Single-period optimisationpython runme.py --no-scenarios
# Multi-period optimisationpython runme.py --multiperiod --multiperiod-weeks 13Result artefacts:
- Scenario planning:
70_optimisation/budget_scenario_results.csv - Single-period optimisation:
70_optimisation/optimization_results.csv - Multi-period optimisation:
70_optimisation/multiperiod_optimization_results.csv
High-Value CLI Overrides
Section titled “High-Value CLI Overrides”python runme.py \ --draws 1500 \ --tune 1000 \ --chains 2 \ --target-accept 0.9 \ --results-dir resultsRelated flags:
- Performance:
--fast,--jax,--gpu,--chain-method - Ramping (multi-period):
--ramp-abs,--ramp-pct,--ramp-config,--strict-ramp-config,--ramp-eps - Seasonality clips:
--seasonality-clip-min,--seasonality-clip-max
Validation Checks
Section titled “Validation Checks”After each config change, inspect:
10_pre_diagnostics/stationarity_summary.csv10_pre_diagnostics/vif_summary.csv10_pre_diagnostics/prior_predictive_summary.csv50_diagnostics/convergence_report.json(converged)50_diagnostics/calibration_report.json(well_calibrated)
If diagnostics fail, revise priors/specification before trusting optimisation or business reports.
Full Example (Template)
Section titled “Full Example (Template)”raw_data_granularity: weeklydate_col: datetarget_col: revenuetarget_type: revenuetrain_test_ratio: 1.0
media: - display_name: TV impressions_col: tv_impressions spend_col: tv_spend - display_name: Search impressions_col: search_impressions spend_col: search_spend
extra_features_cols: - competitor_sales - promotions
extra_features_impact: competitor_sales: negative
prophet: include_holidays: true holiday_country: US yearly_seasonality: true weekly_seasonality: true trend: false
tune: 2000draws: 2000chains: 4target_accept: 0.95ad_stock_max_lag: 8seed: 42
diagnostics_gating: warnSee also: