google-meridian 1.3.2__py3-none-any.whl → 1.4.0__py3-none-any.whl
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.
- {google_meridian-1.3.2.dist-info → google_meridian-1.4.0.dist-info}/METADATA +8 -4
- {google_meridian-1.3.2.dist-info → google_meridian-1.4.0.dist-info}/RECORD +49 -17
- {google_meridian-1.3.2.dist-info → google_meridian-1.4.0.dist-info}/top_level.txt +1 -0
- meridian/analysis/summarizer.py +7 -2
- meridian/analysis/test_utils.py +934 -485
- meridian/analysis/visualizer.py +10 -6
- meridian/constants.py +1 -0
- meridian/data/test_utils.py +82 -10
- meridian/model/__init__.py +2 -0
- meridian/model/context.py +925 -0
- meridian/model/eda/constants.py +1 -0
- meridian/model/equations.py +418 -0
- meridian/model/knots.py +58 -47
- meridian/model/model.py +93 -792
- meridian/version.py +1 -1
- scenarioplanner/__init__.py +42 -0
- scenarioplanner/converters/__init__.py +25 -0
- scenarioplanner/converters/dataframe/__init__.py +28 -0
- scenarioplanner/converters/dataframe/budget_opt_converters.py +383 -0
- scenarioplanner/converters/dataframe/common.py +71 -0
- scenarioplanner/converters/dataframe/constants.py +137 -0
- scenarioplanner/converters/dataframe/converter.py +42 -0
- scenarioplanner/converters/dataframe/dataframe_model_converter.py +70 -0
- scenarioplanner/converters/dataframe/marketing_analyses_converters.py +543 -0
- scenarioplanner/converters/dataframe/rf_opt_converters.py +314 -0
- scenarioplanner/converters/mmm.py +743 -0
- scenarioplanner/converters/mmm_converter.py +58 -0
- scenarioplanner/converters/sheets.py +156 -0
- scenarioplanner/converters/test_data.py +714 -0
- scenarioplanner/linkingapi/__init__.py +47 -0
- scenarioplanner/linkingapi/constants.py +27 -0
- scenarioplanner/linkingapi/url_generator.py +131 -0
- scenarioplanner/mmm_ui_proto_generator.py +354 -0
- schema/__init__.py +5 -2
- schema/mmm_proto_generator.py +71 -0
- schema/model_consumer.py +133 -0
- schema/processors/__init__.py +77 -0
- schema/processors/budget_optimization_processor.py +832 -0
- schema/processors/common.py +64 -0
- schema/processors/marketing_processor.py +1136 -0
- schema/processors/model_fit_processor.py +367 -0
- schema/processors/model_kernel_processor.py +117 -0
- schema/processors/model_processor.py +412 -0
- schema/processors/reach_frequency_optimization_processor.py +584 -0
- schema/test_data.py +380 -0
- schema/utils/__init__.py +1 -0
- schema/utils/date_range_bucketing.py +117 -0
- {google_meridian-1.3.2.dist-info → google_meridian-1.4.0.dist-info}/WHEEL +0 -0
- {google_meridian-1.3.2.dist-info → google_meridian-1.4.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: google-meridian
|
|
3
|
-
Version: 1.
|
|
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.
|
|
210
|
+
version = {1.4.0},
|
|
207
211
|
year = {2025},
|
|
208
212
|
}
|
|
209
213
|
```
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
google_meridian-1.
|
|
1
|
+
google_meridian-1.4.0.dist-info/licenses/LICENSE,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
2
2
|
meridian/__init__.py,sha256=0fOT5oNZF7-pbiWWGUefV-ysafttieG079m1ijMFQO8,861
|
|
3
|
-
meridian/constants.py,sha256=
|
|
4
|
-
meridian/version.py,sha256=
|
|
3
|
+
meridian/constants.py,sha256=JEVut9ZvnHVtdCSU7KGeR1TpR_vFXAOlE9d7leVXeHk,20348
|
|
4
|
+
meridian/version.py,sha256=5Udd9dsBQAuAbv6cGREFYqdM8M7pK4WJU3PPEHNUgqo,644
|
|
5
5
|
meridian/analysis/__init__.py,sha256=AM7xpqoeC-mmY4tPIyHisjQ2MICI7v3jSri--DhDqXA,874
|
|
6
6
|
meridian/analysis/analyzer.py,sha256=qGKYoEpWC6pDf2sDrwLhpa2putDnpUzbBpuNqL1lGi4,219910
|
|
7
7
|
meridian/analysis/optimizer.py,sha256=6OqJg8T09g4GqJc6_DnYDJsBAlY4ToUb3MRtS0EH4Nc,126316
|
|
8
|
-
meridian/analysis/summarizer.py,sha256
|
|
8
|
+
meridian/analysis/summarizer.py,sha256=-yemGGctDs23FnhaLWAwfsQw2DqoyB3eljqt0Q8DyEw,19263
|
|
9
9
|
meridian/analysis/summary_text.py,sha256=I_smDkZJYp2j77ea-9AIbgeraDa7-qUYyb-IthP2qO4,12438
|
|
10
|
-
meridian/analysis/test_utils.py,sha256=
|
|
11
|
-
meridian/analysis/visualizer.py,sha256=
|
|
10
|
+
meridian/analysis/test_utils.py,sha256=wSdFHzLbNLdv_InRreyKD_lC7Cvdv-upQOWf8dqCAPg,88045
|
|
11
|
+
meridian/analysis/visualizer.py,sha256=ljgN5ZCG_3aXq4Js0sE9sQd11TS1gi9KvPKMJ7_kW_A,94345
|
|
12
12
|
meridian/analysis/review/__init__.py,sha256=cF24EbhiVSs-tvtRf59uVin39tu6aCTTCaeEdv6ISZ8,804
|
|
13
13
|
meridian/analysis/review/checks.py,sha256=QEUVwC8L9Pif3y0B_OVAUpZeN6EnFGKH2oXA_dsdgbc,26893
|
|
14
14
|
meridian/analysis/review/configs.py,sha256=5JJ8v6n22GNBmE78xNX6jwdjkZz2qar4Q9YTcVqzcoI,3653
|
|
@@ -25,15 +25,17 @@ meridian/data/input_data.py,sha256=Qlxm4El6h1SRPsWDqZoKkOcMtrjiRWr3z8sU2mtghRA,4
|
|
|
25
25
|
meridian/data/input_data_builder.py,sha256=tbZjVXPDfmtndVyJA0fmzGzZwZb0RCEjXOTXb-ga8Nc,25648
|
|
26
26
|
meridian/data/load.py,sha256=ETX8Z62Gk6JcxFxvyB4XQhpNcRSqBRIO4_sTAN58mCY,40172
|
|
27
27
|
meridian/data/nd_array_input_data_builder.py,sha256=lfpmnENGuSGKyUd7bDGAwoLqHqteOKmHdKl0VI2wCQA,16341
|
|
28
|
-
meridian/data/test_utils.py,sha256=
|
|
28
|
+
meridian/data/test_utils.py,sha256=4BEHM0V78AkbrUIYWJLzalUgC-zkc0VeNiXrqzr2iXw,62435
|
|
29
29
|
meridian/data/time_coordinates.py,sha256=C5A5fscSLjPH6G9YT8OspgIlCrkMY7y8dMFEt3tNSnE,9874
|
|
30
30
|
meridian/mlflow/__init__.py,sha256=elwXUqPQYi7VF9PYjelU1tydfcUrmtuoq6eJCOnV9bk,693
|
|
31
31
|
meridian/mlflow/autolog.py,sha256=SZsrynLjozcyrAFCNWiqchSa2yOszVnwFBGz23BmWUU,6379
|
|
32
|
-
meridian/model/__init__.py,sha256=
|
|
32
|
+
meridian/model/__init__.py,sha256=NCmuqkzIsGTy0xKgr9XFmjq5JV1Uzalj7PlcvWL9Bvw,1085
|
|
33
33
|
meridian/model/adstock_hill.py,sha256=HoRKjyL03pCTBz6Utof9wEvlQCFM43BvrEW_oupj7NU,17688
|
|
34
|
-
meridian/model/
|
|
34
|
+
meridian/model/context.py,sha256=W_j3LnmpAx7Cs80MeqZGe8XKpoqwy6PfGIe8U7OUuTY,34622
|
|
35
|
+
meridian/model/equations.py,sha256=bQnFU5YdskwxBVJlLO4AX3zV8VXerb7lNhMedK0Cwcc,17174
|
|
36
|
+
meridian/model/knots.py,sha256=XTii81yrX1abu0llLvrJquRadEqFaUDIlYpvR5OBP1o,27661
|
|
35
37
|
meridian/model/media.py,sha256=skjy4Vd8LfDQWlqR_2lJ1qbG9UcS1dow5W45BAu4qk8,14599
|
|
36
|
-
meridian/model/model.py,sha256=
|
|
38
|
+
meridian/model/model.py,sha256=9-cHk9kno3G79t9z0rstcAk_QalKWr6QA75OtJqjpSY,41216
|
|
37
39
|
meridian/model/model_test_data.py,sha256=XGBz8RGdCsjAUOmgxX3CfWSj-_hdq2Lc8saFCqmImwM,23901
|
|
38
40
|
meridian/model/posterior_sampler.py,sha256=f3MayglIgBeBjWeXJU_RgT9cCugcjJ3aEjHqaWPsTbg,26806
|
|
39
41
|
meridian/model/prior_distribution.py,sha256=ZArW4uXIPPQL6hRWiGZUzcHktbkjE_vOklvlbp9LR64,57662
|
|
@@ -41,7 +43,7 @@ meridian/model/prior_sampler.py,sha256=iLvCefhA4WY0ENcnLK9471WUZPPyzQ1je58MRjxKv
|
|
|
41
43
|
meridian/model/spec.py,sha256=VlK6WJiPo2lzOF0O2judtJ6O3uEw7wYL5AT8bioq4gE,19188
|
|
42
44
|
meridian/model/transformers.py,sha256=HxlVJitxP-wu-NOHU0tArFUZ4NAO3c7adAYj4Zvqnvo,8363
|
|
43
45
|
meridian/model/eda/__init__.py,sha256=bMj9kd2LWU_LQZAjQv54FFggzdv4CKRYblvc-0cHXc4,768
|
|
44
|
-
meridian/model/eda/constants.py,sha256=
|
|
46
|
+
meridian/model/eda/constants.py,sha256=AMq2G-8y7OPLfMismDDIDKazyuG8Bd3W31NpwQ9oIXM,1047
|
|
45
47
|
meridian/model/eda/eda_engine.py,sha256=AxvKxdH8Q_TWlGZ58bWcfGMSgxkHZ2wrHloPuzS5C4Y,73324
|
|
46
48
|
meridian/model/eda/eda_outcome.py,sha256=cR9M49e6bDrBNxHOThW3aQlX5gZCOENC7GBljKQx7OY,6475
|
|
47
49
|
meridian/model/eda/eda_spec.py,sha256=diieYyZH0ee3ZLy0rGFMcWrrgiUrz2HctMwOrmtJR6w,2871
|
|
@@ -56,7 +58,36 @@ meridian/templates/style.css,sha256=O7YCKVqXgK4Ms3nnGmCVW4hILn4GCBRe4e15XJaP4ww,
|
|
|
56
58
|
meridian/templates/style.scss,sha256=he5jXpGatNfI6vtNbqdENapLiwIlXjqIBkKwxNVEvyw,5076
|
|
57
59
|
meridian/templates/summary.html.jinja,sha256=kR4nQc-oGBwXN6buKcf_wPaoWASomR4fT4gJ1iD9hYw,1775
|
|
58
60
|
meridian/templates/table.html.jinja,sha256=ibgnjdKCjS2qbq61lxqwtlb7JigDrc2m42RDdQvQnKQ,1176
|
|
59
|
-
|
|
61
|
+
scenarioplanner/__init__.py,sha256=n9eeQGQ0Et7YZ-UZbzBjN1AX5tcOiCHBQnU2qIj0FBk,1782
|
|
62
|
+
scenarioplanner/mmm_ui_proto_generator.py,sha256=4ajGl5bGJiPLid7obnoqP8PI38zJ3vaZo87xeHz7B0A,12657
|
|
63
|
+
scenarioplanner/converters/__init__.py,sha256=I3NNLxDcp137RmZsBp_A1jRrwpH9epzBdXzETgsnUrw,1046
|
|
64
|
+
scenarioplanner/converters/mmm.py,sha256=jEwLwaCzIK7XqpNsGFKeAOZ39wbK5AxQ-iI9SqDwenU,25079
|
|
65
|
+
scenarioplanner/converters/mmm_converter.py,sha256=3r2ARDnxEjd56raF6OkrpQhfvCGbSWcNSt19mH3Y7oc,1732
|
|
66
|
+
scenarioplanner/converters/sheets.py,sha256=KoJim_CKu9sEOwrVg4JlJupykbX3CwTNbblKUJwJxmo,4389
|
|
67
|
+
scenarioplanner/converters/test_data.py,sha256=FuNyXbsOkv10AVJ6fEfmoZ-MUQNhn7hdSKV1SjCSNA0,22607
|
|
68
|
+
scenarioplanner/converters/dataframe/__init__.py,sha256=nmcboP8Sgx9aFoG1sGmhJSh3QiuQjmfzoPNCebLbwQA,1313
|
|
69
|
+
scenarioplanner/converters/dataframe/budget_opt_converters.py,sha256=k0BK4aYQbdUTOh0sHZPP65wCR1vqXT4BosjjS5CP7pI,13183
|
|
70
|
+
scenarioplanner/converters/dataframe/common.py,sha256=UsN_HJY0HYdf5iXmzXVT-rm9Vqlk6t2u2Eb7VjQmF9M,2241
|
|
71
|
+
scenarioplanner/converters/dataframe/constants.py,sha256=6vOOJHntje9gdU7dUZUsEDo-ILXPitCOZqOVpEHH3K8,5509
|
|
72
|
+
scenarioplanner/converters/dataframe/converter.py,sha256=MY5Ihlvg5EUOxhf0zzsVubvATZc8I0ImJ6BP3gjW2Ic,1143
|
|
73
|
+
scenarioplanner/converters/dataframe/dataframe_model_converter.py,sha256=GZLEzKAOol93R_3YntDUCvMmB4ETutYIA6CwEbfk7fA,2472
|
|
74
|
+
scenarioplanner/converters/dataframe/marketing_analyses_converters.py,sha256=yoPvfEalBJUPhWaK7Gbo6OD3q8Z6SI_dUUsEDYFtVEQ,18307
|
|
75
|
+
scenarioplanner/converters/dataframe/rf_opt_converters.py,sha256=WFygfS4aezXRZFKCJajveWih9N1KWargjSDtMqS9vlo,10993
|
|
76
|
+
scenarioplanner/linkingapi/__init__.py,sha256=_GTAn4cJ-jpjEYoCozj240u8M3_ke-T0fAcCacMswVU,1540
|
|
77
|
+
scenarioplanner/linkingapi/constants.py,sha256=e6cNB8OFg74axIcx68r0YsS-alLTDC4pjIGv4CH1N0A,1038
|
|
78
|
+
scenarioplanner/linkingapi/url_generator.py,sha256=kSYHYl1iouLkijoOo1_yRmOldA5GySvg3_9qVd1sBSk,4515
|
|
79
|
+
schema/__init__.py,sha256=cw6HwitjOt8-uAaHHuymCozWSPL18HYlXOHnzjG9iLo,1224
|
|
80
|
+
schema/mmm_proto_generator.py,sha256=3GwsjDwGRmtgyskDXHlzaZ02TIqEtOvttE6Vurf_Fxo,2373
|
|
81
|
+
schema/model_consumer.py,sha256=jYcnnDlhycfBcLKmtjjDVURaZDZXc-TfdD8fMAIm9Kc,4444
|
|
82
|
+
schema/test_data.py,sha256=e1dNCGkbcKg4e0RfiFKxX6bYahhcB7rgB0vmzOYB470,11035
|
|
83
|
+
schema/processors/__init__.py,sha256=Xcw9kTTw5JFtegu3NgKo9CM5nup2PP8vgtIH031ITkI,3704
|
|
84
|
+
schema/processors/budget_optimization_processor.py,sha256=9dAir67Kg6rG3CqCfjWU7VU2HA0DLgjw6PfaPG1HCeg,30600
|
|
85
|
+
schema/processors/common.py,sha256=QpNxYThOvJOiMvt-ilKM5rAiJe7UQCaX6wD6K3e7tJk,1952
|
|
86
|
+
schema/processors/marketing_processor.py,sha256=5UvgTku8vfoePWXb2bRowc34SgqRZnQcxwfEehgVx_8,43332
|
|
87
|
+
schema/processors/model_fit_processor.py,sha256=GkTJWOw9mHoB5vH3ZDkI2K7_9c_-51Lpjwavrer_G08,12597
|
|
88
|
+
schema/processors/model_kernel_processor.py,sha256=gl7BsR7EYnJl88Yxg4qxJvVq1vmAKkjD8NezSbWYLEc,3686
|
|
89
|
+
schema/processors/model_processor.py,sha256=PH4MNFjnjJY4P1ncJbWvFiuItHB0Zp7J2UgwqnnI5h8,14199
|
|
90
|
+
schema/processors/reach_frequency_optimization_processor.py,sha256=uiftX23EXRtMJeZCPu98D8NFFrWT_cLz5eE3dqRLnuw,20551
|
|
60
91
|
schema/serde/__init__.py,sha256=xyydIcWB5IUpcn3wu1m9HL1fK4gMWURbwTyRsQtolF0,975
|
|
61
92
|
schema/serde/constants.py,sha256=aYtD_RuA0GCkpC4TIQq3VjMqEc837Wn-TlJNm-yn_4Y,1842
|
|
62
93
|
schema/serde/distribution.py,sha256=jy3h6JD1TSs4gwociMis814sz_Fm2kFQ2UbkgjYJW9k,19347
|
|
@@ -68,9 +99,10 @@ schema/serde/marketing_data.py,sha256=yb-fRTe84Sjg7-v3wsvYRRXvrxLSFWSenO0_ikMvUp
|
|
|
68
99
|
schema/serde/meridian_serde.py,sha256=ZG05JaBG4LW8mhl-Cunje9Q6xyR4tyNTtLYedzMBYjA,15985
|
|
69
100
|
schema/serde/serde.py,sha256=8vUqhJxvZgX9UY3rXTyWJznRgapwDzzaHXDHwV_kKTA,1612
|
|
70
101
|
schema/serde/test_data.py,sha256=7hfEWyvZ9WcAkVAOXt6elX8stJlsfhfd-ASlHo9SRb8,107342
|
|
71
|
-
schema/utils/__init__.py,sha256=
|
|
102
|
+
schema/utils/__init__.py,sha256=zrMCsxWQIWhsrdgcPSa6UxItIZPAPJK1bhnXhoK1keg,721
|
|
103
|
+
schema/utils/date_range_bucketing.py,sha256=14vcRGf3odWT9mBdCykRNmVCEiuUI_1SvVygNzvqBuM,3809
|
|
72
104
|
schema/utils/time_record.py,sha256=-KzHFjvSBUUXsfESPAfcJP_VFxaFLqj90Ac0kgKWfpI,4624
|
|
73
|
-
google_meridian-1.
|
|
74
|
-
google_meridian-1.
|
|
75
|
-
google_meridian-1.
|
|
76
|
-
google_meridian-1.
|
|
105
|
+
google_meridian-1.4.0.dist-info/METADATA,sha256=_PuASfumu3dyvOlvpXGu8MvVWlDpqyZ8ubaMtzLCcBU,9793
|
|
106
|
+
google_meridian-1.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
107
|
+
google_meridian-1.4.0.dist-info/top_level.txt,sha256=oAi0z-fUuo6p8SnJ0WrojGR2mKOWDz43yr6EjzaXqy8,32
|
|
108
|
+
google_meridian-1.4.0.dist-info/RECORD,,
|
meridian/analysis/summarizer.py
CHANGED
|
@@ -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
|
-
|
|
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()
|