Skip to content

Latest commit

 

History

History
490 lines (383 loc) · 19.7 KB

File metadata and controls

490 lines (383 loc) · 19.7 KB

Changelog

  • Filter linear channels from Hill curves and refactor R-hat in visualizer.

1.6.1 - 2026-04-30

  • Update mmm-proto-schema dependency to >= 1.2.1.

1.6.0 - 2026-04-29

  • Add MeridianEDA for EDA visualizations and two-pager generation.
  • Add support for user-configured EDA Specs.
  • Fix MediaTransformer median calculation when tensor equality is disabled in TensorFlow.
  • Add EDA check for data-to-parameter ratio (DATA_ADEQUACY).
  • JAX support is now available.
  • Add JAX 64-bit precision opt-in configuration.
  • Ensure consistent float precision across tensors, NumPy arrays, and prior distributions.
  • Deprecate model.NotFittedModelError and migrate it to common/errors.py.
  • Deprecate importing model module from analyzer and review modules.

1.5.3 - 2026-03-04

  • Pin arviz dependency to < 0.20.0 to fix upstream InferenceData deprecation.
  • Dropped support for Python 3.10. The minimum required Python version is now 3.11.
  • Upgraded JAX dependencies to version 0.7.2.
  • Refactor model fit plot to include interactive tooltips and hover effects.
  • Fix a bug in tagging in mmm_ui_proto_generator.py.
  • Update MarketingData serialization to support float population values.
  • Add Model Health Summary Card.

1.5.2 - 2026-02-10

  • Move schema package as meridian.schema.
    • Introduce a temporary shim schema.py module for backwards compatibility. This shim will be removed in the next cut release.

1.5.1 - 2026-02-04

  • Fix serialization for binary and text files.

1.5.0 - 2026-01-27

  • Remove dependency on the unmaintained patsy library.
  • Add interactive zooming to prior-posterior distribution plots.
  • Fix plots exceeding the width of the HTML 2-pagers.
  • Raise exception when paid media channels have zero total spend.
  • Include ArviZ version in model serialization.
  • Add more non-negative checks for model input data.
  • Add EDA check for treatment/control geo and time collinearity.
  • Refactored model.Meridian with stateful ModelContext and stateless ModelEquations helper classes.
  • Refactored samplers classes for direct injection of ModelContext and ModelEquations classes.

1.4.0 - 2025-12-08

  • Introduce modules needed for Meridian Scenario Planner and add scenarioplanner extra.

1.3.2 - 2025-11-26

  • Fixed an out-of-bounds bug in EDA's VIF check.
  • Added cost per media unit checks to EDA.
  • Add support for holdout set in GoodnessOfFitCheck.
  • Add more helpful error message for AKS min/max knot selection
  • Add support for python 3.13 and tensorflow 2.20.

1.3.1 - 2025-11-12

  • Fix schema dependency issues.

1.3.0 - 2025-11-10

  • Add EDAEngine for exploratory data analysis.
  • Add model fitting guardrail using EDA to Meridian.
  • Introduce serde package: a serialization and deserialization library for Meridian model with a protocol buffer schema.
  • Add model quality checks in the analysis.review module.
  • Add currency support to optimization summary and visualizer.
  • Expose new hyperparameters in AKS public api.
  • Refactor the TensorFlow RNG handler to use stateless seed generation.
  • Add selected_geos arg to the optimizer.
  • Add selected_geos arg to get_aggregated_spend.
  • Fix bug in optimize() when using new_data with start_date and end_date matching the first and last dates in the new data.
  • Move use_kpi to Summarizer and Visualizer class initialization.
  • Make KPI analysis the default when revenue data is unavailable.

1.2.1 - 2025-09-22

  • Add use_kpi arg to output_model_results_summary.
  • Add lognormal_dist_from_mean_std and lognormal_dist_from_ci helper functions.
  • Add support for forecasted data in the optimization 2-pager visualizations.
  • Change AKS algorithm to use AIC instead of EBIC.
  • Fix dtype issue when scaling integer kpi/population.

1.2.0 - 2025-09-04

  • Fix channel data misalignment in Analyzer.hill_curves when input channels are not in alphabetical order.
  • Add negative_baseline_probability method to Analyzer class.
  • Add per-channel adstock decay function definition.
  • Methods in the analyzer module now return backend-agnostic tensors.
  • Validate distribution support ranges for custom priors.
  • Add IndependentMultivariateDistribution for per-channel distribution definition.
  • Add automatic knot selection (AKS) to modeling.
  • Fix numerical stability of Adstock computation around alpha = 1.
  • Add binomial decay option to Adstock.
  • Make trim_grids() a public method of OptimizationGrid and update it to remove rows of NaNs.
  • Add organic RF support for adstock decay in analyzer.
  • Add organic RF support for Hill curves in analyzer.
  • Set the random_seed in sample_prior() to match the seed parameter.
  • Add organic RF support for plot_hill_curves in visualizer.
  • Raise a ValueError if any media channel have all zeros or all NaN impressions.
  • Add validation for constant KPI with contribution prior types.

1.1.7 - 2025-07-16

  • Fix rhat_summary() to work with a vector sigma dim.

1.1.6 - 2025-07-14

  • Convert stateful seeds into stateless seeds in sample_posterior() to ensure the sampling is deterministic.

1.1.5 - 2025-07-10

  • Remove sigma_dims pseudo-dimension from inference data.
  • Sets builder-wide default column names in DataFrameInputDataBuilder.

1.1.4 - 2025-06-30

  • XrDatasetDataLoader to use new InputDataBuilder API under the hood. These changes are backwards compatible.
  • Fix mishandling of an empty controls column list in the data loader params.
  • Maintain user-given channel ordering in InputData's channels' coordinates.

1.1.3 - 2025-06-23

  • Add MLflow autologging support.
  • Fix bug where channels were being mapped to the wrong column name.
  • Add the ability to set max_frequency to optimal_freq() and update the new_data argument to take in rf_impressions rather than reach and frequency separately.
  • Add a helper method to create new data for optimizations with just spend or impressions and CPM. This includes geo allocation based on population.

1.1.2 - 2025-06-11

  • Add new InputDataBuilder APIs.
  • DataFrameDataLoader to use new DataFrameInputDataBuilder API under the hood. These changes are backwards compatible.
  • Keep rounded spend as int64 in optimizer.

1.1.1 - 2025-05-28

  • Rename the directory of unit testing datasets from sample to unit_testing_data and add a README.
  • Make controls data optional in the model.
  • Add a time variation error message for national models.

1.1.0 - 2025-05-20

  • Add media_prior_type, rf_prior_type, organic_media_prior_type, organic_rf_prior_type, non_media_prior_type parameters to ModelSpec.
  • Add 'contribution' prior type option.
  • Add a data simulation demo notebook and update/add simulated datasets.
  • Change VEGALITE_FACET_EXTRA_LARGE_WIDTH from 900 to 700.
  • Prevent negative media effect priors when using lognormal distribution upon model init.
  • Add an optional optimization_grid arg to the optimizer.
  • Fix incremental_outcome to accept unscaled non_media_treatments_baseline.
  • Add spend allocation per geo and time if per-channel spend is provided.
  • Validate no time variation for non-media treatments, organic media, and organic reach.
  • Add optimizer parameters start_date and end_date to replace selected_times.

1.0.9 - 2025-04-17

  • Add support for optimization with forecasted data.
  • Deprecate get_historical_spend for get_aggregated_spend with new_data support.
  • Raise an error when kpi_scaled is all zero and paid_media_prior_type is anything other than "coefficient".
  • Prevent negative media effect priors when using lognormal distribution.
  • Add support for weekly time granularity to the contribution area and bump charts.
  • Update channel contribution over time charts in Summarizer to toggle weekly vs quarterly granularity based on the selected time period length.
  • Adjust the optimization summary to display dates in the same format as "Marketing Mix Modeling Report".
  • Increase width of model fit and channel contribution over time charts in the Visualizer.

1.0.8 - 2025-04-08

  • Update contribution calculation methods in MediaSummary with aggregate_times parameter to support granular time.
  • Add a new_data argument to analyzer.optimal_freq().
  • Refactor args in create_optimization_grid to be consistent with optimize(...).
  • Fix response curves for KPI-based optimization.
  • Add plot_channel_contribution_area_chart method to MediaSummary in the visualizer.
  • Add plot_channel_contribution_bump_chart method to MediaSummary in the visualizer.
  • Add organic media support for adstock decay in analyzer.
  • Add channel contribution area chart and channel contribution bump chart to model results summary report in the summarizer.
  • Add an extra check for zeros or negative values in revenue_per_kpi.
  • Add per-channel constraints parameters to OptimizationGrid.optimize(...).
  • Add organic media support for hill curves in analyzer.
  • Add organic media support for plot_hill_curves in visualizer.

1.0.7 - 2025-03-19

  • Bump tensorflow to 2.18.
  • Bump tensorflow-probability to 0.25.
  • Bump numpy to 2.0.2.
  • Bump pandas to 2.2.2.
  • Bump scipy to 1.13.1.

1.0.6 - 2025-03-18

  • Fix issue #548: Make time coordinate regularity check less stringent.
  • Force DataTensors to have all tensors with dtype=tf.float32.
  • Refactor new data validation and data filling into the DataTensors class.
  • Fix bug in marginal ROI calculation in summary_metrics when new spend data is passed in.
  • Add by_reach param to incremental_outcome() to allow scaling reach or frequency.
  • Refactor marginal_roi() and the mROI calculation in summary_metrics to use the scaling factors in incremental_outcome(), removing duplicate code.
  • Allow new_data to have any number of time dimensions for roi(), marginal_roi(), cpik(), and summary_metrics(). This allows the use of forecasted data for analysis.
  • Add optimize() method to the OptimizationGrid dataclass.
  • Add a warning when the target constraint of flexible budget optimization is not met.

1.0.5 - 2025-03-06

  • Add technical support for python 3.10.
  • Align NaNs in spend_grid and incremental_outcome_grid in the optimizer.
  • Fix the stopping criteria of target total ROI in flexible budget optimization.
  • Separate creation of the grid data and the optimization.

1.0.4 - 2025-02-28

  • Fix validation on injected inference data when unique_sigma_for_each_geo is used in the model initialization.
  • Fix a divide-by-zero error in spend ratio calculation when historical spend is zero, preventing a ValueError in output_optimization_summary.
  • Add non_media_baseline_values argument to MediaSummary visualizations.
  • Refactor prior and posterior sampling logic into separate modules, simplifying model module.
  • Create a helper argument builder construct for API parameters that require an ordered list/array of values. See, e.g., InputData.get_paid_channels_argument_builder().

1.0.3 - 2025-02-07

  • Temporarily downgrade tensorflow version to 2.16 until the convergence issues on L4 and A100 GPU runtimes are resolved.

1.0.2 - 2025-02-06

  • Bump minimum tensorflow version to 2.18.
  • Add [and-cuda] optional dependencies to install tensorflow dependency with GPU support.
  • Add non_media_baseline_values argument to summary_metrics, baseline_summary_metrics and expected_vs_actual methods.
  • Update compute_incremental_outcome_aggregate docstring to match incremental_outcome.

1.0.1 - 2025-02-04

  • Bump minimum pandas version to 2.2.
  • Make compute_incremental_outcome_aggregate public.
  • Add new_data argument to Analyzer.summary_metrics method.
  • Add use_kpi argument to the optimize() method.

1.0.0 - 2025-01-24

  • Bump tensorflow version to 2.16 to support Python 3.12.

0.17.0 - 2025-01-23

  • Define constants for channel constraints in the optimizer.
  • Remove aggregate_times from roi, marginal_roi, and cpik methods in Analyzer and do not report these metrics in the summary_metrics method when aggregate_times=False as these metrics do not have a clear interpretation by time period.

0.16.0 - 2025-01-08

  • Organize tensor arguments of roi, mroi, and cpik methods of Analyzer into a DataTensors container.
  • Add warning message when user sets custom priors that will be ignored by the paid_media_prior_type argument.

0.15.0 - 2025-01-07

  • Convert InputData geo coordinates to strings upon initialization to avoid type mismatches with GeoInfo proto which expects strings.
  • Add get_historical_spend method to Analyzer class.
  • Split up roi_* and mroi_* parameters.

0.14.0 - 2024-12-17

  • Remove deprecated use_roi_prior attribute from ModelSpec.

0.13.0 - 2024-12-11

  • Add support for marginal ROI priors in Meridian.

0.12.0 - 2024-12-09

  • Rename incremental_impact to incremental_outcome.
  • Rename plot_incremental_impact_delta to plot_incremental_outcome_delta.

0.11.2 - 2024-11-27

  • Remove deprecated all_channel_names property from Meridian class.

0.11.1 - 2024-11-22

  • Remove unneeded argument include_non_paid_channels from expected_outcome().
  • Fix a bug in the custom RF prior validation.

0.11.0 - 2024-11-19

  • Consistent naming for "rhat" methods.

0.10.0 - 2024-11-18

  • Add support for organic media, organic reach and frequency, and non-media treatment variables.
  • Rename Analyzer.media_summary_metrics method to Analyzer.summary_metrics with include_non_paid_channels argument.

0.9.0 - 2024-11-15

  • Organize arguments of incremental_impact and expected_outcome methods into a DataTensors container.

0.8.0 - 2024-11-05

  • Expand media summary metrics to return ROI, mROI, and CPIK in all scenarios with the addition of the use_kpi argument.
  • Optimal frequency now calculates the frequency that maximizes the mean ROI in all cases such that it is consistent when used in the budget optimization that optimizes revenue.
  • Fix an error in the data loader that occurs when the geo column is an integer.
  • Add a _check_if_no_time_variation method to Meridian to raise an error if a variable has no time variation.
  • Make the performance breakdown section of the model summary report display both ROI and CPIK charts for all scenarios.
  • Set default ROI priors for non-revenue, no revenue-per-KPI models.
  • Do not specify significant digits in the y-axis labels in plot_spend_delta, trim insignificant trailing zeros in all charts.
  • Rename ControlsTransformer to CenteringAndScalingTransformer.

0.7.0 - 2024-09-20

  • Make get_r_hat public.
  • Add media_selected_times parameter to Analyzer.incremental_impact() method. This allows, among other things, to project impact for future media values.
  • For "All Channels" media summary metrics: effectiveness and mroi data variables are now masked out (math.nan).
  • Introduce a data.TimeCoordinates construct.
  • Pin numpy dependency to ">= 1.26, < 2".
  • InputData now has [media_]*time_coordinates properties.
  • InputData now explicitly checks that time coordinate values are evenly spaced.

0.6.0 - 2024-08-20

  • Add Analyzer.baseline_summary_metrics() method.
  • Fix a bug where custom priors were sometimes not able to be detected.
  • Fix a bug in the controls transformer with mean and stddev computations.

0.5.0 - 2024-08-15

  • Include pct_of_contribution and effectiveness data to OptimizationResults datasets.
  • Add Analyzer.get_aggregated_impressions() method.
  • Add spend_step_size to OptimizationResults.optimization_grid.
  • Add use_posterior argument to the budget optimizer.
  • Rename expected_impact to expected_outcome.

0.4.0 - 2024-07-19

  • Refactor BudgetOptimizer.optimize() API: it now returns an OptimizationResults dataclass.

0.3.0 - 2024-07-19

  • Rename tau_t to mu_t throughout.

0.2.0 - 2024-07-16

0.1.0 - 2022-01-01

  • Initial release