A Python library for implementing Synthetic Control methods for causal inference, including the Classical Synthetic Control method and Synthetic Difference-in-Differences (SDID).
Synthetic Control is a statistical method used for comparative case studies. It constructs a weighted combination of control units to create a synthetic version of the treated unit, allowing for the estimation of causal effects in settings where a single unit receives treatment and multiple units remain untreated.
This library provides implementations of:
- Classical Synthetic Control (Abadie & Gardeazabal, 2003)
- Synthetic Difference-in-Differences (Arkhangelsky et al., 2019)
pip install SynthCtrl- Easy-to-use API with scikit-learn-like interfaces
- Bootstrap for statistical inference
- Comprehensive visualization tools
import pandas as pd
from synthetic_control import ClassicSyntheticControl
data = pd.read_csv("california_smoking.csv")
sc = ClassicSyntheticControl(
data=data,
metric="cigarettes",
period_index="year",
unit_id="state",
treated="california",
after_treatment="after_treatment"
)
sc.fit()
predictions = sc.predict()
effect = sc.estimate_effect()
print(f"Average Treatment Effect: {effect['att']:.4f}")
bootstrap_results = sc.bootstrap_effect()
print(f"Standard Error: {bootstrap_results['se']:.2f}")
print(f"95% CI: [{bootstrap_results['ci_lower']:.2f}, {bootstrap_results['ci_upper']:.2f}]")
sc.plot_model_results(figsize=(14, 7), show=True)from synthetic_control import SyntheticDIDModel
sdid_model = SyntheticDIDModel(
data=data,
metric="cigarettes",
period_index="year",
unit_id="state",
treated="california",
after_treatment="after_treatment"
)
sdid_model.fit()
sdid_model.plot_model_results(figsize=(14, 7), show=True)For detailed documentation, visit the GitHub pages.
The examples/ directory contains Jupyter notebooks demonstrating various use cases:
- Basic usage with California smoking data
- Advanced features and customization
- Comparison of different methods
If you use this library in your research, please cite:
@software{SynthCtrl_python,
author = {Yaroslav Rogoza},
title = {SynthCtrl: A Python Library for Causal Inference},
year = {2025},
url = {https://github.com/123yaroslav/SynthCtrl},
}
This project is licensed under the MIT License - see the LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.