This archive is distributed in association with the INFORMS Journal on Computing under the MIT License.
The software and data in this repository are a snapshot of the code and data that were used in the research reported on in the paper Integrating Data Cleaning and Robustification: A Study on Linear Regression by U. T. Bilgic, X. Qian, B. Zeng.
To cite the contents of this repository, please cite both the paper and this repository using their respective DOIs.
Paper DOI:
https://doi.org/10.1287/ijoc.2024.0884
Code repository DOI:
https://doi.org/10.1287/ijoc.2024.0884.cd
BibTeX for this repository snapshot:
@misc{Bilgic2026integrating,
author = {Bilgic, Utku Tarik and Qian, Xiaoning and Zeng, Bo},
publisher = {INFORMS Journal on Computing},
title = {Integrating Data Cleaning and Robustification: A Study on Linear Regression},
year = {2026},
doi = {10.1287/ijoc.2024.0884.cd},
url = {https://github.com/INFORMSJoC/2024.0884},
note = {Available for download at https://github.com/INFORMSJoC/2024.0884},
}This repository contains the Python implementation of the integrated framework that combines optimistic and pessimistic optimization strategies to handle outliers and robustification on linear regression problem.
The experiments compare standard regression baselines with Cleaned Robust Optimization (C-RO) and Cleaned Distributionally Robust Optimization (C-DRO) approaches on synthetic data and UCI benchmark data sets. The repository includes experiments covering synthetic outlier settings, sensitivity to distributional assumptions, ADMM performance, outlier-size estimation, random UCI outliers, black-box and white-box poisoning attacks.
.
├── README.md
├── AUTHORS
├── LICENSE
├── requirements.txt
├── data/
│ ├── README.md
│ ├── abalone/ # Abalone UCI data set
│ ├── auto_mpg/ # Auto MPG UCI data set
│ ├── wine_quality/ # Wine Quality UCI data set
│ └── hyperparameters/ # Tuned hyperparameter CSV files
├── scripts/
│ ├── README.md
│ ├── _common.py
│ ├── experiment1_synthetic.py # Synthetic outlier experiments
│ ├── experiment2_normality.py # Normality-sensitivity experiments
│ ├── experiment3_admm_performance.py # ADMM performance comparisons
│ ├── experiment4_outlier_estimation.py # Outlier-size estimation experiments
│ ├── experiment5_uci_outliers.py # UCI random-outlier experiments
│ ├── experiment6_blackbox_poisoning_attacks.py
│ │ # Black-box poisoning experiments
│ └── experiment7_nopt_poisoning.py # White-box Nopt poisoning experiments
├── src/
├── README.md
├── __init__.py
├── DataGen.py # Synthetic/UCI data generation
├── Models.py # Regression and optimization models
└── UCIdatasets.py # Fixed-size UCI data loader
The main directories are:
src/: model implementations, data generators, and UCI data-loading utilities.scripts/: experiment drivers.data/: local copies of the Abalone, Auto MPG, and Wine Quality UCI data sets, plus tuned hyperparameter CSV files underdata/hyperparameters/.
The code requires Python 3.10+ and package dependencies are listed in requirements.txt. The optimization models require a working Gurobi installation and license.
Install dependencies with:
python -m pip install -r requirements.txtRun commands from the repository root. Each experiment script writes raw and summary CSV files to results/raw/ by default.
python scripts/experiment1_synthetic.py
python scripts/experiment2_normality.py
python scripts/experiment3_admm_performance.py
python scripts/experiment4_outlier_estimation.py
python scripts/experiment5_uci_outliers.py
python scripts/experiment6_blackbox_poisoning_attacks.py
python scripts/experiment7_nopt_poisoning.pyThe seven scripts are:
experiment1_synthetic.py: synthetic linear-regression experiments with response-only and feature-plus-response outliers (Table 1 and Online Appendix B.4).experiment2_normality.py: sensitivity experiments that vary the non-normal component in the synthetic data-generating process (Data for Figure 4).experiment3_admm_performance.py: ADMM performance experiments comparing ADMM-based solutions with exact MIP solutions (Online Appendix B.5).experiment4_outlier_estimation.py: outlier-size estimation experiments using Algorithm A1 (Data for Figure 5).experiment5_uci_outliers.py: UCI experiments with randomly injected outliers (Data for Figure 6).experiment6_blackbox_poisoning_attacks.py: UCI experiments under black-box poisoning attacks (Table 2 and Online Appendix B.6).experiment7_nopt_poisoning.py: UCI experiments under white-box Nopt poisoning attacks (Table 3 and Online Appendix B.6).
Some full experiment runs are computationally intensive. To verify the installation with small runs, use the scripts' command-line options. For example:
python scripts/experiment1_synthetic.py --scenario y --seed-start 0 --seed-stop 1 --n-train 20 --n-test 50
python scripts/experiment5_uci_outliers.py --datasets abalone --outlier-pcts 0.05 --seed-start 1000 --seed-stop 1001 --sample-size 30 --epoch 5 --skip-estimated-l --skip-neighborsUse python scripts/<script-name>.py --help to see all available options.
The UCI data used in the computational experiments are included under data/. See data/README.md for source citations and license information.
Please view the main paper and Supplemental Material
For questions about this repository, please contact the authors listed in AUTHORS.
