Releases: pymc-labs/pymc-marketing
Releases · pymc-labs/pymc-marketing
0.11.0
What's Changed
Major Changes 🛠
- Bump pymc dependency by @ricardoV94 in #1269
- Budget optimizer refactor by @ricardoV94 in #1357
New Features 🎉
- add
hdi_list
kwarg toplot_posterior_predictive
by @drbenvincent in #1096 - Allow Negative Values in Media Channels by @louismagowan in #1092
- Add
plot_expected_purchases_over_time
function by @ColtAllen in #1115 - Beta geo expected probability no purchase by @DylanZammit in #1094
- Harmonize prior and posterior predictive plots in MMM module by @juanitorduz in #1170
- Create load_from_idata method by @wd60622 in #1211
- Add CLV
plot_expected_purchases_ppc
by @ColtAllen in #1222 - Include tvp scaling in contribution grid by @wd60622 in #1253
- Make optimization based on the entire posterior and not on the marginal mean parameters. by @cetagostini in #1151
- HSGP as component by @wd60622 in #1246
- Add Gradient-Free Fit Method to CLV Models by @ColtAllen in #1266
- Add
graphviz
method toModelBuilder
class by @ColtAllen in #1284 - Improved Default Priors for
BetaGeoModel
by @ColtAllen in #1264 - Non-centered ZeroSumNormal Prior support by @wd60622 in #1290
- Allow non-Prior parameters in Prior and media transformations by @wd60622 in #1292
- Deserialize arbitrary objects by @wd60622 in #1296
- Modified Beta Geometric model by @PabloRoque in #1301
- Allow VariableFactory in FourierBase by @aseyboldt in #1304
- Add Censored wrapper for Prior class by @wd60622 in #1309
- Register new media transformations automatically by @wd60622 in #1320
- Add new
customer_choice
module by @drbenvincent in #803 - 1314 implement serialization for fourier classes by @wd60622 in #1315
- Deprecate to/from_json of Prior class in favor of to/from_dict by @wd60622 in #1338
- Add autologging for CLV models by @wd60622 in #1354
- Introduce BetaGeoNBD Random Variable by @PabloRoque in #1317
- MMM Evaluation, Diagnostics and MLFlow Registry by @louismagowan in #1368
- MLflow logging before slow function calls by @wd60622 in #1393
- Custom optimizer constraints by @cetagostini in #1358
- Creating Causal Identification module by @cetagostini in #1166
Bugfixes 🐛
- Fix LinearTrend rending issue by @takechanman1228 in #1173
- Fix bug in the "Causal Ladder" docs page by @drbenvincent in #1175
- Solving bug on optimization plot by @cetagostini in #1174
- patch values stacked plot by @juanitorduz in #1181
- [FIX] Wrong legend in the posterior predictive plot then we set gradient=True by @juanitorduz in #1212
- Fix budget allocation plot in case study by @juanitorduz in #1216
- Raise error when two dims are not compatible by @wd60622 in #1249
- 1271 predictions=true for sample posterior predictive throws error by @wd60622 in #1272
- Fix tanh component by @aseyboldt in #1303
- Enable transform
_sample_curve
to work withVariableFactory
by @lucianopaz in #1362 - keep date column in test_scale_lift_measurements by @malitsadok1 in #1316
- Moved pyprojroot from docs to dependencies by @nayan2167 in #1417
- Remove sample_posterior_predictive_patch by @wd60622 in #1414
Documentation 📖
- Expose Streamlit App in Documentation by @louismagowan in #1091
- Fix typos in MMM Example notebook by @wd60622 in #1146
- add mention of GPU in documentation by @wd60622 in #1152
- Update MMM docs to use graphviz method by @takechanman1228 in #1172
- MMM Case Study Fixes by @juanitorduz in #1169
- Run sBG with seed by @wd60622 in #1189
- Fix beta ref mmm by @juanitorduz in #1194
- Fix minor typos in mmm example notebook by @SangamSwadiK in #1215
- CLV Quickstart Revisions by @ColtAllen in #1243
- fix typo and change first lines mood by @wd60622 in #1254
- Link sBG Notebook in README and Index by @ColtAllen in #1265
- Update README.md (fix badges) by @juanitorduz in #1278
- [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in #1313
- customer choice: improve plots and harmonize colors by @juanitorduz in #1322
- Re-run TVP mmm notebook by @juanitorduz in #1324
- add customer choice to readme by @juanitorduz in #1326
- sort docs sections by @juanitorduz in #1327
- Generalize verbiage of installation instructions by @wd60622 in #1335
- Prior predictive guide by @juanitorduz in #1334
- hot fix: budget allowcation notebooks by @juanitorduz in #1389
- Breakout and Document MLflow functions by @wd60622 in #1396
- Relax the type that is needed for evaluation metric function by @wd60622 in #1413
- Add CLV Roadmap by @ColtAllen in #1364
- CLV Documentation Revisions by @ColtAllen in #1419
Maintenance 🔧
- Remove duplicate attrs/functions from MMM by @sreekailash in #1336
- Move
fit_result
tomodel_builder.py
and remove redundancies from CLV and MMM by @sreekailash in #1344 - Remove media transformation registration functions by @wd60622 in #1378
- Add
load_from_idata
method by @wd60622 in #1379 - Add tests by @juanitorduz in #1391
- Implement ModifiedBetaGeoNBD and ModifiedBetaGeoNBDRV by @PabloRoque in #1375
New Contributors
- @nhan295 made their first contribution in #1114
- @DylanZammit made their first contribution in #1094
- @dependabot made their first contribution in #1134
- @nataziel made their first contribution in #1285
- @aseyboldt made their first contribution in #1303
- @sreekailash made their first contribution in #1336
- @malitsadok1 made their first contribution in #1316
- @nayan2167 made their first contribution in #1412
Full Changelog: 0.10.0...0.11.0
0.10.0
What's Changed
New Features 🎉
- #1063 Pareto_nbd distribution enhancements by @Ishaanjolly in #1067
- #990 - Plot FourierBase along date rather than index by @Ishaanjolly in #1068
- Add CLV Cumulative Transaction Utlity by @ColtAllen in #1076
Bugfixes 🐛
michaelis_menten
transformation aspt.TensorVariable
by @PabloRoque in #1054
Documentation 📖
- comment save notebook in mmm example by @juanitorduz in #1053
- #1020 Correction of doctring for plot.py for
sample_kwargs
by @Ishaanjolly in #1060 - remove spend scaling step from budget optimizer by @juanitorduz in #1070
- added plotting options to plot_posterior_predictive by @jsnyde0 in #1072
- Docs update: make sure the right title shows up on Google by @ulfaslak in #1074
- small fixes mm roas notebook by @juanitorduz in #1083
- New notebook: causal inference with MMM's by @drbenvincent in #1032
- Polishing the new new causal ladder docs page by @drbenvincent in #1084
- Fix malformed equation in MMM docstring by @wd60622 in #1085
- MMM Case Study from PyData Global by @juanitorduz in #1044
Maintenance 🔧
- #1035 Distribution new customer enhancements by @Ishaanjolly in #1061
- Deprecate several
pymc_marketing.mmm.utils
functions by @PabloRoque in #1078 - Automatic labeling of untouched issues by @wd60622 in #1086
New Contributors
Full Changelog: 0.9.0...0.10.0
0.9.0
What's Changed
New Features 🎉
- Add user customization to
plot_curve
methods by @wd60622 in #1018 - Add
BetaGeoBetaBinomModel
by @ColtAllen in #1031 - MLFlow auto logging by @wd60622 #921
Documentation 📖
- Enhance MMM intro material by @juanitorduz in #1017
- Improve landing page by @juanitorduz in #1023
- simplify dag from mmm notebook by @juanitorduz in #1046
Maintenance 🔧
- lower bound xarray by @juanitorduz in #1025
- Mute
Sampling: []
stdout when callingget_channel_contributions_forward_pass_grid
by @PabloRoque in #1043
Full Changelog: 0.8.0...0.9.0
0.8.0
What's Changed
New Features 🎉
Prior
class to represent distributions by @wd60622 in #759- Pull out seasonality as
YearlyFourier
andMonthlyFourier
by @wd60622 in #802 - Separate Weibull adstock into CDF & PDF by @wd60622 in #810
- PoC: Use Pydantic as data validator by @juanitorduz in #809
- Create inverse_scaled_logistic_saturation and the corresponding class by @arthurmello in #827
- use labs theme as external by @OriolAbril in #830
- Skip coords with scalar value by @GiannisApost in #868
- Allow plot MMM components in the original scale by @juanitorduz in #870
- Add root saturation function (issue #702) by @iraur in #858
Bugfixes 🐛
- Save & load support for time varying parameters by @wd60622 in #815
json.loads
with python types bug by @wd60622 in #881- Save off media transformations by @wd60622 in #882
Documentation 📖
- add intercept and target variable to MMM component example by @wd60622 in #850
- Various MMM small documentation fixes by @juanitorduz in #854
- Update UML diagrams by @drbenvincent in #856
- Fix model_builder docstrings by @GiannisApost in #861
- add GH discussions link to README by @cluhmann in #866
- Fix Visual for hill_saturation function (Issue #851 ) by @PatrickRobotham in #857
- Inference changed to dataset by @Ishaanjolly in #873
- Fix default
ConvMode
in docstring by @ferrine in #864 - Update deployment docs by @wd60622 in #887
Maintenance 🔧
- Make PyMC 5.13.0 the minimum version by @wd60622 in #816
- Date Validation and MMM Model Hamonization (Pydantic) by @juanitorduz in #824
- Future-proof
prior_linearized
method call by @shuvayan in #806 - Specify 0.9.0 as deprecation version for recent MMM changes by @wd60622 in #849
- Fixing ruff commands in Makefile #825 by @MuradKhalil in #859
- Check for missing attrs after
sample_prior_predictive
andfit
by @wd60622 in #867
New Contributors
- @shuvayan made their first contribution in #806
- @arthurmello made their first contribution in #827
- @MuradKhalil made their first contribution in #859
- @GiannisApost made their first contribution in #861
- @PatrickRobotham made their first contribution in #857
- @Ishaanjolly made their first contribution in #873
- @iraur made their first contribution in #858
Full Changelog: 0.7.0...0.8.0
0.7.0
What's Changed
This release comes with great new features and improvements! Among many things, we have:
- Internal MMM refactor to make it customizable!
- We allow custom adstock and saturation functions.
- MMM time-varying media-baseline component available!
- Hierarchical distributions.
- Streamlit explainer app! See https://pymc-marketing-app.streamlit.app/
- CLV API standardization
- RFM segmentation
- Documentation improvements and new examples!
Major Changes 🛠
- Update
BetaGeoModel
API by @ColtAllen in #709 - User-defined media transformations and custom ordering by @cetagostini in #632
- CLV Plotting API by @ColtAllen in #728
GammaGammaModel
Docstrings and API Standardization by @ColtAllen in #758
New Features 🎉
- v0 Streamlit MMM Explainer App by @louismagowan in #614
- Add
BetaGeoBetaBinom
Distribution Block by @ColtAllen in #431 - RFM Segmentation by @ColtAllen in #680
- Media transformation sampling & plotting methods by @wd60622 in #734
- Hierarchical Model Configuration by @wd60622 in #743
- Allowing Hierarchical Non Centered Parametrization by @cetagostini in #747
- Creating Time Base component for Media Contribution by @cetagostini in #752
Bugfixes 🐛
- Fix related to column renaming after aggregating test frequency by @IvanUgrin in #698
model.fit
doesn't remove prior samples by @wd60622 in #741- Deepcopy of posterior to allow second
fit
call by @wd60622 in #790 - Add prior predictive example notebook by @juanitorduz in #787
Documentation 📖
- Correct BetaGeo docstring example by @wd60622 in #693
- Fix some ParetoNBDModel docstring typos by @Mews in #731
- Minor improvements [MMM] by @juanitorduz in #735
- MMM Component Notebook by @wd60622 in #748
- start addressing sphinx warnings and rendering issues by @OriolAbril in #750
- CLV Modeling Domains and Docstrings by @ColtAllen in #785
- Fix TVP Notebook by @juanitorduz in #793
- docs: Update model_builder.py to resolve warning in documentation build by @c0d33ngr in #797
- Time Varying Media Contribution Notebook by @cetagostini in #778
Maintenance 🔧
- pass kwargs to minimizer by @juanitorduz in #737
- improve tests mmm utils by @juanitorduz in #738
- fix np typing by @juanitorduz in #763
- remove noqa from plots by @juanitorduz in #761
- Run Ruff Notebooks by @juanitorduz in #773
- Run example notebooks CI by @juanitorduz in #791
New Contributors
- @louismagowan made their first contribution in #614
- @IvanUgrin made their first contribution in #698
- @Mews made their first contribution in #731
- @c0d33ngr made their first contribution in #797
Full Changelog: 0.6.0...0.7.0
0.6.0
What's Changed
New Features 🎉
- Time-varying intercept by @ulfaslak in #628
- New Pareto/NBD Example Notebook by @ColtAllen in #646
- MMM Example Notebook Improvements (waterfall & error plots) by @juanitorduz in #664
- Plot Waterfall Components Decomposition by @cetagostini-wise in #631
Bugfixes 🐛
- Pass conv mode to adstock functions by @juanitorduz in #665
- Fix compressed images in docs. by @juanitorduz in #667
- Fix
ylabel
BG/NBD Notebook by @juanitorduz in #654 - TV intercept notebook: fix title level by @juanitorduz in #663
- Add sample_kwargs BG/NBD Notebook by @juanitorduz in #676
Documentation 📖
- Update resources.md by @coreyabs-db in #652
- Improve tanh saturation parameter class documentation by @wd60622 in #657
- Add quickstart to readme by @juanitorduz in #653
- Add contributors to README by @juanitorduz in #659
- Update README.md by @nialloulton in #660
New Contributors
- @coreyabs-db made their first contribution in #652
Full Changelog: 0.5.0...0.6.0
0.5.0
What's Changed
New Features 🎉
- Add
rfm_train_test_split
Utility Function by @ColtAllen in #572
Bugfixes 🐛
- Fix
clv
plotting bugs and edits to Quickstart by @ColtAllen in #601
Documentation 📖
- Add lift tests check to comparison table by @juanitorduz in #611
- Add more content to the Gamma-Gamma Notebook by @juanitorduz in #573
- Add more content to the BG/NBD Notebook by @juanitorduz in #571
- Improve MMM Docs by @juanitorduz in #612
- MMM notebook small fixes by @juanitorduz in #626
Maintenance 🔧
- Drop Python 3.9 support by @juanitorduz in #615
- Add support for Python 3.12 by @juanitorduz in #618
0.4.2
What's Changed
Bugfixes 🐛
- Fix bug in predictive methods of ParetoNBD model with covariates by @ricardoV94 in #589
Full Changelog: 0.4.1...0.4.2
0.4.1
What's Changed
New Features 🎉
- Implement ParetoNBD with covariates by @ricardoV94 in #545
- Compute channel contributions from new spends by @wd60622 in #456
- Add Docker Image by @juanitorduz in #540
Bugfixes 🐛
- Fix repr error when CLVModel is not yet built by @ricardoV94 in #563
Documentation 📖
- Update resources page by @juanitorduz in #539
- Add to documentation feature comparison by @wd60622 in #550
- Make BetaGeoModel docstring example work by @wd60622 in #558
- Add nbqa-ruff for doc notebooks by @juanitorduz in #561
- Add other nuts samplers example notebook by @juanitorduz in #579
Maintenance 🔧
- Use union of default and user provided configs in ModelBuilder by @ricardoV94 in #565
- Remove
scale_preserving_logistic_saturation
function by @ulfaslak in #585
New Contributors
- @AlexAndorra made their first contribution in #556
Full Changelog: 0.4.0...0.4.1
0.4.0
What's Changed
New Features 🎉
- Handle new data correctly and extend the functionality of MMM posterior predictive methods by @wd60622 in #482
- Add baselined saturation by @ferrine in #498
- Add scale preserving saturation function by @ulfaslak in #503
- Add Weibull CDF and PDF Adstock Transformations by @abdalazizrashid in #499
Bugfixes 🐛
- Swap Before and After convolution modes by @abdalazizrashid in #501
- Support use of
ParetoNBDModel
incustomer_lifetime_value
by @ColtAllen in #512
Documentation 📖
New Contributors
Full Changelog: 0.3.3...0.4.0