BSCM — Bayesian Synthetic Control Methods (Kim, Lee & Gupta 2020)#

Estimator:

Bayesian Synthetic Control Methods (BSCM)mlsynth.BSCM

Source:

Kim, Sungjin, Lee, Clarence, and Gupta, Sachin (2020), “Bayesian Synthetic Control Methods,” Journal of Marketing Research 57(5):831-852 [BSCM2020].

Replication type:

cross-validation against the authors’ reference Stan implementation (clarencejlee/bscm) and against the forward-selected panel-data approach on the China anti-corruption watch panel.

Status:

verified — the horseshoe matches the reference Stan to four decimals on the ATT, and agrees with the forward-selection benchmark on the same data.

Why the China watch panel, and not the paper’s data#

The paper’s empirical application measures the effect of a 2010 Washington soda tax using proprietary state-level weekly Nielsen retail data, which is not public. BSCM is designed for the “large p, small n” regime, so this replication validates on a public panel in exactly that regime: the China anti-corruption watch-demand series (china_watches_long.csv) – one treated series (watches), 87 donor series, and 35 pre-treatment months, with treatment at 2013-01 when the anti-corruption campaign began. With 87 donors and 35 pre-periods this is genuinely \(p > n\), the setting BSCM was built for, and it is the original benchmark for the forward-selected panel-data approach, which gives a second, independent method to check against.

Validation strategy#

BSCM ships a reference Stan implementation (clarencejlee/bscm): the program Horseshoe_Publish.stan fits the treated unit on the donor pool with an intercept and the horseshoe prior, then produces the post-treatment counterfactual in the generated quantities block. Sampled with rstan (4 chains, 2000 iterations, 1000 warm-up), it is the ground truth. mlsynth reproduces it with a pure-numpy Gibbs sampler – the horseshoe via the Makalic-Schmidt (2016) auxiliary-variable representation of the paper’s exact hierarchy – so there is no Stan or probabilistic-programming dependency in the library.

Cross-validation — three methods agree#

Fed the identical panel, the pure-numpy horseshoe, the reference Stan horseshoe, and the forward-selected panel-data approach all converge:

Method

ATT

95% interval

pre-RMSE

dominant donor

Stan horseshoe (reference)

\(-0.0221\)

\([-0.066, +0.024]\)

0.0999

C60 = 0.68

mlsynth BSCM horseshoe

\(-0.0221\)

\([-0.064, +0.020]\)

0.0988

C60 = 0.68

FSPDA (forward selection)

\(-0.0107\)

\([-0.035, +0.013]\)

0.0995

C60 = 0.85

The pure-numpy port and the reference Stan agree to four decimals on the ATT (\(-0.0221\)), on the credible band, on the pre-RMSE, and donor for donor (C60 \(0.68\) in both; C51, C45, C57, C25 next in both). The forward-selected approach – a completely different, greedy sparse method, and the dataset’s own benchmark – picks the same dominant donor and returns the same near-null ATT. All three intervals cross zero: no statistically credible effect on this residualised watch-demand series in this configuration.

A robustness note that cuts in the port’s favour. With \(p = 87\) donors the horseshoe posterior is a difficult funnel-shaped geometry; the reference Stan run reports divergent transitions and a maximum \(\widehat{R}\) of about 1.02 even at adapt_delta = 0.999. The block Gibbs with auxiliary variables has no funnel to fall into, so it mixed cleanly and still landed on the reference answer – on this benchmark the pure-numpy sampler is the more robust of the two.

Overfitting — a cautionary counter-example (Basque)#

BSCM can overfit, and the in-sample pre-fit will not warn you. On the Basque Country panel (16 donors, 15 pre-periods, so \(p \approx n\)) the horseshoe drives the pre-treatment RMSE to about \(0.004\) – roughly twenty times tighter than a simplex SCM. That fit is an interpolation artifact, not a success: a held-out pre-period test (train on the early pre-period, predict the last few pre-treatment years, where the true effect is zero) shows a generalisation error dozens of times larger than the in-sample fit. The China watch panel, with more than twice the pre-periods, does not suffer this: its held-out error is close to its in-sample error. The lesson, and the reason this replication is anchored on the watch panel rather than Basque, is that overfitting in these models is governed by the absolute number of pre-periods. Judge a BSCM fit by held-out or leave-one-out prediction and by the width of the credible band, never by the in-sample pre-RMSE. The durable case is benchmarks/cases/bscm_china_watches.py.