skfolio.uncertainty_set.EmpiricalCovarianceUncertaintySet#

class skfolio.uncertainty_set.EmpiricalCovarianceUncertaintySet(prior_estimator=None, confidence_level=0.95, diagonal=True)[source]#

Empirical Covariance Uncertainty set.

Compute the covariance ellipsoidal uncertainty set [1]:

\[U_{\Sigma}=\left\{\Sigma\,|\left(\text{vec}(\Sigma)-\text{vec}(\hat{\Sigma})\right)S^{-1}\left(\text{vec}(\Sigma)-\text{vec}(\hat{\Sigma})\right)^{T}\leq k^{2}\,,\,\Sigma\succeq 0\right\}\]

We consider the Wishart distribution for the covariance matrix:

\[\hat{\Sigma}\sim W(\frac{1}{T-1}\Sigma, T-1)\]

The size of the ellipsoid \(\kappa\) (confidence region), is computed using:

\[\kappa^2 = \chi^2_{n\_assets^2} (\beta)\]

with \(\chi^2_{n\_assets^2}(\beta)\) the inverse cumulative distribution function of the chi-squared distribution with n_assets degrees of freedom at the \(\beta\) confidence level.

The Shape of the ellipsoid \(S\) is based on a closed form solution of the covariance matrix of the Wishart distributed random variable by using the vector notation \(vec(x)\):

\[Cov[vec(\hat{\Sigma})]=\frac{1}{T-1}(I_{n^2} + K_{nn})(\Sigma \otimes \Sigma)\]

with \(K_{nn}\) denoting a commutation matrix and \(\otimes\) representing the Kronecker product.

Parameters:
prior_estimatorBasePrior, optional

The prior estimator used to estimate the assets covariance matrix. The default (None) is to use EmpiricalPrior.

confidence_levelfloat , default=0.95

Confidence level \(\beta\) of the inverse cumulative distribution function of the chi-squared distribution. The default value is 0.95.

diagonalbool, default=True

If this is set to True, the non-diagonal elements of the covariance matrix are set to zero.

Attributes:
uncertainty_set_UncertaintySet

Covariance Uncertainty set UncertaintySet.

prior_estimator_BasePrior

Fitted prior_estimator.

References

[1]

“Robustness properties of mean-variance portfolios”, Optimization: A Journal of Mathematical Programming and Operations Research, Schöttle & Werner (2009).

Methods

fit(X[, y])

Fit the Empirical Covariance Uncertainty set estimator.

get_metadata_routing()

Get metadata routing of this object.

get_params([deep])

Get parameters for this estimator.

set_params(**params)

Set the parameters of this estimator.

fit(X, y=None, **fit_params)[source]#

Fit the Empirical Covariance Uncertainty set estimator.

Parameters:
Xarray-like of shape (n_observations, n_assets)

Price returns of the assets.

yarray-like of shape (n_observations, n_factors), optional

Price returns of factors. The default is None.

**fit_paramsdict

Parameters to pass to the underlying estimators. Only available if enable_metadata_routing=True, which can be set by using sklearn.set_config(enable_metadata_routing=True). See Metadata Routing User Guide for more details.

Returns:
selfEmpiricalCovarianceUncertaintySet

Fitted estimator.

get_metadata_routing()#

Get metadata routing of this object.

Please check User Guide on how the routing mechanism works.

Returns:
routingMetadataRequest

A MetadataRequest encapsulating routing information.

get_params(deep=True)#

Get parameters for this estimator.

Parameters:
deepbool, default=True

If True, will return the parameters for this estimator and contained subobjects that are estimators.

Returns:
paramsdict

Parameter names mapped to their values.

set_params(**params)#

Set the parameters of this estimator.

The method works on simple estimators as well as on nested objects (such as Pipeline). The latter have parameters of the form <component>__<parameter> so that it’s possible to update each component of a nested object.

Parameters:
**paramsdict

Estimator parameters.

Returns:
selfestimator instance

Estimator instance.