Spaces:
Sleeping
Sleeping
Commit ·
28b69e8
1
Parent(s): 88c249e
Expand baseline roster: all synthcity-available TabDiff/fair-tab-diffusion baselines + external-baseline framework
Browse files- pipeline/arena.py +7 -3
- scripts/EXTERNAL_BASELINES.md +55 -0
- scripts/server_arena.py +4 -2
pipeline/arena.py
CHANGED
|
@@ -17,9 +17,13 @@ _CANDIDATES = {
|
|
| 17 |
"datadesigner": [("datadesigner", "conditional-target"), ("datadesigner", "samplers")],
|
| 18 |
"sdgym": [("sdgym", "data_identity"), ("sdgym", "column"), ("sdgym", "uniform")],
|
| 19 |
"sdv": [("sdv", "gaussiancopula"), ("sdv", "ctgan"), ("sdv", "tvae")],
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
}
|
| 24 |
|
| 25 |
# Acceptance thresholds — the "is it working well?" evaluation loop.
|
|
|
|
| 17 |
"datadesigner": [("datadesigner", "conditional-target"), ("datadesigner", "samplers")],
|
| 18 |
"sdgym": [("sdgym", "data_identity"), ("sdgym", "column"), ("sdgym", "uniform")],
|
| 19 |
"sdv": [("sdv", "gaussiancopula"), ("sdv", "ctgan"), ("sdv", "tvae")],
|
| 20 |
+
# TabDiff + fair-tab-diffusion baselines available as synthcity plugins.
|
| 21 |
+
"synthcity": [("synthcity", m) for m in (
|
| 22 |
+
# fidelity baselines
|
| 23 |
+
"ctgan", "tvae", "rtvae", "nflow", "ddpm", "arf", "goggle", "great",
|
| 24 |
+
# privacy / fairness baselines
|
| 25 |
+
"dpgan", "pategan", "adsgan", "privbayes", "decaf",
|
| 26 |
+
)],
|
| 27 |
}
|
| 28 |
|
| 29 |
# Acceptance thresholds — the "is it working well?" evaluation loop.
|
scripts/EXTERNAL_BASELINES.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Baselines from TabDiff & fair-tab-diffusion
|
| 2 |
+
|
| 3 |
+
Both papers benchmark a large set of generators. In MemisisLabs they fall into two tiers.
|
| 4 |
+
|
| 5 |
+
## Tier 1 — available as synthcity plugins (run via the arena, no extra repos)
|
| 6 |
+
These enter the arena directly through the `synthcity` backend once a `SYNTHCITY_VENV` is set
|
| 7 |
+
(see `scripts/server_arena.py`). Install with `pip install "synthcity[all]"` on the GPU host to
|
| 8 |
+
get the `goggle`/`great` extras.
|
| 9 |
+
|
| 10 |
+
| Baseline (paper) | synthcity plugin |
|
| 11 |
+
|---|---|
|
| 12 |
+
| CTGAN | `ctgan` |
|
| 13 |
+
| TVAE / RTVAE | `tvae`, `rtvae` |
|
| 14 |
+
| TabDDPM | `ddpm` |
|
| 15 |
+
| GOGGLE | `goggle` |
|
| 16 |
+
| GReaT | `great` |
|
| 17 |
+
| Normalizing flow | `nflow` |
|
| 18 |
+
| ARF | `arf` |
|
| 19 |
+
| DP-GAN / PATE-GAN / ADS-GAN | `dpgan`, `pategan`, `adsgan` |
|
| 20 |
+
| PrivBayes | `privbayes` |
|
| 21 |
+
| DECAF (fairness) | `decaf` |
|
| 22 |
+
|
| 23 |
+
Run: `python scripts/server_arena.py` (uses these by default across all datasets).
|
| 24 |
+
|
| 25 |
+
## Tier 2 — standalone research repos (external experiments)
|
| 26 |
+
No pip/synthcity plugin — each is its own repo with its own env. Integrate them the same way as
|
| 27 |
+
TabDiff: clone + set up, train + sample into a CSV, then score with **our** metric suite via a
|
| 28 |
+
small evaluate step (mirror `scripts/tabdiff_evaluate.py`). This puts them on the shared
|
| 29 |
+
leaderboard under our TabDiff-standard metrics.
|
| 30 |
+
|
| 31 |
+
| Baseline | Repo | Notes |
|
| 32 |
+
|---|---|---|
|
| 33 |
+
| TabDiff | github.com/MinkaiXu/TabDiff | done — `scripts/tabdiff_prepare.py` + `tabdiff_evaluate.py` |
|
| 34 |
+
| TabSyn | github.com/amazon-science/tabsyn | latent-space diffusion |
|
| 35 |
+
| STaSy | github.com/JayoungKim408/STaSy | score-based |
|
| 36 |
+
| CoDi | github.com/ChaejeongLee/CoDi | co-evolving diffusion |
|
| 37 |
+
| FairTabDDPM | github.com/comp-well-org/fair-tab-diffusion | fairness-aware diffusion |
|
| 38 |
+
| FairTabGAN / FairSMOTE | (fair-tab-diffusion `args/*/`) | fairness-aware baselines |
|
| 39 |
+
|
| 40 |
+
### Generic pattern for a Tier-2 baseline
|
| 41 |
+
1. Clone + create its env on the lab server.
|
| 42 |
+
2. Prepare the dataset in its expected format (adapt `scripts/tabdiff_prepare.py` if it uses the
|
| 43 |
+
same Info-JSON layout — TabSyn/CoDi/STaSy/FairTabDDPM all descend from the TabSyn data format).
|
| 44 |
+
3. Train + sample to a synthetic CSV.
|
| 45 |
+
4. Score + record:
|
| 46 |
+
```bash
|
| 47 |
+
python scripts/tabdiff_evaluate.py --dataset openml_45040 \
|
| 48 |
+
--synthetic /path/to/<method>_samples/ --record
|
| 49 |
+
```
|
| 50 |
+
(change the recorded label in the script, or add a `--label <method>` flag.)
|
| 51 |
+
|
| 52 |
+
## Fairness metrics
|
| 53 |
+
fair-tab-diffusion's fairness = fairlearn `demographic_parity_ratio` + `equalized_odds_ratio` —
|
| 54 |
+
already adopted as the arena's `fairness` dimension (`pipeline/fairness.py`), applied to every
|
| 55 |
+
classification dataset with a sensitive attribute.
|
scripts/server_arena.py
CHANGED
|
@@ -24,9 +24,11 @@ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
|
| 24 |
from pipeline import arena, datasets, leaderboard # noqa: E402
|
| 25 |
from pipeline.metadata import build_metadata # noqa: E402
|
| 26 |
|
| 27 |
-
|
|
|
|
| 28 |
"dpgan", "pategan", "adsgan", "privbayes", "decaf"]
|
| 29 |
-
DEFAULT_DATASETS = ["openml_45040", "adult", "german", "bank", "compas"
|
|
|
|
| 30 |
|
| 31 |
|
| 32 |
def available_plugins(requested: list[str]) -> list[str]:
|
|
|
|
| 24 |
from pipeline import arena, datasets, leaderboard # noqa: E402
|
| 25 |
from pipeline.metadata import build_metadata # noqa: E402
|
| 26 |
|
| 27 |
+
# synthcity plugins matching the TabDiff + fair-tab-diffusion baselines.
|
| 28 |
+
DEFAULT_MODELS = ["ctgan", "tvae", "rtvae", "nflow", "ddpm", "arf", "goggle", "great",
|
| 29 |
"dpgan", "pategan", "adsgan", "privbayes", "decaf"]
|
| 30 |
+
DEFAULT_DATASETS = ["openml_45040", "adult", "german", "bank", "compas",
|
| 31 |
+
"shoppers", "magic", "default", "diabetes_pima", "beijing", "news"]
|
| 32 |
|
| 33 |
|
| 34 |
def available_plugins(requested: list[str]) -> list[str]:
|