Benchmark framework for evaluating hyperparameter optimization methods and overtuning mitigation strategies.
Tested and working with Python 3.11.3 on WSL (Windows Subsystem for Linux).
git clone https://github.com/ADA-research/OvertuningMitigationBenchmark.git
cd OvertuningMitigationBenchmarksudo apt-get update && sudo apt-get install -y \
build-essential \
cmake \
git \
swig \
git-lfs \
libeigen3-dev \
libopenblas-dev \
libffi-devpython3.11 -m venv venv
source venv/bin/activate
pip install --upgrade pip setuptools wheel
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
pip install "autogluon.tabular[fastai]" --extra-index-url https://download.pytorch.org/whl/cpu
pip install --no-cache-dir -r requirements.txt
pip install "gpytorch>=1.4.0"
pip install "pymoo>=0.6.0"
pip install "HEBO==0.3.5" --no-deps
pip install IPythonOvertuningMitigationBenchmark/
├── LICENSE
├── README.md
├── requirements.txt
├── docs/
│ ├── datasets.md
│ ├── normalization.md
│ ├── parallelization.md
│ ├── plotting.md
│ ├── reproducability.md
│ └── result_tables.md
├── src/
│ ├── datasets/
│ ├── evaluators/
│ ├── experiments/
│ ├── history/
│ ├── metrics/
│ ├── mitigations/
│ ├── models/
│ ├── optimizers/
│ ├── resamplers/
│ ├── search_space/
│ ├── target/
│ ├── utils/
│ └── visualizations/
│ ├── data/
│ ├── plotting/
│ └── preprocessing/
└── tests/
Benchmark tasks are retrieved from OpenML. The machine running an experiment needs internet access, and --dataset_id must be an OpenML task ID. The benchmark infers the problem type from the dataset ID; the benchmark CLI does not accept a --problem_type option.
source venv/bin/activateRun all tests:
python -m pytest -qExample: run the full benchmark for LGBM on OpenML task 363700 (binary).
python -m src.experiments.benchmark_experiments.start_experiment \
--dataset_id 363700 \
--model_string LGBM \
--output_dir . \
--n_jobs 1 \
--threads_per_job 1This creates a timestamped experiment folder under results, for example:
results/LGBM_363700_YYYYMMDD_HHMMSS/
The benchmark writes results locally and attempts to upload task results to Google Cloud Storage. Without the service-account file google-cloud-phd-storage-key.json in the repository root, uploads are disabled with a warning and the local run continues.
The post-hoc ensemble and post-hoc surrogate analyses are separate from the benchmark. After each benchmark finishes, run both commands for its experiment directory before combining results:
EXPERIMENT_DIR="results/LGBM_363700_YYYYMMDD_HHMMSS"
python -m src.experiments.benchmark_experiments.post_hoc_ensemble_experiment \
--results_dir "$EXPERIMENT_DIR" \
--ensemble_size 40 \
--n_jobs 1
python -m src.experiments.benchmark_experiments.post_hoc_surrogate_experiment \
--results_dir "$EXPERIMENT_DIR" \
--n_jobs 1Parallelism guidance: see docs/parallelization.md.
To preprocess full results, point --results-dir at the parent directory containing your experiment result directories.
python -m src.visualizations.preprocessing.pipeline \
--results-dir results \
--output-dir src/visualizations/dataThe output directory receives preprocessed_results.csv.gz and trajectories.csv.gz.
The visualization release consists of two gzip-compressed CSV files:
preprocessed_results.csv.gz: fold-level/configuration results, used as a compact analysis table and as the normalization-anchor source.trajectories.csv.gz: iteration-by-iteration incumbent results for each included method; this is the input used by the plotting pipeline.
These results can be obtained by running the benchmark. Alternatively, we have released them for our full benchmark and they can be downloaded here:
The detailed column definitions and row meanings are in docs/result_tables.md. We do not publish the full results and artifacts, including labels and model predictions. Please contact us if you would like to use them. With these two files present in src/visualizations/data, you can run the plotting pipeline with:
python -m src.visualizations.plotting.run \
--data-dir src/visualizations/data \
--output-root src/visualizations/results \
--prodPlot files are written to a timestamped folder under src/visualizations/results/
If you use our benchmark's code or data in a scientific publication, please cite:
@inproceedings{
schroder2026a,
title={A Large-Scale Study of Overtuning Mitigation Strategies in Hyperparameter Optimization},
author={Sietse Schr{\"o}der and Zubin Zellmann and Matthias Feurer and Mitra Baratchi and Jan N. van Rijn and Bernd Bischl},
booktitle={AutoML 2026 Methods Track},
year={2026},
url={https://openreview.net/forum?id=pX6n6ca762}
}