Releases: pymc-labs/pymc-marketing
Releases · pymc-labs/pymc-marketing
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
0.16.0
What's Changed
Major Changes 🛠
- Handle release of pymc 5.25.0 by @daniel-saunders-phil in #1844
- Migrate to prior module from pymc-extras by @williambdean in #1767
New Features 🎉
- Sensitivity analysis and marginal effects by @drbenvincent in #1673
- Add
tablemethod to ModelBuilder to display rich table by @williambdean in #1786 - Allow for indexing of apply parameters by @williambdean in #1847
- index transformation variables in higher dimension cases by @williambdean in #1857
- allow for arbitrary additive effects in MVITS model by @williambdean in #1861
- Allow Lists and NumPy Arrays as Transformation Priors by @timbo112711 in #1879
- Support HSGP instance for time_varying_media in MMM by @cetagostini in #1881
- Support HSGP instance for time_varying_intercept in MMM by @cetagostini in #1894
- Add Fivetran data loaders by @cetagostini in #1887
- Add more Basis implementations for use with EventEffect by @TeemuSailynoja in #1911
Bugfixes 🐛
- hot fix (test match) by @juanitorduz in #1852
- Update and reduce size multi_mmm.nc by @juanitorduz in #1854
- Deprecate and disable budget optimization method & Updating notebook by @cetagostini in #1832
- Handle 0-dim channel_xr in create_zero_dataset by @cetagostini in #1890
- Fix grid shape logic in saturation_curves and add tests by @cetagostini in #1889
- Updating prior predictive notebook by @cetagostini in #1897
- Streamlit Dependency Fix by @timbo112711 in #1904
- Fix FourierEffect by @PabloRoque in #1909
Documentation 📖
- fix the link to Labs YouTube by @williambdean in #1822
- Fix notebooks titles MMM in gallery by @juanitorduz in #1843
- Remove reference to linear_saturation function by @williambdean in #1833
- Updating MMM Budget allocation examples, functionalities and dependencies by @cetagostini in #1849
- Add
rfm_train_test_splitexample to CLV Quickstart by @ColtAllen in #1855 - lift test requires 'date' in df_lift_test Data Frame with time_varying_media=True by @timbo112711 in #1818
- MMM: Fix Scaling Intercept by @juanitorduz in #1845
- Implement multidimensional scaling approach in regular MMM by @cetagostini in #1862
- Update MMM comparison table by @williambdean in #1878
- Get marginal_effects hdi estimates by @PabloRoque in #1885
- Correcting typo around yml files and csv files. by @cetagostini in #1888
- Improve saturation function docs by @daniel-saunders-phil in #1892
- Improvements on multidimensional notebook by @daniel-saunders-phil in #1876
- Clean badges by @juanitorduz in #1896
- Fourier transformation and HSGPs for streamlit app by @timbo112711 in #1898
- Add usage examples and documentation to MMM modules by @cetagostini in #1895
- Assign coords to multidimensional fit_data by @PabloRoque in #1902
Maintenance 🔧
- Add callback tracking to budget optimizer by @cetagostini in #1829
- Cosmetic changes to #1829 by @PabloRoque in #1830
- Add support for time-based budget distribution in optimizer by @cetagostini in #1841
- fix(clv): Improve validation for missing columns in CLVModel by @aaron1-z in #1851
- Adding arguments to model builder by @cetagostini in #1867
- Add causal graph support to MMM with DAG serialization by @cetagostini in #1882
- Refactor
ModelBuilderinto smaller classes by @ColtAllen in #1870 - Update requirements.txt [StreamlitApp] by @juanitorduz in #1900
- fix mypy overide by @juanitorduz in #1901
- Updates Streamlit App Requirements by @timbo112711 in #1903
- Multidimensional support in plot_sensitivity_analysis by @PabloRoque in #1886
- Minor convenience to override model_kwargs in build_mmm_from_yaml by @PabloRoque in #1907
- Normalize gaussian basis by @PabloRoque in #1912
New Contributors
- @daniel-saunders-phil made their first contribution in #1844
- @aaron1-z made their first contribution in #1851
Full Changelog: 0.15.1...0.16.0
0.15.1
What's Changed
New Features 🎉
- Handle static covariates in
ModifiedBetaGeoModelby @PabloRoque in #1815
Bugfixes 🐛
- Handle optimization for dimensions having channel with zero spend by @PabloRoque in #1762
Documentation 📖
- adding DCM to readme by @NathanielF in #1800
- stale docstring: "likelihood" is not a model variable by @timbo112711 in #1803
Maintenance 🔧
- Compute deterministics after sampling by @PabloRoque in #1802
New Contributors
- @timbo112711 made their first contribution in #1803
Full Changelog: 0.15.0...0.15.1
0.15.0
What's Changed
New Features 🎉
- Adding Multinomial and Nested Logit Models for Consumer Choice by @NathanielF in #1654
- URL pathlike for consistent
pymc_marketing.paths.data_dirAPI by @williambdean in #1797 - Implement
add_lift_test_measurementsfor multidimensional MMM by @TeemuSailynoja in #1738
Bugfixes 🐛
- Automatic casting based on model types for posterior predictive by @cetagostini in #1781
- Clip noisy channel predictors by @PabloRoque in #1790
Documentation 📖
- ruff format docstring code blocks by @williambdean in #1794
New Contributors
- @NathanielF made their first contribution in #1654
Full Changelog: 0.14.1...0.15.0
0.14.1
What's Changed
New Features 🎉
- Log off traceback in MLflow by @williambdean in #1736
- multidimensional MMM initialization validation by @IlanDanial in #1725
- More granular ModelBuilder errors upon load by @williambdean in #1765
Bugfixes 🐛
- Fix LinearTrend changepoints in
plot_curvemethod by @gdeleva in #1739 - Fix dim issue for default priors of linear trend and replace linear trend related doc pictures by @gdeleva in #1741
- LinearTrend deterministic error by @williambdean in #1748
- Bug: No need to check columns in Y for yml construction by @cetagostini in #1774
- Bug: Solving issue with hardcoded date by @cetagostini in #1780
- Bug: Sample posterior predictive raise error if dates overlap by @cetagostini in #1778
- Allow for tvp priors in multidimensional.MMM by @williambdean in #1785
Documentation 📖
- Enhances MMM Packages Comparison by @lfiaschi in #1722
- Fix time plots in CLV Quickstart by @ColtAllen in #1724
- Fix BudgetOptimizer docstrings by @TeemuSailynoja in #1705
- Updating example multidimensional to use original scale after posterior predictive by @cetagostini in #1782
- Standardize usage of
singular | pluralmodel variables by @PabloRoque in #1763
Maintenance 🔧
- upper bound pymc 5.23 by @juanitorduz in #1728
- update pytensor lower bound to 2.31.3 by @juanitorduz in #1737
New Contributors
- @lfiaschi made their first contribution in #1722
- @IlanDanial made their first contribution in #1725
Full Changelog: 0.14.0...0.14.1
0.14.0
What's Changed
Deprecations 🚨
- Deprecate CLV methods,
clv_summary,methodparameter,to_jsonandfrom_jsonmethods by @ErikRingen in #1637
New Features 🎉
- Add Bass Diffusion Model by @williambdean in #1328
- Support for string in
plot_curveand add to docs by @williambdean in #1650 - Expose n_samples, hdi_probs, and random_seed in
plot_curveby @williambdean in #1697 - Add LinearRegression wrapper by @williambdean in #1713
Bugfixes 🐛
- support for additional dimension in LinearTrend by @williambdean in #1688
- Fix Bass model derivative by @williambdean in #1702
Documentation 📖
- Change spacing batched_convolution documentation by @williambdean in #1645
- Add utils to docs by @williambdean in #1651
- Fix Bass model example plot by @williambdean in #1666
- Create wrapper to make budget optimizer compatible with multidimensional class by @cetagostini in #1652
- Change documentation of multi-dimensional by @gdeleva in #1679
- Set html title explicitly by @OriolAbril in #1686
- Build multidimensional MMM from yaml configuration by @cetagostini in #1669
- Accelerate documentation build by @OriolAbril in #1695
- Use HDI instead of CI in MMM plotting suite by @TeemuSailynoja in #1689
- Consolidate name to PyMC-Marketing by @williambdean in #1699
- Rename all occurences of pymc-labs.io to pymc-labs.com by @twiecki in #1708
Maintenance 🔧
- Change the event function to class by @williambdean in #1675
- Issue #1696: addresses a bug in plotting the intercept by @esmailansari in #1698
New Contributors
- @ErikRingen made their first contribution in #1637
- @gdeleva made their first contribution in #1679
- @TeemuSailynoja made their first contribution in #1689
- @twiecki made their first contribution in #1708
- @esmailansari made their first contribution in #1698
Full Changelog: 0.13.1...0.14.0
0.13.1
0.13.0
What's Changed
New Features 🎉
- Add Example Gallery by @juanitorduz in #1611
- Fourier and LinearTrend additive effects by @williambdean in #1580
- Add version to posterior and prior groups by @williambdean in #1591
API
Bugfixes 🐛
- Fix LinearTrend out of sample by @williambdean in #1585
- BUG: FourierEffect with multidimensional case by @williambdean in #1594
Documentation 📖
- Fix minor scaling inconsistency in hdi50 prior plot by @PabloRoque in #1579
- Allow original scales in saturation_curves_scatter by @PabloRoque in #1581
- MMM Multidimensional example linear trend by @juanitorduz in #1589
- minor improvements by @juanitorduz in #1590
- rerun mmm tvp base nb by @juanitorduz in #1595
- Add to MLflow error docs by @williambdean in #1616
- format code blocks by @williambdean in #1621
- Update "how do we compare" by @juanitorduz in #1632
Maintenance 🔧
- Cast periods value to int by @williambdean in #1597
- restrict the osqp version by @williambdean in #1614
- Permit
BudgetOptimizer.allocate_budget()to takex0as an argument by @cluhmann in #1565 - Replace
batched_convolutionby PyTensor native implementation by @ricardoV94 in #1583 - Log
pm.sampleexception to MLflow by @williambdean in #1612
New Contributors
Full Changelog: 0.12.1...0.13.0
0.12.1
What's Changed
New Features 🎉
- Add
sample_priorto sample from arbitrary VariableFactory by @williambdean in #1536 - 1553 add transform parameter for HSGP link function by @williambdean in #1555
- Add
demeaned_basisflag for HSGP classes by @williambdean in #1560 - Specify target scaling dimensions by @williambdean in #1562
- Allow for media scaling settings by @williambdean in #1573
Bugfixes 🐛
- 1570 target scaled and variable need to be broadcasted with non global scaling by @williambdean in #1571
Documentation 📖
- MMM Multi-Dimensional Example by @juanitorduz in #1521
Maintenance 🔧
- Correcting small errors in multidimensional mmm by @cetagostini in #1551
- remove abstract requirement of data_setter by @williambdean in #1463
Full Changelog: 0.12.0...0.12.1
0.12.0
What's Changed
Major Changes 🛠
- excluded _prior suffix from CLV models by @arthurmello in #1498
Deprecations 🚨
- Rename CLV
fit_methodandt_unobservedparameters tomethodandt_start_evalby @ColtAllen in #1537
New Features 🎉
- [MMM] Model events as gaussian bumps by @juanitorduz in #1465
- Out-of-Box MultiDimensional MMM by @cetagostini in #1036
- Add basis bumps effect to MMM model by @wd60622 in #1475
- Allow
plot_expected_purchases_pccinBetaGeoModelandModifiedBetaGeoModelby @PabloRoque in #1470 - Allow static covariates in BGNBDModel by @PabloRoque in #1390
- Support MediaTransformation and MediaConfigList deserialization by @wd60622 in #1504
- Check for wrong media dims by @wd60622 in #1505
Bugfixes 🐛
- load bug with y name different than
output_varby @wd60622 in #1468 - Fix ModifiedBetaGeoNBDRV sim_data by @PabloRoque in #1472
- Change Basis sample_curve defaults by @wd60622 in #1500
- Check for incompatible dims in MediaTranform by @wd60622 in #1502
- Allow for extra columns in df_events by @wd60622 in #1501
- Use MediaTransformation dims in save and load by @wd60622 in #1503
- Fix
_create_synth_datasetwhen MMM has no controls by @PabloRoque in #1513 - Use SoftPlusHSGP in multidimensional HSGP by @wd60622 in #1510
- Use SoftPlusHSGP directly in MMM class by @wd60622 in #1523
- Fix SoftPlusHSGP out of sample by @wd60622 in #1544
Documentation 📖
- Add thin wrapper around advi functionality by @PabloRoque in #1365
- Added missing paramater take_every in docs of create_log_callback by @nayan2167 in #1491
- Fixes documentation on mmm control variable scaling - Issue #1469 by @zach-brown-18 in #1499
- change parameter from samples to draws by @wd60622 in #1524
- Fix the TVP example by @wd60622 in #1533
Maintenance 🔧
- add preliz dependency by @wd60622 in #1507
- Merge value and grad in budget optimizer by @ricardoV94 in #1512
New Contributors
- @zach-brown-18 made their first contribution in #1499
- @github-actions made their first contribution in #1528
Full Changelog: 0.11.1...0.12.0