diff --git a/causal-marketing-pymc/apps/labs_claims.yaml b/causal-marketing-pymc/apps/labs_claims.yaml index 4289e08..95bf41f 100644 --- a/causal-marketing-pymc/apps/labs_claims.yaml +++ b/causal-marketing-pymc/apps/labs_claims.yaml @@ -25,7 +25,7 @@ - id: colgate_method slides: ["Colgate: incremental or cannibalistic"] - text: "multivariate Bayesian interrupted time series" + text: "interrupted time series" source: labs.colgate_counterfactual_quote - id: colgate_recovery diff --git a/causal-marketing-pymc/apps/unified_slides.html b/causal-marketing-pymc/apps/unified_slides.html index 11037dd..4237e09 100644 --- a/causal-marketing-pymc/apps/unified_slides.html +++ b/causal-marketing-pymc/apps/unified_slides.html @@ -236,14 +236,15 @@
| Engagement | What it is | Typical client |
|---|---|---|
| Enablement & training | Workshops and upskilling on Bayesian methods and the tooling | Analytics teams standardizing on PyMC |
The estimator subtracts a reconstructed counterfactual from the treated metro's post-launch sales, and bias is its expected gap from the true lift:
-"What would this metro have sold anyway?" is an estimation target, not a rhetorical question.
Fit the weights on the pre-period only, constrained to the simplex:
-| Question | Answer | Tool that answered it |
|---|---|---|
| Is the effect real? | Yes, p = 0.033 | placebo-in-space permutation: rank 1 of 30 |
| How big? | €260k of incremental sales | synthetic-control gap, summed over 20 weeks |
| Give or take? | [€195k, €335k] at 90% | test inversion over the placebo cloud |
| Assumption | What it says | In the case | Status |
|---|---|---|---|
| Relevance | \(Z\) moves \(X\) | \(F = 156\), far above 10 | TESTABLE, passes |
| Exogeneity | \(Z \perp U\) | the lottery is a genuine random draw | BY DESIGN |
| Exclusion | \(Z \to Y\) only via \(X\) | a queue bump shows the user nothing | UNTESTABLE |
| Monotonicity | no defiers | a nudge never repels | UNTESTABLE, plausible |
One estimate gives not one answer but a map from any price to a verdict:
+| Price zone | Verdict | Why |
|---|---|---|
| below €12.7 | GO | even the most pessimistic supported effect pays |
| €12.7 to €20.4 | TEST | the data straddle the price: negotiate, or measure more |
| above €20.4 | NO-GO | no supported effect pays |
| Quantity | Value | Source |
|---|---|---|
| effect of one exposure | €16.5 | the division δ/π |
| 90% interval | [12.7, 20.4] | classical, and AR agrees |
| first-stage F | 156 | the lottery is strong |
| price | €10 | the platform's rate card |
| net per exposure | €6.5 | β − c, at the point estimate |
| Source | Facts pinned |
|---|---|
| ailab.criteo.com · criteo-uplift-prediction-dataset | criteo_rows |
| pymc-labs.com · 2022-11-11-HelloFresh | hf_panel_calibration |
| pymc-labs.com · 2023-06-20-juan-marketing-analytics | webinar_agenda |
| pymc-labs.com · bayes-is-slow-speeding-up-hellofreshs-bayesian-ab-tests-by-60x | hf_batch, hf_test_types, hf_thousands |
| pymc-labs.com · bayesian-media-mix-modeling-for-marketing-optimization | hf_priors_experiments |
| pymc-labs.com · causal-sales-analytics-are-my-sales-incremental-or-cannibalistic | colgate_ci, colgate_ci_level, colgate_truth, colgate_year, fail_range, fail_truth, market |
| pymc-labs.com · causal-sales-analytics-discrete-choice-modeling | colgate_counterfactual_quote |
| pymc-labs.com · causalpy-a-new-package-for-bayesian-causal-inference-for-quasi-experiments | causalpy_methods, causalpy_tv |
| pymc-labs.com · funnel-aware-mmm | cpl, cpl_window, gdpr_sentence, herp_attribution_quote, nurn_2026, trust_quote |
| pymc-labs.com · marketing-mix-modeling-a-complete-guide | bolt_pr |
| pymc-labs.com · mmm_roas_lift | lift_tests_n, roas_gap_words, roas_wrong_ranking, roas_x1, roas_x2 |
| pymc-labs.com · open-sourcing-decision-lab-scaling-ai-judgment-data-science | dl_explored, dl_vanilla, dl_verdict |
| pymc-labs.com · reducing-customer-acquisition-costs-how-we-helped-optimizing-hellofreshs-marketing-budget | hf_var |
| Question | Answer | Tool that answered it |
|---|---|---|
| Is the effect real? | Yes, p = 0.033 | placebo-in-space permutation: rank 1 of 30 |
| How big? | €260k of incremental sales | synthetic-control gap, summed over 20 weeks |
| Give or take? | [€195k, €335k] at 90% | test inversion over the placebo cloud |
Forget the formula and grade any candidate effect \(\hat\beta\) against the two numbers we own:
+The method never needed a model of intent, controls, or machine learning: two averages and a division.
Forget the formula and grade any candidate effect \(\hat\beta\) against the two numbers we own:
-| Assumption | What it says | In the case | Status |
|---|---|---|---|
| Relevance | \(Z\) moves \(X\) | \(F = 156\), far above 10 | TESTABLE, passes |
| Exogeneity | \(Z \perp U\) | the lottery is a genuine random draw | BY DESIGN |
| Exclusion | \(Z \to Y\) only via \(X\) | a queue bump shows the user nothing | UNTESTABLE |
| Monotonicity | no defiers | a nudge never repels | UNTESTABLE, plausible |
One estimate gives not one answer but a map from any price to a verdict:
-| Price zone | Verdict | Why |
|---|---|---|
| below €12.7 | GO | even the most pessimistic supported effect pays |
| €12.7 to €20.4 | TEST | the data straddle the price: negotiate, or measure more |
| above €20.4 | NO-GO | no supported effect pays |
| Quantity | Value | Source |
|---|---|---|
| effect of one exposure | €16.5 | the division δ/π |
| 90% interval | [12.7, 20.4] | classical, and AR agrees |
| first-stage F | 156 | the lottery is strong |
| price | €10 | the platform's rate card |
| net per exposure | €6.5 | β − c, at the point estimate |
| Source | Facts pinned |
|---|---|
| ailab.criteo.com · criteo-uplift-prediction-dataset | criteo_rows |
| pymc-labs.com · 2022-11-11-HelloFresh | hf_panel_calibration |
| pymc-labs.com · 2023-06-20-juan-marketing-analytics | webinar_agenda |
| pymc-labs.com · bayes-is-slow-speeding-up-hellofreshs-bayesian-ab-tests-by-60x | hf_batch, hf_test_types, hf_thousands |
| pymc-labs.com · bayesian-media-mix-modeling-for-marketing-optimization | hf_priors_experiments |
| pymc-labs.com · causal-sales-analytics-are-my-sales-incremental-or-cannibalistic | colgate_ci, colgate_ci_level, colgate_truth, colgate_year, fail_range, fail_truth, market |
| pymc-labs.com · causal-sales-analytics-discrete-choice-modeling | colgate_counterfactual_quote |
| pymc-labs.com · causalpy-a-new-package-for-bayesian-causal-inference-for-quasi-experiments | causalpy_methods, causalpy_tv |
| pymc-labs.com · funnel-aware-mmm | cpl, cpl_window, gdpr_sentence, herp_attribution_quote, nurn_2026, trust_quote |
| pymc-labs.com · marketing-mix-modeling-a-complete-guide | bolt_pr |
| pymc-labs.com · mmm_roas_lift | lift_tests_n, roas_gap_words, roas_wrong_ranking, roas_x1, roas_x2 |
| pymc-labs.com · open-sourcing-decision-lab-scaling-ai-judgment-data-science | dl_explored, dl_vanilla, dl_verdict |
| pymc-labs.com · reducing-customer-acquisition-costs-how-we-helped-optimizing-hellofreshs-marketing-budget | hf_var |
| Engagement | What it is | Typical client |
|---|---|---|
| Enablement & training | Workshops and upskilling on Bayesian methods and the tooling | Analytics teams standardizing on PyMC |
The estimator subtracts a reconstructed counterfactual from the treated metro's post-launch sales, and bias is its expected gap from the true lift:
-"What would this metro have sold anyway?" is an estimation target, not a rhetorical question.
Fit the weights on the pre-period only, constrained to the simplex:
-| Question | Answer | Tool that answered it |
|---|---|---|
| Is the effect real? | Yes, p = 0.033 | placebo-in-space permutation: rank 1 of 30 |
| How big? | €260k of incremental sales | synthetic-control gap, summed over 20 weeks |
| Give or take? | [€195k, €335k] at 90% | test inversion over the placebo cloud |
| Assumption | What it says | In the case | Status |
|---|---|---|---|
| Relevance | \(Z\) moves \(X\) | \(F = {{nb11.f_stat}}\), far above 10 | TESTABLE, passes |
| Exogeneity | \(Z \perp U\) | the lottery is a genuine random draw | BY DESIGN |
| Exclusion | \(Z \to Y\) only via \(X\) | a queue bump shows the user nothing | UNTESTABLE |
| Monotonicity | no defiers | a nudge never repels | UNTESTABLE, plausible |
One estimate gives not one answer but a map from any price to a verdict:
+| Price zone | Verdict | Why |
|---|---|---|
| below €{{nb11.iv_lo}} | GO | even the most pessimistic supported effect pays |
| €{{nb11.iv_lo}} to €{{nb11.iv_hi}} | TEST | the data straddle the price: negotiate, or measure more |
| above €{{nb11.iv_hi}} | NO-GO | no supported effect pays |
| Quantity | Value | Source |
|---|---|---|
| effect of one exposure | €{{nb11.iv_est}} | the division δ/π |
| 90% interval | [{{nb11.iv_lo}}, {{nb11.iv_hi}}] | classical, and AR agrees |
| first-stage F | {{nb11.f_stat}} | the lottery is strong |
| price | €{{nb11.cost}} | the platform's rate card |
| net per exposure | €{{nb11.net}} | β − c, at the point estimate |
| Source | Facts pinned |
|---|
| Question | Answer | Tool that answered it |
|---|---|---|
| Is the effect real? | Yes, p = 0.033 | placebo-in-space permutation: rank 1 of 30 |
| How big? | €260k of incremental sales | synthetic-control gap, summed over 20 weeks |
| Give or take? | [€195k, €335k] at 90% | test inversion over the placebo cloud |
Forget the formula and grade any candidate effect \(\hat\beta\) against the two numbers we own:
+The method never needed a model of intent, controls, or machine learning: two averages and a division.
Forget the formula and grade any candidate effect \(\hat\beta\) against the two numbers we own:
-| Assumption | What it says | In the case | Status |
|---|---|---|---|
| Relevance | \(Z\) moves \(X\) | \(F = {{nb11.f_stat}}\), far above 10 | TESTABLE, passes |
| Exogeneity | \(Z \perp U\) | the lottery is a genuine random draw | BY DESIGN |
| Exclusion | \(Z \to Y\) only via \(X\) | a queue bump shows the user nothing | UNTESTABLE |
| Monotonicity | no defiers | a nudge never repels | UNTESTABLE, plausible |
One estimate gives not one answer but a map from any price to a verdict:
-| Price zone | Verdict | Why |
|---|---|---|
| below €{{nb11.iv_lo}} | GO | even the most pessimistic supported effect pays |
| €{{nb11.iv_lo}} to €{{nb11.iv_hi}} | TEST | the data straddle the price: negotiate, or measure more |
| above €{{nb11.iv_hi}} | NO-GO | no supported effect pays |
| Quantity | Value | Source |
|---|---|---|
| effect of one exposure | €{{nb11.iv_est}} | the division δ/π |
| 90% interval | [{{nb11.iv_lo}}, {{nb11.iv_hi}}] | classical, and AR agrees |
| first-stage F | {{nb11.f_stat}} | the lottery is strong |
| price | €{{nb11.cost}} | the platform's rate card |
| net per exposure | €{{nb11.net}} | β − c, at the point estimate |
| Source | Facts pinned |
|---|
| Agent, on adversarial MMM data | Result |
|---|---|
| Vanilla coding agent | Fit a model, recommended budget reallocations. {{labs.dl_vanilla}} |
| PyMC Labs' Decision Lab | {{labs.dl_explored}} Returned: "{{labs.dl_verdict}}" |
| Source | Facts pinned |
|---|