Post-Fit Facades
After fitting, PanelMMM exposes most read and reporting operations through
bound properties:
mmm.datammm.summarymmm.diagnosticsmmm.plot
These are the preferred entry points when you already have a fitted model.
mmm.data
mmm.data returns MMMIDataWrapper.
Direct import path:
from abacus.data.idata import MMMIDataWrapper
You can also create it explicitly with:
wrapper = MMMIDataWrapper.from_mmm(mmm)
Main methods:
| Method | Purpose |
|---|---|
get_target(original_scale=True) | Return observed target data |
get_channel_spend() | Return observed channel spend |
get_posterior_predictive(original_scale=True) | Return posterior predictive samples |
get_errors(original_scale=True) | Return residual samples |
get_channel_contributions(original_scale=True) | Return media contribution samples |
get_contributions(...) | Return channels, baseline, controls, seasonality, and events |
get_elementwise_roas(original_scale=True) | Contribution-over-spend ratios |
get_elementwise_cost_per_target(original_scale=True) | Spend-over-contribution ratios |
get_channel_scale() | Return stored channel scaling factors |
get_target_scale() | Return stored target scaling factors |
to_original_scale(...) | Convert a posterior variable or array to original scale |
to_scaled(...) | Convert an original-scale array back to model scale |
mmm.summary
mmm.summary returns MMMSummaryFactory.
Direct import path:
from abacus.mmm.summary import MMMSummaryFactory
If you instantiate it manually, pass model=mmm when you need transform-backed
curve summaries:
summary = MMMSummaryFactory(mmm.data, model=mmm)
Main methods:
| Method | Purpose |
|---|---|
posterior_predictive(...) | Predictive summary table with observed target |
contributions(...) | Tidy contribution summaries |
mean_contributions_over_time(...) | Wide decomposition table |
roas(...) | ROAS summary |
cost_per_target(...) | Cost-per-target summary |
efficiency(...) | Target-type-aware efficiency summary |
channel_spend(...) | Raw spend table |
saturation_curves(...) | Saturation curve summary table |
adstock_curves(...) | Adstock curve summary table |
total_contribution(...) | Totals by component type |
change_over_time(...) | Percentage change in channel contributions |
MMMSummaryFactory also exposes:
hdi_probsoutput_formatefficiency_metricefficiency_metric_label
mmm.diagnostics
mmm.diagnostics returns MMMDiagnosticsFactory.
Direct import path:
from abacus.mmm.diagnostics.factory import MMMDiagnosticsFactory
Main methods:
| Method | Purpose |
|---|---|
design_summary(X, ...) | Per-variable design checks |
design_report(X, ...) | Machine-readable design report |
mcmc_summary(...) | Parameter-level MCMC diagnostics |
mcmc_report(...) | Machine-readable MCMC report |
predictive_summary(...) | Aggregate predictive metrics |
predictive_report(...) | Machine-readable predictive report |
bayesian_criteria_summary() | LOO, WAIC and Pareto-k summary table |
bayesian_criteria_report() | Typed BayesianCriteriaReport with to_dict() |
The report methods return typed dataclass objects with to_dict().
Bayesian criteria
Both criteria methods require an InferenceData.log_likelihood group. The
standalone functions accept idata directly and are exported from
abacus.mmm.diagnostics.
from abacus.mmm.diagnostics import (
bayesian_criteria_report,
bayesian_criteria_summary,
)
bayesian_criteria_summary(idata) returns a pandas DataFrame with metric,
estimate, se, warning and likelihood_basis columns. Rows cover LOO ELPD,
WAIC ELPD, maximum Pareto-k and counts above 0.7 and 1.0.
bayesian_criteria_report(idata) returns a BayesianCriteriaReport with ELPD
estimates and standard errors, effective parameter counts, LOO/WAIC warnings,
Pareto-k summaries, observation counts and the likelihood basis.
FE reports contrast_space; other models report level_space. CRE scores
marginal unit blocks, so that label alone does not establish comparability
with an ordinary level-observation likelihood. Require matching observation
units, scale and prediction task before comparing scores. See
Model comparison.
Stage 50 retains bayesian_criteria_summary.csv,
bayesian_criteria_report.json and the equivalent elpd_summary.csv table.
These are predictive diagnostics. Warnings require interpretation and do not
establish a causal conclusion or automatically choose a model.
mmm.plot
mmm.plot returns MMMPlotSuite.
Direct import path:
from abacus.mmm.plot import MMMPlotSuite
PanelMMM binds this automatically to the model’s idata, but the class also
supports compatible custom InferenceData objects.
Main methods:
| Method | Purpose |
|---|---|
posterior_predictive(...) | Plot fitted or sampled predictive series |
prior_predictive(...) | Plot prior predictive series |
residuals_over_time(...) | Plot residual trajectories |
residuals_posterior_distribution(...) | Plot residual posterior distributions |
contributions_over_time(...) | Plot time-series contributions |
posterior_distribution(...) | Plot posterior violin distributions |
channel_parameter(...) | Plot channel-level parameter posteriors |
prior_vs_posterior(...) | Compare prior and posterior distributions |
saturation_scatterplot(...) | Plot spend-versus-contribution scatter views |
saturation_curves(...) | Plot sampled saturation curves |
waterfall_components_decomposition(...) | Plot waterfall decompositions |
media_contribution_over_time(...) | Plot stacked media contributions |
channel_contribution_share_hdi(...) | Plot contribution share intervals |
budget_allocation(...) | Plot optimisation allocation outputs |
allocated_contribution_by_channel_over_time(...) | Plot simulated allocation contributions |
Direct idata utilities
The abacus.data.idata package also exports schema and utility helpers:
| Import | Purpose |
|---|---|
MMMIdataSchema | Expected structure for retained MMM InferenceData |
VariableSchema | Variable-level schema helper |
InferenceDataGroupSchema | Group-level schema helper |
filter_idata_by_dates(...) | Filter idata on a date window |
filter_idata_by_dims(...) | Filter idata on non-date dimensions |
aggregate_idata_time(...) | Aggregate idata over time |
aggregate_idata_dims(...) | Aggregate idata over non-time dims |
subsample_draws(...) | Subsample posterior draws |