# Marketing Science Center — example datasets

Version: 2026-08-18  
License: CC0 1.0 — see `LICENSE-DATA.txt`  
Status: synthetic data for educational use; these files do not describe any real company or market.

## MSC-001 — Price Elasticity

Question: how does volume change with price, holding the observed controls constant?

Variables:

- `week`: observation week;
- `price_eur`: observed unit price in euros;
- `units`: units sold;
- `competitor_price_eur`: synthetic competitor price;
- `promo`: promotion indicator (0/1);
- `season_index`: seasonal index centered around 1.

Suggested method: log-log regression of `units` on `price_eur`, using the available controls. The log-price coefficient is an elasticity conditional on the specified model.

Expected result: a negative elasticity in this constructed dataset. Compare a simple estimate with an estimate that includes controls.

Limitations: 24 observations, stepwise prices, no costs and limited competitive variables. The exercise supports neither a pricing recommendation nor extrapolation to a real market.

## MSC-002 — Advertising Response

Question: does marginal response decrease as spend rises?

Variables:

- `market`: synthetic market identifier;
- `weekly_spend_eur`: weekly media spend;
- `impressions_k`: impressions in thousands;
- `response_index`: simulated incremental response;
- `baseline_index`: simulated baseline around 100.

Suggested method: compare a straight line, a saturating exponential function and a logistic curve; inspect residuals and parameter stability.

Expected result: saturating models better describe the diminishing returns built into the data.

Limitations: synthetic cross-section, no time dynamics, no adstock and no treatment of spend endogeneity. A good fit does not establish a causal effect.

## MSC-005 — Promotion Incrementality

Question: what difference in growth is observed between test and control markets?

Variables:

- `market`: synthetic market identifier;
- `group`: `test` or `control` group;
- `pre_sales_eur`: sales before the intervention;
- `post_sales_eur`: sales after the intervention;
- `promo_cost_eur`: promotion cost, zero in the control group;
- `stores`: number of observed stores.

Suggested method: difference-in-differences, subtracting the control group's `(post - pre)` change from the test group's change, with uncertainty estimated at market level.

Expected result: a higher average increase in the test group in this constructed dataset.

Limitations: synthetic assignment, a small number of markets and a single before/after period. Parallel trends cannot be established here; the result is not external causal evidence.

## MSC-004 — Customer Lifetime Value

Question: can frequency, recency and customer age rank expected future contribution?

Variables: `customer_id`, `calibration_end`, `repeat_transactions`, `recency_from_first_weeks`, `calibration_age_weeks`, `holdout_horizon_weeks`, `holdout_transactions`, `mean_repeat_transaction_value_eur`, `contribution_margin_rate`, `discount_rate_per_week`. Mean repeat value is blank when `repeat_transactions=0`, because those customers are excluded from Gamma-Gamma fitting.

Suggested method: fit BG/NBD on calibration, validate predicted transactions on holdout, then convert future transactions into discounted contribution. Add Gamma-Gamma only after checking frequency–value independence.

Expected result: recent, frequent customers generally rank higher, but ranking must be judged on holdout transactions rather than fit alone.

Limitations: 30 synthetic customers, no service cost or retention treatment. The sample demonstrates the workflow; it cannot calibrate a deployable model.

## MSC-006 — Marketing Mix Modeling

Question: how can a series reveal that channel contributions cannot be separated?

Variables: `week`, `sales_units`, `search_spend_eur`, `social_spend_eur`, `tv_spend_eur`, `promotion`, `price_index`, `holiday`.

Suggested method: start with a time-series benchmark, inspect correlations and VIF, then test coefficient stability before applying adstock or saturation transforms.

Expected result: search and social spend are almost collinear. Channel contributions should be unstable across specifications; this is a deliberate non-identification example.

Limitations: 36 synthetic periods, no experimental variation and no exogenous shock. The dataset supports neither causal attribution nor budget recommendation.

## MSC-007 — Measurement Validity

Question: can a scale be internally consistent while failing to distinguish trust from satisfaction?

Variables: `respondent_id`, `group`, `trust_1` to `trust_4`, `satisfaction_1` to `satisfaction_3`.

Suggested method: compute descriptive reliability, inspect between-construct correlations and treat sample size as a prerequisite diagnostic before CFA or invariance testing.

Expected result: trust items are consistent, but trust and satisfaction are deliberately highly correlated. The expected finding is a discriminant-validity warning, not validation.

Limitations: 30 responses, 15 per group, cannot support defensible CFA or invariance testing. The dataset teaches how to recognize failure and insufficient information.

## MSC-010 — Monte Carlo Inputs

Question: how should price-volume-margin uncertainty be propagated without ignoring dependencies?

Variables: `scenario`, `input`, `distribution`, `param_1`, `param_2`, `param_3`, `unit`, `correlation_with`, `rho`. For a triangular distribution, the three parameters are minimum, mode and maximum; `rho` states correlation with the named input.

Suggested method: simulate inputs jointly with a fixed seed, compute volume and contribution per draw, then report quantiles, threshold probability and Monte Carlo error.

Expected result: compare dispersion with and without the declared volume–elasticity dependence. Its effect depends on the sign of `rho` and the model; the supplied negative correlation slightly dampens dispersion.

Limitations: educational distributions and correlations not calibrated to a real market. Multivariate dependence is only partial and requires validation before use.

## MSC-P-007-RELIABILITY — Alpha / omega models

Question: how do tau-equivalence and unequal loadings change alpha and omega for the same total score?

Variables: `scenario`, `item`, `loading`, `residual_variance`. Items are standardized, factor variance is 1 and errors are independent in the generating model.

Suggested method: build `R` with `r_ij = loading_i × loading_j`, compute alpha from `R` and omega from loadings and residuals, then simulate new samples of synthetic respondents from the declared data-generating process with a full model refit.

Expected result: under tau-equivalence, `α = ω = 0.814458`. In the congeneric scenario, `α = 0.782488`, `ω = 0.815454` and `ω−α = 0.032966`.

Limits: teaching parameters, normal unidimensional model and independent errors. No real survey, universal cutoff or evidence of validity.

## MSC-P-009-MATRIX — PCA / EFA / CFA correlation matrix

Question: how can the same matrix distinguish descriptive reduction, common factors and confirmatory testing?

Variables: `v1` to `v3` are synthetic indicators of the first factor; `v4` to `v6` are indicators of the second. The diagonal is 1, within-factor correlations are 0.64 and between-factor correlations are 0.256. The file contains no respondent-level observations and defines no empirical sample size.

Suggested method: compute PCA eigenvalues, estimate two oblique factors with EFA, then specify two correlated factors with CFA. In the software examples, `N = 300` is an illustrative pseudo-count required by some commands, not a property of the data.

Expected result: eigenvalues `3.048`, `1.512` and `0.360` four times; the first two axes explain exactly 76% of variance. The generating solution uses loadings of 0.80, a factor correlation of 0.40 and uniquenesses of 0.36.

Limitations: this is an exact, tautological theoretical fixture with no sampling noise. It illustrates computation but provides no standard errors, intervals or validation of a real scale.

## MSC-P-002-RETARGETING: Correlation and causality

Question: how much of the purchase gap between retargeted and non-retargeted customers remains after standardizing for prior intent?

Variables: `prior_intent` (0 low, 1 high), `retargeted` (assignment to the fixed policy, 0 no, 1 yes), `n` (cell count) and `purchases` (purchases within 30 days). Synthetic sample: 10,000 customers from the eligible population. Policy A=1 allows one fixed display impression within 24 hours, capped at one over seven days; A=0 suppresses them.

Suggested method: compute the crude risk difference, then standardized risks `Σₗ E[Y|A=a,L=l]P(L=l)` and their difference. Expected result: crude association `15.14` points; standardized ATE `2.80` points; 95% Wald interval `[1.20, 4.40]` points.

Limitations: synthetic aggregates, one observed confounder and no randomization. The Wald CI assumes independent binomial cells and conditions on observed counts and weights. Causal interpretation requires consistency, conditional exchangeability, positivity and no interference; the interval does not include omitted-confounder bias.

## MSC-P-018-PREDICTIVE-CAUSAL: Predictive and causal regression

Question: why can a post-treatment variable improve prediction while being inadmissible for the total causal effect?

Variables: `customer_id`, `split`, `baseline_intent_z`, `prior_spend_eur`, `reminder_assigned`, `engagement_index_7d`, `spend_30d_eur`. The first two covariates are pre-treatment; engagement is measured seven days after assignment.

Suggested method: fit predictions on 1,800 train rows, assess RMSE, MAE and R² on 600 holdout rows, then separately estimate the ATE on all 2,400 randomized units without adjusting for the mediator. Use seed `20260819` and the supplied Python script.

Expected result: the model with engagement reduces RMSE by `15.20%`, 95% bootstrap CI `[11.05%, 19.62%]`. Estimated ATE is `€8.3667`, HC1 CI `[€7.8704, €8.8631]`, against a synthetic truth of `€8.80`. Adjusting for engagement reduces the treatment coefficient to `€2.0657`, which is not the total effect.

Limitations: fully synthetic data, linear relations and independent random assignment by construction. The bootstrap interval describes this holdout; the HC1 interval addresses neither future drift, contamination nor transport to another population.

## MSC-P-021-PANEL: Fixed effects, random effects and CRE

Question: how can the within-store association between display share and orders be separated from the association across stores?

Variables: `store_id` (12 synthetic stores), `week` (8 periods), `display_share_pct` (share of visits exposed, in percentage points) and `orders_per_1000` (orders per 1,000 visits). The balanced panel contains 96 rows.

Suggested method: estimate pooled slope, within slope by store demeaning, between slope on store means, standard RE by GLS quasi-demeaning, and CRE/Mundlak with `xit−x̄i` and `x̄i`. The example uses one-way store FE; add week effects to absorb common time shocks.

Expected result: pooled `−1.140472`, FE/within `−0.600000`, between `−1.200000`, reference standard RE `−0.689372`, CRE `βW=−0.600000` and `βB=−1.200000`. The store-sandwich SE is `0.022972` with finite `G/(G−1)` correction; the 95% t(11) CI is `[−0.650562, −0.549438]`. Python 3.13 and base R 4.5 reproduce the declared moments method; native SPSS/SAS RE outputs may differ with estimator and options.

Limitations: fully synthetic data, only 12 clusters, balanced panel and declared linear process. The interval illustrates the declared teaching convention without guaranteeing reliable inference with few clusters. It addresses clustered noise in the example, not time-varying confounding, reverse causality, measurement error or selection bias. Coefficients are associational.

## MSC-P-026-LOGIT-PROBIT: Binary predictive comparison

Question: do Logit and Probit yield probabilities, marginal effects and holdout diagnostics that differ enough to change a decision?

Variables: `customer_id`, `split` (`train` or `holdout`), `prior_engagement_z`, `discount_pct`, `mobile`, `purchase`. The file contains 1,200 synthetic customers, 800 for training and 400 for holdout. Fixed seed: `20260819`.

Suggested method: fit both links with the same linear predictor on training data, then compare on the same holdout the average marginal effect of engagement with a 95% delta-method CI, Brier score, log loss, AUC, calibration-in-the-large and two tail profiles.

Expected result: AME `19.8738` points for Logit and `19.8780` for Probit; Brier `0.175319` and `0.175367`; log loss `0.527456` and `0.527414`; AUC `0.809401` and `0.809743`. Differences are tiny in this example.

Limitations: the outcome is generated by a teaching logistic process, with no real campaign or customer. CIs concern AMEs under the declared model, not every metric difference. The dataset proves neither universal equivalence nor a causal engagement effect.

## MSC-P-020-PRICE-ENDOGENEITY: Price endogeneity and 2SLS

Question: what log-log quantity response to price variation induced by a supplier-cost shock can be estimated under stated IV assumptions?

Variables: `product_id`, `week`, `log_quantity`, `log_price`, `supplier_cost_shock`, `promotion`, `season_index`. The file contains 600 synthetic rows, 60 products and 10 weeks. Fixed seed: `20260820`.

Suggested method: compare OLS and 2SLS using `supplier_cost_shock` as the excluded instrument, `promotion` and `season_index` as controls, then compute partial R-squared, a clustered first-stage Wald statistic, product-clustered interval and a control-function diagnostic. Python 3.13 standard library is the executable reference; R 4.5 is the companion reference.

Expected result: `βOLS = −0.577216`, `βIV = −1.011208`, IV SE `0.083104`, 95% CI `[−1.174092, −0.848325]`, partial R-squared `0.310020` and clustered Wald `χ²(1)=255.749005`. The generating coefficient is `−1.20`; the realized gap is sampling noise, not a benchmark.

Limitations: fully synthetic data, an instrument valid only by construction and a linear log-log structure. Relevance is measurable; independence and exclusion are not proven by diagnostics. No optimal price, transport beyond support or real-world effect is established.

## MSC-P-030-SURVIVAL — Censored retention and survival

Question: how can retention at 12 and 18 months be estimated when some customers remain active at observation end, then the conditional association between plan and churn hazard be described?

Variables: `customer_id`, `plan_group`, `baseline_engagement_z`, `start_date`, `end_date`, `duration_months`, `churn_event`, `censor_reason`. The dataset contains 600 synthetic customers recruited over 90 days, 401 churns and 199 censored observations. `duration_months` is the analytical duration; dates are rounded to the day. Fixed seed: `20260820`.

Suggested method: Kaplan-Meier with Greenwood log-log intervals, log-rank, Cox adjusted for group and baseline engagement, then a group × `log(t/12)` interaction as the declared proportional-hazards diagnostic.

Expected result: monthly gives `S9=0.489303`, `S12=0.380325` and `S18=0.254876`; annual gives `S9=0.779045`, `S12=0.702150` and `S18=0.534170`. Adjusted Cox gives `HR=0.494368`, 95% CI `[0.397306, 0.615142]`. The time interaction gives `p=0.082475`.

Limitations: fully synthetic data, censoring independent only by construction, maximum 24-month window and observational plan selection. A missing or invalid required input stops the analysis and reports the affected row count, with no imputation. The computed sensitivity compares 9, 12 and 18 months and adds the declared time interaction. Results are associative and prove no causal plan effect.

## Decisions these data can and cannot support

These datasets can reproduce a calculation, compare specifications and discuss uncertainty. They cannot establish an industry benchmark, forecast real sales or automatically recommend a price, budget or promotion.
