- Filter linear channels from Hill curves and refactor R-hat in visualizer.
1.6.1 - 2026-04-30
- Update
mmm-proto-schemadependency 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
MediaTransformermedian 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
modelmodule fromanalyzerandreviewmodules.
1.5.3 - 2026-03-04
- Pin
arvizdependency to< 0.20.0to fix upstreamInferenceDatadeprecation. - 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
schemapackage asmeridian.schema.- Introduce a temporary shim
schema.pymodule for backwards compatibility. This shim will be removed in the next cut release.
- Introduce a temporary shim
1.5.1 - 2026-02-04
- Fix serialization for binary and text files.
1.5.0 - 2026-01-27
- Remove dependency on the unmaintained
patsylibrary. - 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.Meridianwith statefulModelContextand statelessModelEquationshelper classes. - Refactored samplers classes for direct injection of
ModelContextandModelEquationsclasses.
1.4.0 - 2025-12-08
- Introduce modules needed for Meridian Scenario Planner and add
scenarioplannerextra.
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
schemadependency issues.
1.3.0 - 2025-11-10
- Add
EDAEnginefor 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.reviewmodule. - 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_geosarg to the optimizer. - Add
selected_geosarg toget_aggregated_spend. - Fix bug in
optimize()when usingnew_datawithstart_dateandend_datematching the first and last dates in the new data. - Move
use_kpitoSummarizerandVisualizerclass initialization. - Make KPI analysis the default when revenue data is unavailable.
1.2.1 - 2025-09-22
- Add
use_kpiarg tooutput_model_results_summary. - Add
lognormal_dist_from_mean_stdandlognormal_dist_from_cihelper 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_curveswhen input channels are not in alphabetical order. - Add
negative_baseline_probabilitymethod toAnalyzerclass. - Add per-channel adstock decay function definition.
- Methods in the
analyzermodule now return backend-agnostic tensors. - Validate distribution support ranges for custom priors.
- Add
IndependentMultivariateDistributionfor per-channel distribution definition. - Add automatic knot selection (AKS) to modeling.
- Fix numerical stability of Adstock computation around
alpha = 1. - Add
binomialdecay option to Adstock. - Make
trim_grids()a public method ofOptimizationGridand 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_seedinsample_prior()to match the seed parameter. - Add organic RF support for
plot_hill_curvesin visualizer. - Raise a
ValueErrorif any media channel have all zeros or allNaNimpressions. - 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_dimspseudo-dimension from inference data. - Sets builder-wide default column names in
DataFrameInputDataBuilder.
1.1.4 - 2025-06-30
XrDatasetDataLoaderto use newInputDataBuilderAPI under the hood. These changes are backwards compatible.- Fix mishandling of an empty
controlscolumn 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_frequencytooptimal_freq()and update thenew_dataargument to take inrf_impressionsrather thanreachandfrequencyseparately. - 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
InputDataBuilderAPIs. DataFrameDataLoaderto use newDataFrameInputDataBuilderAPI 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
sampletounit_testing_dataand add a README. - Make
controlsdata 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_typeparameters toModelSpec. - Add
'contribution'prior type option. - Add a data simulation demo notebook and update/add simulated datasets.
- Change
VEGALITE_FACET_EXTRA_LARGE_WIDTHfrom 900 to 700. - Prevent negative media effect priors when using lognormal distribution upon model init.
- Add an optional
optimization_gridarg to the optimizer. - Fix
incremental_outcometo accept unscalednon_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_dateandend_dateto replaceselected_times.
1.0.9 - 2025-04-17
- Add support for optimization with forecasted data.
- Deprecate
get_historical_spendforget_aggregated_spendwithnew_datasupport. - Raise an error when
kpi_scaledis all zero andpaid_media_prior_typeis 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
MediaSummarywithaggregate_timesparameter to support granular time. - Add a
new_dataargument toanalyzer.optimal_freq(). - Refactor args in
create_optimization_gridto be consistent withoptimize(...). - Fix response curves for KPI-based optimization.
- Add
plot_channel_contribution_area_chartmethod toMediaSummaryin the visualizer. - Add
plot_channel_contribution_bump_chartmethod toMediaSummaryin 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_curvesin 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
DataTensorsto have all tensors withdtype=tf.float32. - Refactor new data validation and data filling into the
DataTensorsclass. - Fix bug in marginal ROI calculation in
summary_metricswhen new spend data is passed in. - Add
by_reachparam toincremental_outcome()to allow scalingreachorfrequency. - Refactor
marginal_roi()and the mROI calculation insummary_metricsto use the scaling factors inincremental_outcome(), removing duplicate code. - Allow
new_datato have any number of time dimensions forroi(),marginal_roi(),cpik(), andsummary_metrics(). This allows the use of forecasted data for analysis. - Add
optimize()method to theOptimizationGriddataclass. - 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
NaNsinspend_gridandincremental_outcome_gridin 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_geois used in the model initialization. - Fix a divide-by-zero error in spend ratio calculation when historical spend is
zero, preventing a
ValueErrorinoutput_optimization_summary. - Add
non_media_baseline_valuesargument toMediaSummaryvisualizations. - Refactor prior and posterior sampling logic into separate modules, simplifying
modelmodule. - 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
tensorflowversion to 2.16 until the convergence issues on L4 and A100 GPU runtimes are resolved.
1.0.2 - 2025-02-06
- Bump minimum
tensorflowversion to 2.18. - Add
[and-cuda]optional dependencies to installtensorflowdependency with GPU support. - Add
non_media_baseline_valuesargument tosummary_metrics,baseline_summary_metricsandexpected_vs_actualmethods. - Update
compute_incremental_outcome_aggregatedocstring to matchincremental_outcome.
1.0.1 - 2025-02-04
- Bump minimum
pandasversion to 2.2. - Make
compute_incremental_outcome_aggregatepublic. - Add
new_dataargument toAnalyzer.summary_metricsmethod. - Add
use_kpiargument to theoptimize()method.
1.0.0 - 2025-01-24
- Bump
tensorflowversion to 2.16 to support Python 3.12.
0.17.0 - 2025-01-23
- Define constants for channel constraints in the optimizer.
- Remove
aggregate_timesfromroi,marginal_roi, andcpikmethods inAnalyzerand do not report these metrics in thesummary_metricsmethod whenaggregate_times=Falseas these metrics do not have a clear interpretation by time period.
0.16.0 - 2025-01-08
- Organize tensor arguments of
roi,mroi, andcpikmethods of Analyzer into aDataTensorscontainer. - Add warning message when user sets custom priors that will be ignored by the
paid_media_prior_typeargument.
0.15.0 - 2025-01-07
- Convert
InputDatageo coordinates to strings upon initialization to avoid type mismatches withGeoInfoproto which expects strings. - Add
get_historical_spendmethod toAnalyzerclass. - Split up
roi_*andmroi_*parameters.
0.14.0 - 2024-12-17
- Remove deprecated
use_roi_priorattribute fromModelSpec.
0.13.0 - 2024-12-11
- Add support for marginal ROI priors in Meridian.
0.12.0 - 2024-12-09
- Rename
incremental_impacttoincremental_outcome. - Rename
plot_incremental_impact_deltatoplot_incremental_outcome_delta.
0.11.2 - 2024-11-27
- Remove deprecated
all_channel_namesproperty fromMeridianclass.
0.11.1 - 2024-11-22
- Remove unneeded argument
include_non_paid_channelsfromexpected_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_metricsmethod toAnalyzer.summary_metricswithinclude_non_paid_channelsargument.
0.9.0 - 2024-11-15
- Organize arguments of
incremental_impactandexpected_outcomemethods into aDataTensorscontainer.
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_kpiargument. - 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_variationmethod 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
ControlsTransformertoCenteringAndScalingTransformer.
0.7.0 - 2024-09-20
- Make
get_r_hatpublic. - Add
media_selected_timesparameter toAnalyzer.incremental_impact()method. This allows, among other things, to project impact for future media values. - For
"All Channels"media summary metrics:effectivenessandmroidata variables are now masked out (math.nan). - Introduce a
data.TimeCoordinatesconstruct. - Pin numpy dependency to ">= 1.26, < 2".
InputDatanow has[media_]*time_coordinatesproperties.InputDatanow 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_contributionandeffectivenessdata toOptimizationResultsdatasets. - Add
Analyzer.get_aggregated_impressions()method. - Add
spend_step_sizetoOptimizationResults.optimization_grid. - Add
use_posteriorargument to the budget optimizer. - Rename
expected_impacttoexpected_outcome.
0.4.0 - 2024-07-19
- Refactor
BudgetOptimizer.optimize()API: it now returns anOptimizationResultsdataclass.
0.3.0 - 2024-07-19
- Rename
tau_ttomu_tthroughout.
0.2.0 - 2024-07-16
- Initial release