What's Changed
Major Changes 🛠
- refactor(budget-optimizer): allocate_budget returns BudgetOptimizationResult by @juanitorduz in #2853
New Features 🎉
- feat(mmm): parametrise GeometricAdstock by half-life by @TeemuSailynoja in #2839
- refactor(budget-optimizer): BudgetOptimizer accepts pm.Model + DataTree directly by @williambdean in #2654
- Expand mmm.summary for frontend-ready MMM data export (closes #2715) by @drbenvincent in #2859
- feat(mmm): parameterise DelayedAdstock by half-life by @JakePiekarski314 in #2887
- feat(mmm): co-optimize named pm.Data levers alongside the media budgets by @PabloRoque in #2884
- feat(mmm): an objective that sees mu-effect contributions (total_response_original_scale) by @PabloRoque in #2895
- feat(mmm): allow constant tensors in adstock sample_prior by @shivamlalakiya in #2795
- feat(mmm): add prefix option to LinearTrend changepoint coords/variables by @shivamlalakiya in #2903
- feat(mmm): co-optimize monetary spend variables with the media budgets by @PabloRoque in #2908
- Add ECDF plot_type to plot_expected_purchases_ppc by @shivamlalakiya in #2905
- feat: add R2-D2-M2 prior for variance decomposition by @williambdean in #2833
Bugfixes 🐛
- fix(mmm): reject non-response-scale likelihoods under link='identity' by @anevolbap in #2841
- fix(mmm): support arbitrary VariableFactory in FourierBase.sample_prior by @shivamlalakiya in #2873
- Make incrementality correct beyond the additive case: link-aware reduction, mediated mu_effects, and pm.do interventions by @daimon-pymclabs in #2813
- fix(mmm): use original model when clone_model=False in sample_posterior_predictive by @shivamlalakiya in #2796
- fix(mmm): keep the ambient layout engine in decomposition.waterfall by @anevolbap in #2793
- fix(mmm): a correct optimization window — effect data, observed inputs, carry-in, effective carryover by @PabloRoque in #2898
- fix(mmm): keep the ambient layout engine in MMMPlotSuite by @anevolbap in #2906
Documentation 📖
- docs(skills): fix az.plot_trace call broken under ArviZ 1.x by @bourdux in #2842
- docs: name the uv extras that carry pytest and pre-commit by @anevolbap in #2844
- fix(docs): drop the OptimizerCompatibleModelWrapper alias from autosummary (#2660) by @anevolbap in #2854
- Halo Effect Modeling Notebook by @juanitorduz in #2450
- Signpost the advanced funnel notebook: full model names and section takeaways by @daimon-pymclabs in #2880
- docs: add MMM campaign credibility disaggregation notebook by @cetagostini in #2849
- docs: address #2775 review findings in mmm_funnel_mueffect notebook by @drbenvincent in #2868
- Docs: build funnel MMMs from YAML by @drbenvincent in #2885
- docs(mmm): promote the credibility disaggregation notebook to the docs gallery by @juanitorduz in #2897
- docs(mmm): funnel-aware budget optimization in the advanced funnel notebook by @juanitorduz in #2890
- fix(docs): add persistent stale-version banner and fix pydata-sphinx-theme CSS collision by @williambdean in #2915
- docs(mmm): clarify the credibility disaggregation notebook by @juanitorduz in #2922
Maintenance 🔧
- fix(clv): seed the Pareto/NBD convergence test to stop demz flakiness by @juanitorduz in #2876
- refactor(budget-optimizer): OptimizationVariable abstraction for the decision vector by @PabloRoque in #2879
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci[bot] in #2893
- Update pymc stack: pymc>=6.2,<6.3 and pymc-extras>=0.14,<0.15 (adapt to pymc 6.1 fgraph IR) by @juanitorduz in #2883
- test(clv): fix flaky GammaGammaModel convergence test by @daimon-pymclabs in #2913
- paper: add JOSS submission by @williambdean in #2916
- fix(deps): drop the matplotlib<3.11 upper bound by @anevolbap in #2924
New Contributors
- @bourdux made their first contribution in #2842
- @JakePiekarski314 made their first contribution in #2887
Full Changelog: 1.0.0...1.1.0