Bayesian DRO¶
We discuss the DRO models based on misspecified parametric distribution assumptions.
They are often imposed in newsvendor or portfolio loss or regression with gaussian assumptions.
Frequensit¶
Bayesian¶
Bayesian-DRO.
We provide additional model type called newsvendor
loss. The default setup is as follows: \(\ell(\theta;(X, Y)) = 3 (Y - \theta)_+ + (\theta - Y)_+\). In this case, X is the unit vector. That corresponds to exponential gamma conjugate.
That is, when conducting fitting, resampling, we ignore the existence of \(X\).
[2]:
## Newsvendor Example
import numpy as np
from dro.src.linear_model.chi2_dro import *
from dro.src.linear_model.bayesian_dro import *
from dro.src.data.dataloader_regression import regression_basic
feature_dim = 1
sample_num = 1000
X = np.ones((sample_num, feature_dim))
y = np.random.exponential(2, sample_num)
reg_model = BayesianDRO(input_dim = feature_dim, model_type = 'newsvendor')
reg_model.update({'posterior_param_num': 1, 'distribution_class': 'Exponential', 'distance_type': 'KL'})
reg_model.fit(X, y)
[2]:
{'theta': [1.3816098929349603], 'b': None}
[3]:
reg_model.distance_type
[3]:
'KL'
[4]:
theta = cp.Variable(1)
b = cp.Variable(1)
eta = cp.Variable()
loss = np.sqrt(1) / np.sqrt(sample_num) * cp.norm(cp.pos(reg_model._cvx_loss(X[0], y[0], theta, b) - eta), 2) + eta
t = cp.Variable()
problem = cp.Problem(cp.Minimize(t), [t >= loss])
problem.solve(solver = 'MOSEK')
print(theta.value)
None
[5]:
## Regression Example
from dro.src.linear_model.chi2_dro import *
from dro.src.linear_model.bayesian_dro import *
from dro.src.data.dataloader_regression import regression_basic
feature_dim = 5
X, y = regression_basic(num_samples = 100, d = feature_dim, noise = 1)
reg_model = BayesianDRO(input_dim = feature_dim, model_type = 'ols')
reg_model.update({'posterior_param_num': 5, 'distance_type': 'chi2'})
reg_model.fit(X, y)
sample lool 0
sample lool 1
sample lool 2
sample lool 3
sample lool 4
[5]:
{'theta': [62.169443051525285,
97.87564003822867,
63.87624899340756,
55.84248039099289,
35.333453154516214],
'b': array(1.38349967)}