A library for Synthetic Control methods
Project description
SynthCtrl
A Python library for implementing Synthetic Control methods for causal inference, including the Classical Synthetic Control method and Synthetic Difference-in-Differences (SDID).
Overview
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)
Installation
pip install SynthCtrl
Features
- Easy-to-use API with scikit-learn-like interfaces
- Bootstrap for statistical inference
- Comprehensive visualization tools
Quick Start
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)
Using Synthetic Difference-in-Differences
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)
Documentation
For detailed documentation, visit the GitHub pages.
Examples
The examples/ directory contains Jupyter notebooks demonstrating various use cases:
- Basic usage with California smoking data
- Advanced features and customization
- Comparison of different methods
Citation
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},
}
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file synthctrl-0.1.1.tar.gz.
File metadata
- Download URL: synthctrl-0.1.1.tar.gz
- Upload date:
- Size: 310.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c01edef1b5cffe4b6b09c41345ce0fbffb1b3264d669ffe0f91f3a37aa47e90e
|
|
| MD5 |
b16490447bc83582365844f4ba09a08a
|
|
| BLAKE2b-256 |
c0d93410d5b8a00e362f5e3edf8c3b6d3a27e8675c15cc4d47d59040f6238f28
|
File details
Details for the file synthctrl-0.1.1-py3-none-any.whl.
File metadata
- Download URL: synthctrl-0.1.1-py3-none-any.whl
- Upload date:
- Size: 25.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d425a3ee3c001983472b9884327669284963120bf3507481e994faeae5fee904
|
|
| MD5 |
670fe0898c768cfb3a3b7fada2bd6471
|
|
| BLAKE2b-256 |
c24ebf4318ebc0b0b4790169a8b782fd14be052104b13af20eb2d5f30644d118
|