google-meridian 1.3.2__tar.gz → 1.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. {google_meridian-1.3.2/google_meridian.egg-info → google_meridian-1.4.0}/PKG-INFO +8 -4
  2. {google_meridian-1.3.2 → google_meridian-1.4.0}/README.md +1 -1
  3. {google_meridian-1.3.2 → google_meridian-1.4.0/google_meridian.egg-info}/PKG-INFO +8 -4
  4. {google_meridian-1.3.2 → google_meridian-1.4.0}/google_meridian.egg-info/SOURCES.txt +32 -0
  5. {google_meridian-1.3.2 → google_meridian-1.4.0}/google_meridian.egg-info/requires.txt +7 -2
  6. {google_meridian-1.3.2 → google_meridian-1.4.0}/google_meridian.egg-info/top_level.txt +1 -0
  7. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/summarizer.py +7 -2
  8. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/test_utils.py +934 -485
  9. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/visualizer.py +10 -6
  10. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/constants.py +1 -0
  11. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/test_utils.py +82 -10
  12. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/__init__.py +2 -0
  13. google_meridian-1.4.0/meridian/model/context.py +925 -0
  14. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/eda/constants.py +1 -0
  15. google_meridian-1.4.0/meridian/model/equations.py +418 -0
  16. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/knots.py +58 -47
  17. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/model.py +93 -792
  18. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/version.py +1 -1
  19. {google_meridian-1.3.2 → google_meridian-1.4.0}/pyproject.toml +10 -3
  20. google_meridian-1.4.0/scenarioplanner/__init__.py +42 -0
  21. google_meridian-1.4.0/scenarioplanner/converters/__init__.py +25 -0
  22. google_meridian-1.4.0/scenarioplanner/converters/dataframe/__init__.py +28 -0
  23. google_meridian-1.4.0/scenarioplanner/converters/dataframe/budget_opt_converters.py +383 -0
  24. google_meridian-1.4.0/scenarioplanner/converters/dataframe/common.py +71 -0
  25. google_meridian-1.4.0/scenarioplanner/converters/dataframe/constants.py +137 -0
  26. google_meridian-1.4.0/scenarioplanner/converters/dataframe/converter.py +42 -0
  27. google_meridian-1.4.0/scenarioplanner/converters/dataframe/dataframe_model_converter.py +70 -0
  28. google_meridian-1.4.0/scenarioplanner/converters/dataframe/marketing_analyses_converters.py +543 -0
  29. google_meridian-1.4.0/scenarioplanner/converters/dataframe/rf_opt_converters.py +314 -0
  30. google_meridian-1.4.0/scenarioplanner/converters/mmm.py +743 -0
  31. google_meridian-1.4.0/scenarioplanner/converters/mmm_converter.py +58 -0
  32. google_meridian-1.4.0/scenarioplanner/converters/sheets.py +156 -0
  33. google_meridian-1.4.0/scenarioplanner/converters/test_data.py +714 -0
  34. google_meridian-1.4.0/scenarioplanner/linkingapi/__init__.py +47 -0
  35. google_meridian-1.4.0/scenarioplanner/linkingapi/constants.py +27 -0
  36. google_meridian-1.4.0/scenarioplanner/linkingapi/url_generator.py +131 -0
  37. google_meridian-1.4.0/scenarioplanner/mmm_ui_proto_generator.py +354 -0
  38. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/__init__.py +5 -2
  39. google_meridian-1.4.0/schema/mmm_proto_generator.py +71 -0
  40. google_meridian-1.4.0/schema/model_consumer.py +133 -0
  41. google_meridian-1.4.0/schema/processors/__init__.py +77 -0
  42. google_meridian-1.4.0/schema/processors/budget_optimization_processor.py +832 -0
  43. google_meridian-1.4.0/schema/processors/common.py +64 -0
  44. google_meridian-1.4.0/schema/processors/marketing_processor.py +1136 -0
  45. google_meridian-1.4.0/schema/processors/model_fit_processor.py +367 -0
  46. google_meridian-1.4.0/schema/processors/model_kernel_processor.py +117 -0
  47. google_meridian-1.4.0/schema/processors/model_processor.py +412 -0
  48. google_meridian-1.4.0/schema/processors/reach_frequency_optimization_processor.py +584 -0
  49. google_meridian-1.4.0/schema/test_data.py +380 -0
  50. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/utils/__init__.py +1 -0
  51. google_meridian-1.4.0/schema/utils/date_range_bucketing.py +117 -0
  52. {google_meridian-1.3.2 → google_meridian-1.4.0}/LICENSE +0 -0
  53. {google_meridian-1.3.2 → google_meridian-1.4.0}/MANIFEST.in +0 -0
  54. {google_meridian-1.3.2 → google_meridian-1.4.0}/google_meridian.egg-info/dependency_links.txt +0 -0
  55. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/__init__.py +0 -0
  56. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/__init__.py +0 -0
  57. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/analyzer.py +0 -0
  58. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/optimizer.py +0 -0
  59. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/review/__init__.py +0 -0
  60. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/review/checks.py +0 -0
  61. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/review/configs.py +0 -0
  62. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/review/constants.py +0 -0
  63. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/review/results.py +0 -0
  64. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/review/reviewer.py +0 -0
  65. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/analysis/summary_text.py +0 -0
  66. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/backend/__init__.py +0 -0
  67. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/backend/config.py +0 -0
  68. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/backend/test_utils.py +0 -0
  69. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/__init__.py +0 -0
  70. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/arg_builder.py +0 -0
  71. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/data_frame_input_data_builder.py +0 -0
  72. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/input_data.py +0 -0
  73. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/input_data_builder.py +0 -0
  74. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/load.py +0 -0
  75. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/nd_array_input_data_builder.py +0 -0
  76. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/data/time_coordinates.py +0 -0
  77. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/mlflow/__init__.py +0 -0
  78. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/mlflow/autolog.py +0 -0
  79. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/adstock_hill.py +0 -0
  80. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/eda/__init__.py +0 -0
  81. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/eda/eda_engine.py +0 -0
  82. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/eda/eda_outcome.py +0 -0
  83. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/eda/eda_spec.py +0 -0
  84. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/media.py +0 -0
  85. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/model_test_data.py +0 -0
  86. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/posterior_sampler.py +0 -0
  87. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/prior_distribution.py +0 -0
  88. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/prior_sampler.py +0 -0
  89. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/spec.py +0 -0
  90. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/model/transformers.py +0 -0
  91. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/card.html.jinja +0 -0
  92. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/chart.html.jinja +0 -0
  93. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/chips.html.jinja +0 -0
  94. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/formatter.py +0 -0
  95. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/formatter_test.py +0 -0
  96. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/insights.html.jinja +0 -0
  97. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/stats.html.jinja +0 -0
  98. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/style.scss +0 -0
  99. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/summary.html.jinja +0 -0
  100. {google_meridian-1.3.2 → google_meridian-1.4.0}/meridian/templates/table.html.jinja +0 -0
  101. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/__init__.py +0 -0
  102. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/constants.py +0 -0
  103. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/distribution.py +0 -0
  104. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/eda_spec.py +0 -0
  105. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/function_registry.py +0 -0
  106. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/hyperparameters.py +0 -0
  107. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/inference_data.py +0 -0
  108. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/marketing_data.py +0 -0
  109. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/meridian_serde.py +0 -0
  110. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/serde.py +0 -0
  111. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/serde/test_data.py +0 -0
  112. {google_meridian-1.3.2 → google_meridian-1.4.0}/schema/utils/time_record.py +0 -0
  113. {google_meridian-1.3.2 → google_meridian-1.4.0}/setup.cfg +0 -0
  114. {google_meridian-1.3.2 → google_meridian-1.4.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-meridian
3
- Version: 1.3.2
3
+ Version: 1.4.0
4
4
  Summary: Google's open source mixed marketing model library, helps you understand your return on investment and direct your ad spend with confidence.
5
5
  Author-email: The Meridian Authors <no-reply@google.com>
6
6
  Project-URL: homepage, https://github.com/google/meridian
@@ -22,7 +22,6 @@ Requires-Dist: joblib
22
22
  Requires-Dist: natsort<8,>=7.1.1
23
23
  Requires-Dist: numpy<3,>=2.0.2
24
24
  Requires-Dist: pandas<3,>=2.2.2
25
- Requires-Dist: patsy<1,>=0.5.3
26
25
  Requires-Dist: scipy<2,>=1.13.1
27
26
  Requires-Dist: statsmodels>=0.14.5
28
27
  Requires-Dist: tensorflow<2.21,>=2.18
@@ -46,8 +45,13 @@ Requires-Dist: jax==0.5.3; extra == "jax"
46
45
  Requires-Dist: jaxlib==0.5.3; extra == "jax"
47
46
  Requires-Dist: tensorflow-probability[substrates-jax]==0.25.0; extra == "jax"
48
47
  Provides-Extra: schema
49
- Requires-Dist: mmm-proto-schema; extra == "schema"
48
+ Requires-Dist: mmm-proto-schema>=1.1.0; extra == "schema"
50
49
  Requires-Dist: semver; extra == "schema"
50
+ Provides-Extra: scenarioplanner
51
+ Requires-Dist: google-api-python-client; extra == "scenarioplanner"
52
+ Requires-Dist: google-auth; extra == "scenarioplanner"
53
+ Requires-Dist: mmm-proto-schema>=1.1.0; extra == "scenarioplanner"
54
+ Requires-Dist: semver; extra == "scenarioplanner"
51
55
  Dynamic: license-file
52
56
 
53
57
  # About Meridian
@@ -203,7 +207,7 @@ To cite this repository:
203
207
  author = {Google Meridian Marketing Mix Modeling Team},
204
208
  title = {Meridian: Marketing Mix Modeling},
205
209
  url = {https://github.com/google/meridian},
206
- version = {1.3.2},
210
+ version = {1.4.0},
207
211
  year = {2025},
208
212
  }
209
213
  ```
@@ -151,7 +151,7 @@ To cite this repository:
151
151
  author = {Google Meridian Marketing Mix Modeling Team},
152
152
  title = {Meridian: Marketing Mix Modeling},
153
153
  url = {https://github.com/google/meridian},
154
- version = {1.3.2},
154
+ version = {1.4.0},
155
155
  year = {2025},
156
156
  }
157
157
  ```
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: google-meridian
3
- Version: 1.3.2
3
+ Version: 1.4.0
4
4
  Summary: Google's open source mixed marketing model library, helps you understand your return on investment and direct your ad spend with confidence.
5
5
  Author-email: The Meridian Authors <no-reply@google.com>
6
6
  Project-URL: homepage, https://github.com/google/meridian
@@ -22,7 +22,6 @@ Requires-Dist: joblib
22
22
  Requires-Dist: natsort<8,>=7.1.1
23
23
  Requires-Dist: numpy<3,>=2.0.2
24
24
  Requires-Dist: pandas<3,>=2.2.2
25
- Requires-Dist: patsy<1,>=0.5.3
26
25
  Requires-Dist: scipy<2,>=1.13.1
27
26
  Requires-Dist: statsmodels>=0.14.5
28
27
  Requires-Dist: tensorflow<2.21,>=2.18
@@ -46,8 +45,13 @@ Requires-Dist: jax==0.5.3; extra == "jax"
46
45
  Requires-Dist: jaxlib==0.5.3; extra == "jax"
47
46
  Requires-Dist: tensorflow-probability[substrates-jax]==0.25.0; extra == "jax"
48
47
  Provides-Extra: schema
49
- Requires-Dist: mmm-proto-schema; extra == "schema"
48
+ Requires-Dist: mmm-proto-schema>=1.1.0; extra == "schema"
50
49
  Requires-Dist: semver; extra == "schema"
50
+ Provides-Extra: scenarioplanner
51
+ Requires-Dist: google-api-python-client; extra == "scenarioplanner"
52
+ Requires-Dist: google-auth; extra == "scenarioplanner"
53
+ Requires-Dist: mmm-proto-schema>=1.1.0; extra == "scenarioplanner"
54
+ Requires-Dist: semver; extra == "scenarioplanner"
51
55
  Dynamic: license-file
52
56
 
53
57
  # About Meridian
@@ -203,7 +207,7 @@ To cite this repository:
203
207
  author = {Google Meridian Marketing Mix Modeling Team},
204
208
  title = {Meridian: Marketing Mix Modeling},
205
209
  url = {https://github.com/google/meridian},
206
- version = {1.3.2},
210
+ version = {1.4.0},
207
211
  year = {2025},
208
212
  }
209
213
  ```
@@ -40,6 +40,8 @@ meridian/mlflow/__init__.py
40
40
  meridian/mlflow/autolog.py
41
41
  meridian/model/__init__.py
42
42
  meridian/model/adstock_hill.py
43
+ meridian/model/context.py
44
+ meridian/model/equations.py
43
45
  meridian/model/knots.py
44
46
  meridian/model/media.py
45
47
  meridian/model/model.py
@@ -64,7 +66,36 @@ meridian/templates/stats.html.jinja
64
66
  meridian/templates/style.scss
65
67
  meridian/templates/summary.html.jinja
66
68
  meridian/templates/table.html.jinja
69
+ scenarioplanner/__init__.py
70
+ scenarioplanner/mmm_ui_proto_generator.py
71
+ scenarioplanner/converters/__init__.py
72
+ scenarioplanner/converters/mmm.py
73
+ scenarioplanner/converters/mmm_converter.py
74
+ scenarioplanner/converters/sheets.py
75
+ scenarioplanner/converters/test_data.py
76
+ scenarioplanner/converters/dataframe/__init__.py
77
+ scenarioplanner/converters/dataframe/budget_opt_converters.py
78
+ scenarioplanner/converters/dataframe/common.py
79
+ scenarioplanner/converters/dataframe/constants.py
80
+ scenarioplanner/converters/dataframe/converter.py
81
+ scenarioplanner/converters/dataframe/dataframe_model_converter.py
82
+ scenarioplanner/converters/dataframe/marketing_analyses_converters.py
83
+ scenarioplanner/converters/dataframe/rf_opt_converters.py
84
+ scenarioplanner/linkingapi/__init__.py
85
+ scenarioplanner/linkingapi/constants.py
86
+ scenarioplanner/linkingapi/url_generator.py
67
87
  schema/__init__.py
88
+ schema/mmm_proto_generator.py
89
+ schema/model_consumer.py
90
+ schema/test_data.py
91
+ schema/processors/__init__.py
92
+ schema/processors/budget_optimization_processor.py
93
+ schema/processors/common.py
94
+ schema/processors/marketing_processor.py
95
+ schema/processors/model_fit_processor.py
96
+ schema/processors/model_kernel_processor.py
97
+ schema/processors/model_processor.py
98
+ schema/processors/reach_frequency_optimization_processor.py
68
99
  schema/serde/__init__.py
69
100
  schema/serde/constants.py
70
101
  schema/serde/distribution.py
@@ -77,4 +108,5 @@ schema/serde/meridian_serde.py
77
108
  schema/serde/serde.py
78
109
  schema/serde/test_data.py
79
110
  schema/utils/__init__.py
111
+ schema/utils/date_range_bucketing.py
80
112
  schema/utils/time_record.py
@@ -5,7 +5,6 @@ joblib
5
5
  natsort<8,>=7.1.1
6
6
  numpy<3,>=2.0.2
7
7
  pandas<3,>=2.2.2
8
- patsy<1,>=0.5.3
9
8
  scipy<2,>=1.13.1
10
9
  statsmodels>=0.14.5
11
10
  tensorflow<2.21,>=2.18
@@ -34,6 +33,12 @@ tensorflow-probability[substrates-jax]==0.25.0
34
33
  [mlflow]
35
34
  mlflow
36
35
 
36
+ [scenarioplanner]
37
+ google-api-python-client
38
+ google-auth
39
+ mmm-proto-schema>=1.1.0
40
+ semver
41
+
37
42
  [schema]
38
- mmm-proto-schema
43
+ mmm-proto-schema>=1.1.0
39
44
  semver
@@ -1,2 +1,3 @@
1
1
  meridian
2
+ scenarioplanner
2
3
  schema
@@ -318,7 +318,7 @@ class Summarizer:
318
318
  chart_json=media_summary.plot_contribution_waterfall_chart().to_json(),
319
319
  )
320
320
  lead_channels = self._get_sorted_posterior_mean_metrics_df(
321
- media_summary, [c.INCREMENTAL_OUTCOME]
321
+ media_summary, [c.INCREMENTAL_OUTCOME], include_non_paid_channels=True
322
322
  )[c.CHANNEL][:2]
323
323
  formatted_channels = [channel.title() for channel in lead_channels]
324
324
 
@@ -358,9 +358,14 @@ class Summarizer:
358
358
  media_summary: visualizer.MediaSummary,
359
359
  metrics: Sequence[str],
360
360
  ascending: bool = False,
361
+ include_non_paid_channels: bool = False,
361
362
  ) -> pd.DataFrame:
363
+ if include_non_paid_channels:
364
+ summary_metrics = media_summary.get_all_summary_metrics()
365
+ else:
366
+ summary_metrics = media_summary.get_paid_summary_metrics()
362
367
  return (
363
- media_summary.get_paid_summary_metrics()[metrics]
368
+ summary_metrics[metrics]
364
369
  .sel(distribution=c.POSTERIOR, metric=c.MEAN)
365
370
  .drop_sel(channel=c.ALL_CHANNELS)
366
371
  .to_dataframe()