Releases: pymc-labs/pymc-marketing
0.19.4
What's Changed
New Features 🎉
- Add Zarr save/load support to ModelIO (zarr>=3 shim) by @PabloRoque in #2512
- Load models without fit data by @ColtAllen in #2538
Documentation 📖
- Adding Consideration Sets Model to Mixed Logit by @NathanielF in #2442
- fix grammar in causal approach notebook by @npandolfi in #2528
- fix(docs): convert Resources section from raw HTML to markdown heading by @erete22 in #2537
- Add Maxdiff methods to Consumer Choice by @NathanielF in #2514
- migrating time_slice_cv plots to its own PlotSuite (MMMCVPlotSuite) by @isofer in #2530
Maintenance 🔧
- fix: cap jax below 0.10.0 due to breaking changes in new release by @isofer in #2500
- feat(mmm): chainable mu effects by @williambdean in #2503
- Adds DecompositionPlots to the pymc_marketing.mmm.plotting namespace by @isofer in #2488
- adds a SensitivityPlots namespace class to mmm.plotting by @isofer in #2494
- fix: restore original_scale Deterministics on MMM save/load round-trip by @PabloRoque in #2508
- Restore from_netcdf with deprecation warning by @cetagostini-wise in #2529
- Unpin JAX by @juanitorduz in #2534
New Contributors
- @npandolfi made their first contribution in #2528
- @erete22 made their first contribution in #2537
Full Changelog: 0.19.3...0.19.4
0.19.3
What's Changed
New Features 🎉
- Update serialization process (#2379) by @isofer in #2391
- Support fixed/user-defined scaling factors for stable model refreshes by @drbenvincent in #2479
Bugfixes 🐛
- Fix Serialization LogNormal from YAML by @juanitorduz in #2476
- Fix: Latex rendering in new Adstock guide by @timbo112711 in #2472
Documentation 📖
- Porting causal identification notebook to MMM multidimensional [V2] by @juanitorduz in #2475
- Use arviz-darkgrid style globally for all plot directives via plot_pre_code by @williambdean in #2492
Maintenance 🔧
- Move mmm-modeling skill out of dot-directory for crawler discovery by @lfiaschi in #2489
- Initial PR for MMMPlotSuite by @isofer in #2437
- Add DiagnosticsPlots class with 6 time-series diagnostic methods by @isofer in #2459
- fix: register xr.DataArray deserializer in SpecialPrior to fix save/load round-trip by @PabloRoque in #2496
- Bump version to 0.19.3 by @juanitorduz in #2498
Full Changelog: 0.19.2...0.19.3
0.19.2
What's Changed
Bugfixes 🐛
- Fix MaskedPrior with non-scalar Prior parameters by @juanitorduz in #2464
- Fix: IndexError in MultiDimensionalBudgetOptimizerWrapper by @juanitorduz in #2452
Documentation 📖
- Adstock documentation - Guide to Adstock Transformations in PyMC-Marketing by @timbo112711 in #2449
Maintenance 🔧
- Bump version to 0.19.2 by @juanitorduz in #2465
Full Changelog: 0.19.1...0.19.2
0.19.1
What's Changed
Bugfixes 🐛
- Make MMM workflow idempotent by @ricardoV94 in #2413
- Restore metric coordinate order after to_xarray by @cetagostini in #2445
Documentation 📖
- Get data of case study from csv by @juanitorduz in #2447
Maintenance 🔧
- Bump version to 0.19.1 by @juanitorduz in #2446
Full Changelog: 0.19.0...0.19.1
0.19.0
Warning
We have migrated all our documentation to the more complete and modern class multidimensional.MMM. See the migration guide: https://www.pymc-marketing.io/en/latest/notebooks/mmm/mmm_migration_guide.html
We will remove the old mmm.MMM class in 0.20.0. Please migrate your code! Most changes are internal optimizations. The APIs are very similar!
What's Changed
Major Changes 🛠
- Default to unpooled transformation priors in Multidimensional MMM by @ricardoV94 in #2293
- CLV API Deprecation by @ColtAllen in #2347
New Features 🎉
- Some fixes TimeSlice Cross Validation and Extend Case Study by @juanitorduz in #2393
- Validate YAML with Pydantic by @juanitorduz in #2418
Bugfixes 🐛
- Raise explicitly when trying to optimize or measure incrementality of discrete channel data by @ricardoV94 in #2337
- bug : mlflow uses the name param on versions 3.0.0 and greater by @daniel-saunders-phil in #2339
- Respect channel ordering when applying budget bounds by @cetagostini in #2350
- Implement MultiDimensionalMMM with pymc.dims by @ricardoV94 in #2204
- Fix: Handle DateIndex in CSA plot_data to resolve crash (fixes #1864) by @shivamlalakiya in #2302
- remove superfluous use of
arbitrary_types_allowedin annotations by @nataziel in #2403 - BUG: HSGPKwargs.cov_func does not support custom Cov by @isofer in #2398
- fix nb: GAM NOTEBOOK BROKEN by @juanitorduz in #2416
- fix: work around RuntimeError by @williambdean in #2421
- Add compute_mean_contributions_over_time to MMM multidim by @juanitorduz in #2423
- Fix: Channel coordinates are alphabetically sorted in multidimensional MMM, causing ROAS calculation errors by @juanitorduz in #2422
- Hot Fix: Remove Constrain Variables Sample Posterior Predictive by @juanitorduz in #2440
Documentation 📖
- Revert "cleanup (#2285)" by @ricardoV94 in #2324
- Incrementally, ROAs, CAC, etc... by @isofer in #2290
- Docs: Add CSA module to README header #1821 by @shivamlalakiya in #2301
- docs: Add missing modules by @williambdean in #2343
- Incrementality - the rest of the story by @isofer in #2300
- update docstring for MMM by @isofer in #2358
- Group the custom components notebooks by @daniel-saunders-phil in #2362
- MMM Data Generator by @juanitorduz in #2292
- Demo notebook for cost per unit by @isofer in #2363
- Clarify budget distribution over period by @ricardoV94 in #2394
- Mmm dims migration guide by @ricardoV94 in #2392
- Fix wrong constraints docstrings by @ricardoV94 in #2395
- Custom MMM Model: ROAS Parametrization by @juanitorduz in #2361
- Expose the new incrementality module in some key examples by @juanitorduz in #2410
- Update case study title for clarity by @juanitorduz in #2412
- ROAS parametrizatio notebook fix by @juanitorduz in #2414
- Remove CLV
lifetimesDependency from Notebooks and Unit Tests by @ColtAllen in #2428 - Replace potential by likelihood in calibration by target by @cetagostini in #2407
Maintenance 🔧
- Upper Bound For ArviZ 1.0.0 by @juanitorduz in #2326
- Fix/redo #2290 (incrementally) without utility rename by @isofer in #2333
- Allow all_tests to pass when test jobs are skipped by @isofer in #2334
- Update README.md by @juanitorduz in #2332
- FancierLinearRegression by @williambdean in #2315
- Unblock merges for non-code PRs by always reporting
all_testsstatus by @isofer in #2344 - Cast channel_data to float at construction time by @isofer in #2341
- Add Claude and Cursor AI skill definitions by @cetagostini in #2349
- MMM SKILLs by @juanitorduz in #2354
- skills: clarify lift test calibration with time-varying media by @drbenvincent in #2360
- Support cost_per_unit for channels with non-monetary data (impressions, clicks, etc.) - part 1 by @isofer in #2320
- feat: support sample_prior_predictive kwargs to
sample_curveby @williambdean in #2365 - Extends the cost-per-unit support to plotting by @isofer in #2364
- Fix optimization with time varying media by @ricardoV94 in #2396
- Validate YAML structure and warn on unknown keys by @cetagostini in #2409
- [HOT-FIX] NDArray.record() now requires an in_warmup keyword by @juanitorduz in #2429
- Fix: MediaConfigList should be parametrized explicitly by core_dim/media_dim by @juanitorduz in #2426
- make mmm optimization tests deterministic by @juanitorduz in #2431
- Bump version to 0.19.0 by @juanitorduz in #2441
New Contributors
- @shivamlalakiya made their first contribution in #2301
Full Changelog: 0.18.2...0.19.0
0.18.2
What's Changed
Documentation 📖
- mmm utils cleanup by @juanitorduz in #2285
Maintenance 🔧
- Fix compatibility with latest pytensor by @ricardoV94 in #2316
Full Changelog: 0.18.1...0.18.2
0.18.1
What's Changed
Major
Documentation 📖
- Create a notebook to display plot_interactive abilities by @isofer in #2272
- add watermark to interactive notebook by @juanitorduz in #2278
- MMM Custom Model: Splines as Varying Intercept by @juanitorduz in #2277
- fix generate_gallery and add plot interactive image to gallery by @isofer in #2279
- notebook typo by @juanitorduz in #2280
- Add Geo-Level Lift Test Calibration Notebook by @drbenvincent in #2248
Maintenance 🔧
- chore: remove mlflow module experimental warning by @williambdean in #2281
- Update requirements.txt by @stdp95 in #2263
- chore: migrate to pytest-split by @williambdean in #2284
- fix #2299 (Sensitivity Analysis: Integer Truncation when channel_data is integer and sweep_values are fractional) by @isofer in #2307
- fix cv with rng by @juanitorduz in #2308
- Pin Upper Bound PyMC-Extras because of Prior class breaking changes by @isofer in #2311
Full Changelog: 0.18.0...0.18.1
0.18.0
Important
We have migrated all our documentation to the more complete and modern class multidimensional.MMM. See the migration guide: https://www.pymc-marketing.io/en/latest/notebooks/mmm/mmm_migration_guide.html
We will remove the old mmm.MMM class in 0.20.0. Please migrate your code! Most changes are internal optimizations. The APIs are very similar!
What's Changed
Major Changes 🛠
- Run whole suite with C and Numba linkers by @ricardoV94 in #2135
New Features 🎉
- Time-Slice CV Class by @timbo112711 in #2037
- feat: VariableFactory support in HSGP components by @williambdean in #2164
- Pydantic
MuEffectby @PabloRoque in #1922 - Add Interactive Plotly Plotting for MMM (Phase 1) by @isofer in #2235
- Add narwhals support to Fivetran data adaptors by @williambdean in #2224
Bugfixes 🐛
- Fix
ShiftedBetaGeoModelbroadcasting bug in predictive methods by @ColtAllen in #2121 - Fix: Use **kwargs instead of kwargs parameter in MNLogit methods by @Eshaan-byte in #2131
- Add check to
to_datetimeby @tibisabau in #2238 - Fix Plot Contributions Over Time by @juanitorduz in #2250
Documentation 📖
- Fix typos in clv_quickstart by @JoshTripleWhale in #2120
- [MMM DOCS- Case Study ]Add custom optimizer section. by @juanitorduz in #2125
- Fix plot_curve documentation examples not rendering by @Eshaan-byte in #2130
- Add Tutorial Notebook for
ShiftedBetaGeoModelby @ColtAllen in #2122 - remove dims from MediaTransform call docstring by @williambdean in #2144
- work on better SEO properties by @OriolAbril in #2119
- Harmonize HSGP arguments in MMM Multidimensional & Test using ROAS calibration notebook by @juanitorduz in #2172
- Fix call to .sample_curves in multi-dim notebook by @daniel-saunders-phil in #2192
- Fix call to .sample_curves in all multi-dim notebooks by @isofer in #2196
- Adding Discrete choice mixed logit Model by @NathanielF in #2150
- plot_channel_contribution_grid to MMM Multidimensional + Documentation Notebook by @juanitorduz in #2177
- [Doc]: Advanced Notebook: Chronos by @juanitorduz in #2203
- Port TVP Intercept Notebook to MMM Multidimensional API by @timbo112711 in #2207
- Port MMM End-to-End Case Study to MMM Multidimensional API by @juanitorduz in #2191
- Port MMM evaluation notebook to new MMM class by @cetagostini in #2217
- Clarify hierarchical prior specification by @ricardoV94 in #2219
- Bug Fixes for IData Wrapper & Summary by @isofer in #2233
- Migrating: MMM with time-varying media baseline by @cetagostini in #2218
- Migrate MMM Example Notebook by @juanitorduz in #2212
- default sampler - mmm example notebook by @juanitorduz in #2245
- Port README to new MMM class. by @juanitorduz in #2244
- Port MMM Quickstart Notebook to use Multidimensional MMM by @ricardoV94 in #2232
- MMM Migration guide by @juanitorduz in #2254
Maintenance 🔧
- Add Cursor command and rules documentation by @cetagostini in #2132
- Unpin JAX version by @juanitorduz in #2143
- expose
priorsproperty to Transformations by @williambdean in #2146 - update headers 2026 by @juanitorduz in #2162
- chore: consolidate component test by @williambdean in #2159
- Docs: clean up Streamlit MMM explainer README by @AD1007 in #2170
- Isofer/idata codification by @isofer in #2176
- Add
sample_saturation_curve()Method to MMM by @isofer in #2195 - Add sample_adstock_curve() Method to MMM by @github-actions[bot] in #2198
- Implement MMM Summary functionality by @isofer in #2206
- Small fixes to multidimensional MMM by @ricardoV94 in #2234
- Remove Deprecated classes ContContract, ContNonContract by @naveen28204280 in #2231
- Support MLflow 2.18.0+ API updates by @tibisabau in #2237
- MMM FutureWarning by @juanitorduz in #2256
- Fix SpecialPrior serialization and deterministic model IDs by @PabloRoque in #2258
- Nullify Schema When
filter_dims(or Other Functions) Drop Dimensions by @isofer in #2262 - Pin some docs and tests dependencies because of lifetimes by @juanitorduz in #2269
- Interactive Plotly Plotting for MMM - phase 2 by @isofer in #2259
New Contributors
- @JoshTripleWhale made their first contribution in #2120
- @Eshaan-byte made their first contribution in #2130
- @AD1007 made their first contribution in #2170
- @isofer made their first contribution in #2176
- @naveen28204280 made their first contribution in #2231
- @tibisabau made their first contribution in #2237
Full Changelog: 0.17.1...0.18.0
0.17.1
What's Changed
Major Changes 🛠
- Refactor and enhance SensitivityAnalysis for MMM by @cetagostini in #1899
Deprecations 🚨
- Remove Prior classes and functions from pymc_marketing.prior module by @Copilot in #2060
New Features 🎉
- Add binomial adstock by @gdeleva in #2046
- Expose number of points in linspace for SaturationTransformation by @harshasiddartha in #2050
- Add covariate support to
ShiftedBetaGeoModelby @ColtAllen in #2080
Bugfixes 🐛
- fix: serialization for arbitrary HSGP instance to time_varying_intercept/media in MMM by @jamespooley in #2016
- Fix
ShiftedBetaGeoModelCohort Bug by @ColtAllen in #2115 - [DOCS] Improve MMM Case Study Notebook by @juanitorduz in #2116
Documentation 📖
- Different corrections in ES files by @cetagostini in #2035
- Add Causal Reasoning and Discovery example to gallery by @cetagostini in #2033
- Update documentation to include weekly Fourier transformation by @juanitorduz in #2045
- minor improvements funel nb by @juanitorduz in #2069
- Correct spelling of 'FiveTran' to 'Fivetran' by @cluhmann in #2084
- Clearer explanation of how lift tests are implemented behind the scenes in existing lift test notebook by @drbenvincent in #2061
- Update Docstrings for
ShiftedBetaGeoModelby @ColtAllen in #2091 - Introduction Version of Funnel Analysis Notebok by @juanitorduz in #2070
- add the non-centered laplace to the multi-dim notebook by @daniel-saunders-phil in #2100
- Preparing plots and notebook for old API deprecation by @cetagostini in #2055
Maintenance 🔧
- Enforce original scale variable before CPT calibration by @cetagostini in #2036
- use StrEnum over Enum by @williambdean in #2088
- Add special Laplace prior by @daniel-saunders-phil in #2093
- fix: store off Laplace Prior as Deterministic by @daniel-saunders-phil in #2096
- import bass function from module instead of submodule by @williambdean in #2097
- chore: update UML action by @williambdean in #2112
New Contributors
- @harshasiddartha made their first contribution in #2050
- @jamespooley made their first contribution in #2016
- @clsandoval made their first contribution in #2059
Full Changelog: 0.17.0...0.17.1
0.17.0
What's Changed
Major Changes 🛠
- Add CLV Cohort
ShiftedBetaGeoModelby @ColtAllen in #2005
New Features 🎉
- Add BuildModelFromDAG class for causal components by @cetagostini in #1950
- Introduce experimental TBFPC causal discovery algorithms by @cetagostini in #1947
- Add fivetran pandas accessor by @williambdean in #1924
- Add Special priors by @daniel-saunders-phil in #1939
- Add ModelSamplerEstimator for PyMC Marketing model benchmarking by @cetagostini in #1943
- Adds Optional
dimsarg for subsetting by dimensions when plotting a multidimensional model by @timbo112711 in #1955 - Add calibration support to YAML MMM builder by @cetagostini in #1979
- Add
expected_residual_lifetimepredictions toShiftedBetaGeoModelby @ColtAllen in #2010 - Add
expected_retention_elasticitytoShiftedBetaGeoModelby @ColtAllen in #2028 - Add GPU support in
BudgetOptimizerby @PabloRoque in #1937
Bugfixes 🐛
- BUG [Issue with fourier] by @cetagostini-wise in #1936
- Fix Mypy - HotFix by @juanitorduz in #1963
- Fix np.testing.assert_array_almost_equal argument names by @cetagostini in #1949
- Hotfix - Fix dimension assertion for adding multidimensional event effects to multidimensional MMM by @TeemuSailynoja in #1969
- Hotfix: use
target_columnincreate_fit_dataandbuild_from_idataby @PabloRoque in #1918 - HOT FIX: Update image for sBG Model in gallery by @juanitorduz in #2008
- Solving issue with wrapper detection in optimizer by @cetagostini in #2021
- Fixing fixed_beta bug adding new test for nested_logit by @NathanielF in #2015
Documentation 📖
- Notebook: How to model upper funnel with causal reasoning and PyMC by @cetagostini in #1971
- Notebook: Add multi-objective optimization notebook and update optimizer by @cetagostini in #1973
- correct typo in multidimensional nb by @daniel-saunders-phil in #1919
- Add approximate_fit method for variational inference by @cetagostini in #1923
- Add lognormalprior to the multidimensional notebook by @daniel-saunders-phil in #1961
- Adding calibration by potential based on CPT (Additional calibration style) by @cetagostini in #1959
- Setting infraestructure for Translations (ES site) by @OriolAbril in #1906
- Add MMM Quickstart Guide by @juanitorduz in #1972
- Update notebook risk allocation by @cetagostini in #1982
- Split notebooks test run mmm vs others by @juanitorduz in #1986
- Adding additional translations to the spanish site by @cetagostini in #1984
- Translate to spanish certain notebooks! by @cetagostini in #1995
- Notebook: PyMC-Marketing GAM capabilities by @cetagostini in #1985
- Translate guide folder to spanish by @cetagostini in #1997
- Adding spanish translations to API docs by @cetagostini in #1999
- Finishing all translations to API in Castellano by @cetagostini in #2000
- Notebooks translations to ES by @cetagostini in #2001
- Small error on render notebook tips/warnings/notes by @cetagostini in #2003
- MMM Class Claude Sonnet 4.5 Refactor by @juanitorduz in #1974
- Solving issue in #2006 doing the optimization more obvious not close to the limit. by @cetagostini in #2007
- Updated How We Compare Section by @lfiaschi in #2012
- Notebook: Causal discovery with PyMC-Marketing by @cetagostini in #1994
- Improve documentation links by @juanitorduz in #2025
Maintenance 🔧
- Adjusting calibration by costs to work with sample posterior predictive by @cetagostini in #1988
- Fix ModelBuilder docstring formatting by @williambdean in #1926
- Keep zeroes in add_noise_to_channel_allocation by @PabloRoque in #1916
- Update gamma_control prior dimensions in MMM model by @cetagostini in #1920
- Add model merging utilities and tests for multi-model optimization by @cetagostini in #1944
- Rename LogNormalPositiveParam to LogNormalPrior by @cetagostini in #1948
- Correcting optimizer docstring by @cetagostini in #1962
- Add MaskedPrior class for masked variable creation by @cetagostini in #1945
- Clarify mean_tightness_score docstring and formula by @cetagostini in #1980
- don't use paid defaults channel for dev env by @OriolAbril in #1987
- Translations in the API documents by @cetagostini in #1998
- Last translations by @cetagostini in #2002
- Translations for the new recent merge PRs by @cetagostini in #2020
- Translations by @cetagostini in #2029
- Bump version to 0.17.0 by @juanitorduz in #2030
- Update Spanish translations for CLV and MMM API docs by @cetagostini in #2031
Full Changelog: 0.16.0...0.17.0