About

../_images/logo.png

dro is a python package that implements typical DRO methods on linear loss (SVM, logistic regression, and linear regression) for supervised learning tasks. It is built based on the convex optimization solver cvxpy. The dro package supports different kinds of distance metrics \(d(\cdot,\cdot)\) as well as different kinds of base models (e.g., linear regression, logistic regression, SVM, tree-ensembles, neural networks…). Furthermore, it integrates different synthetic data generating mechanisms from recent research papers.

Without specified, our DRO model is to solve the following optimization problem:

\[\min_{\theta} \max_{P: P \in U} E_{(X,Y) \sim P}[\ell(\theta;(X, Y))],\]

where \(U\) is the so-called ambiguity set and typically of the form \(U = \{P: d(P, \hat P_n) \leq \epsilon\}\) and \(\hat P_n := \frac{1}{n}\sum_{i = 1}^n \delta_{(X_i, Y_i)}\) is the empirical distribution of training samples \(\{(X_i, Y_i)\}_{i = 1}^n\). And \(\epsilon\) is the hyperparameter.

As for the latest v0.2.2 version, dro supports:

(1) Synthetic data generation

Synthetic Data Generation Modules

Python Module

Function Name

Description

dro.src.data.dataloader_classification

classification_basic

Basic classification task

classification_DN21

Following Section 3.1.1 of “Learning Models with Uniform Performance via Distributionally Robust Optimization”

classification_SNVD20

Following Section 5.1 of “Certifying Some Distributional Robustness with Principled Adversarial Training”

classification_LWLC

Following Section 4.1 (Classification) of “Distributionally Robust Optimization with Data Geometry”

dro.src.data.dataloader_regression

regression_basic

Basic regression task

regression_DN20_1

Following Section 3.1.2 of “Learning Models with Uniform Performance via Distributionally Robust Optimization”

regression_DN20_2

Following Section 3.1.3 of “Learning Models with Uniform Performance via Distributionally Robust Optimization”

regression_DN20_3

Following Section 3.3 of “Learning Models with Uniform Performance via Distributionally Robust Optimization”

regression_LWLC

Following Section 4.1 (Regression) of “Distributionally Robust Optimization with Data Geometry”

(2) Linear DRO models

Linear DRO Models

Python Module

Class Name

Description

dro.src.linear_dro.base

BaseLinearDRO

Base class for linear DRO methods

dro.src.linear_dro.chi2_dro

Chi2DRO

Linear chi-square divergence-based DRO

dro.src.linear_dro.kl_dro

KLDRO

Kullback-Leibler divergence-based DRO

dro.src.linear_dro.cvar_dro

CVaRDRO

CVaR DRO

dro.src.linear_dro.tv_dro

TVDRO

Total Variation DRO

dro.src.linear_dro.marginal_dro

MarginalCVaRDRO

Marginal-X CVaR DRO

dro.src.linear_dro.mmd_dro

MMD_DRO

Maximum Mean Discrepancy DRO

dro.src.linear_dro.conditional_dro

ConditionalCVaRDRO

Y|X (ConditionalShiftBased) CVaR DRO

dro.src.linear_dro.hr_dro

HR_DRO_LR

Holistic Robust DRO on linear models

dro.src.linear_dro.wasserstein_dro

WassersteinDRO

Wasserstein DRO

WassersteinDROsatisficing

Robust satisficing version of Wasserstein DRO

dro.src.linear_dro.sinkhorn_dro

SinkhornLinearDRO

Sinkhorn DRO on linear models

dro.src.linear_dro.mot_dro

MOTDRO

Optimal Transport DRO with Conditional Moment Constraints

dro.src.linear_dro.or_wasserstein_dro

ORWDRO

Outlier-Robust Wasserstein DRO

(3) NN DRO models

Neural Network DRO Models

Python Module

Class Name

Description

dro.src.neural_model.base_nn

BaseNNDRO

Base model for neural-network-based DRO

dro.src.neural_model.fdro_nn

Chi2NNDRO

Chi-square Divergence-based Neural DRO Model

dro.src.neural_model.wdro_nn

WNNDRO

Wasserstein Neural DRO with Adversarial Robustness

dro.src.neural_model.hrdro_nn

HRNNDRO

Holistic Robust NN DRO

(4) Tree-Ensembles DRO models

Tree-Ensembles DRO Models

Python Module

Class Name

Description

dro.src.tree_model.xgb

KLDRO_XGB

KL-DRO for XGBoost

dro.src.tree_model.xgb

CVaRDRO_XGB

CVaR-DRO for XGBoost

dro.src.tree_model.lgbm

KLDRO_LGBM

KL-DRO for Light GBM

dro.src.tree_model.lgbm

CVaRDRO_LGBM

CVaR-DRO for Light GBM