Skip to content

1.0.0

Latest

Choose a tag to compare

@juanitorduz juanitorduz released this 07 Aug 11:14
· 1 commit to main since this release
07b1a20

PyMC-Marketing V1.0.0 🎉

PyMC-Marketing v1.0.0 is out. After two years of 0.x releases, this is our stable API.

  • Multidimensional MMM is now the MMM. Geo, product, and channel dimensions are first-class, with one xr.Dataset carrying all inputs.
  • ~1.5x faster sampling, thanks to model freezing and a static-shape numba convolve1d. CPU now beats JAX on our demo MMM.
  • Built on PyMC 6, ArviZ 1.2, PyTensor 3, NumPy 2, with a new namespace-based plotting API on arviz-plots and interactive Plotly output.
  • v1.0.0 by @williambdean in #2677 (Migration PR!)

And four new modelling workflows we're particularly excited about:

Upgrading from 0.19? MMM and CLV both have breaking changes — start with the migration guide notebooks.

Docs: https://www.pymc-marketing.io

THANK YOU TO ALL OUR USERS AND CONTRIBUTORS!!!

What's Changed

Major Changes 🛠

Deprecations 🚨

  • chore(model-builder): remove X_pred/y_pred deprecated aliases by @anevolbap in #2562
  • fix(hsgp): stop forwarding deprecated drop_first to pm.gp.HSGP by @anevolbap in #2571

New Features 🎉

  • integrates the v2 namespace-based plotting API into the MMM by @isofer in #2555
  • feat(mlflow): attach active run id to idata.attrs in autolog by @anevolbap in #2574
  • feat(mmm): stamp version on optimize_budget and sample_response_distribution by @anevolbap in #2578
  • feat(bass): refactor to ModelBuilder with save/load and OOS predictions by @williambdean in #2584
  • Predicted Incrementality by Experimentation (PIE) for Ad Measurement MVP by @thomaspinder in #2593
  • Multiplicative MMM (Log and Log-Log Models) by @juanitorduz in #2477
  • Add input validation for CLV models by @shivamlalakiya in #2794
  • feat(mmm): generalize supplementary data persistence via MuEffect.idata_groups() by @williambdean in #2583
  • Freeze MMM model before sampling by @ricardoV94 in #2606
  • feat: Fourier decomposition visualization — color_dim for plot_curve and plot_decomposition method by @williambdean in #2783
  • Create ModelFitter class by @ColtAllen in #2805
  • feat(mmm): ROAS calibration via add_cost_per_target_calibration + tutorial notebook by @daimon-pymclabs in #2828

Bugfixes 🐛

  • fix(plot): use ceil division so plot_curve grid fits all axes by @anevolbap in #2561
  • fix(plot): support combined sample dim in plot_curve by @anevolbap in #2587
  • fix(mmm): correct return type on sample_posterior_predictive and sample_response_distribution by @anevolbap in #2591
  • fix(deps): upper bound matplotlib <3.11 by @anevolbap in #2626
  • fix(mmm): keep RootSaturation gradient finite at zero spend by @hermesdt in #2640
  • fix(clv): render the CLV likelihood equations and correct daily/hourly CLV scaling by @daimon-pymclabs in #2820
  • fix(customer_choice): distinguish products in MVITS HDI legend labels by @anevolbap in #2580
  • Fix: Remove dims argument from Transformation.apply by @juanitorduz in #2427
  • fix: multidimensional.MMM y needs Series name by @juanitorduz in #2543
  • fix(plot): drop plt.show from MMMPlotSuite.cv_predictions by @anevolbap in #2559
  • fix(utils): drop obsolete fit_data UserWarning workaround in from_netcdf by @anevolbap in #2558
  • fix(mlflow): type-hint MMMWrapper.predict to silence MLflow warning by @anevolbap in #2579
  • [HOT FIX] Dependencies: Upper bound pymc-extras by @juanitorduz in #2623
  • Fix flaky test_log_model_graph_no_graphviz polluted by MLflow infra logs by @daimon-pymclabs in #2644
  • Fix mypy errors blocking pre-commit on main by @daimon-pymclabs in #2667

Documentation 📖

Maintenance 🔧

  • Bound and Pin PyMC and PyTensor Versions by @juanitorduz in #2542
  • fix(ci): stop duplicate-issues cancellations; harden triage by @anevolbap in #2560
  • refactor(budget-optimizer): use PrivateAttr and model_post_init by @anevolbap in #2567
  • Add merge_group trigger to CI workflows for merge queue support by @williambdean in #2678
  • refactor(mmm): rename optimize_budget **minimize_kwargs to **allocate_budget_kwargs by @anevolbap in #2563
  • ci: add git-ai workflow for authorship attribution by @PabloRoque in #2746
  • Sync agent instructions across Cursor, Claude, and Copilot by @drbenvincent in #2780
  • chore: migrate from arviz.InferenceData to xarray.DataTree by @williambdean in #2782

New Contributors

Full Changelog: 0.19.4...1.0.0