skfolio 0.9.0__tar.gz → 0.9.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {skfolio-0.9.0/src/skfolio.egg-info → skfolio-0.9.1}/PKG-INFO +1 -1
- {skfolio-0.9.0 → skfolio-0.9.1}/pyproject.toml +1 -1
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/convex/_maximum_diversification.py +0 -3
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/convex/_mean_risk.py +10 -2
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_non_expiring.py +1 -1
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/utils/equations.py +1 -1
- {skfolio-0.9.0 → skfolio-0.9.1/src/skfolio.egg-info}/PKG-INFO +1 -1
- {skfolio-0.9.0 → skfolio-0.9.1}/LICENSE +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/MANIFEST.in +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/README.rst +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/setup.cfg +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/cluster/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/cluster/_hierarchical.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/datasets/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/datasets/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/datasets/data/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/datasets/data/factors_dataset.csv.gz +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/datasets/data/sp500_dataset.csv.gz +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/datasets/data/sp500_index.csv.gz +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distance/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distance/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distance/_distance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_clayton.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_gaussian.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_gumbel.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_independent.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_joe.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_selection.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_student_t.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/copula/_utils.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/_utils.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/multivariate/_vine_copula.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_gaussian.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_johnson_su.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_normal_inverse_gaussian.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_selection.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_student_t.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/exceptions.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/measures/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/measures/_enums.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/measures/_measures.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/metrics/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/metrics/_scorer.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/model_selection/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/model_selection/_combinatorial.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/model_selection/_validation.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/model_selection/_walk_forward.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_denoise_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_detone_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_empirical_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_ew_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_gerber_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_graphical_lasso_cv.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_implied_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_ledoit_wolf.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_oas.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/covariance/_shrunk_covariance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_empirical_mu.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_equilibrium_mu.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_ew_mu.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/moments/expected_returns/_shrunk_mu.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/cluster/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/cluster/_nco.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/_herc.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/cluster/hierarchical/_hrp.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/convex/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/convex/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/convex/_distributionally_robust.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/convex/_risk_budgeting.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/ensemble/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/ensemble/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/ensemble/_stacking.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/naive/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/optimization/naive/_naive.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/population/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/population/_population.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/portfolio/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/portfolio/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/portfolio/_multi_period_portfolio.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/portfolio/_portfolio.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/_drop_correlated.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/_drop_zero_variance.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_complete.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_k_extremes.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/pre_selection/_select_non_dominated.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/preprocessing/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/preprocessing/_returns.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/prior/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/prior/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/prior/_black_litterman.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/prior/_empirical.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/prior/_factor_model.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/prior/_synthetic_data.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/synthetic_returns/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/typing.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/uncertainty_set/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/uncertainty_set/_base.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/uncertainty_set/_bootstrap.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/uncertainty_set/_empirical.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/utils/__init__.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/utils/bootstrap.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/utils/sorting.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/utils/stats.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/utils/tools.py +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio.egg-info/SOURCES.txt +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio.egg-info/dependency_links.txt +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio.egg-info/requires.txt +0 -0
- {skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: skfolio
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.1
|
4
4
|
Summary: Portfolio optimization built on top of scikit-learn
|
5
5
|
Author-email: Hugo Delatte <delatte.hugo@gmail.com>
|
6
6
|
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
|
@@ -256,9 +256,6 @@ class MaximumDiversification(MeanRisk):
|
|
256
256
|
min_return : float | array-like of shape (n_optimization), optional
|
257
257
|
Lower bound constraint on the expected return.
|
258
258
|
|
259
|
-
min_return : float | array-like of shape (n_optimization), optional
|
260
|
-
Lower bound constraint on the expected return.
|
261
|
-
|
262
259
|
add_objective : Callable[[cp.Variable], cp.Expression], optional
|
263
260
|
Add a custom objective to the existing objective expression.
|
264
261
|
It is a function that must take as argument the weights `w` and returns a
|
@@ -902,7 +902,7 @@ class MeanRisk(ConvexOptimization):
|
|
902
902
|
)
|
903
903
|
constraints += [
|
904
904
|
tracking_error * self._scale_constraints
|
905
|
-
<= self.max_tracking_error * self._scale_constraints
|
905
|
+
<= self.max_tracking_error * factor * self._scale_constraints
|
906
906
|
]
|
907
907
|
|
908
908
|
# Turnover
|
@@ -1036,6 +1036,15 @@ class MeanRisk(ConvexOptimization):
|
|
1036
1036
|
+ custom_objective * self._scale_objective
|
1037
1037
|
)
|
1038
1038
|
case ObjectiveFunction.MAXIMIZE_RATIO:
|
1039
|
+
# Capture common obvious mistake before solver failure to help user
|
1040
|
+
if np.isscalar(self.min_weights) and self.min_weights >= 0:
|
1041
|
+
if np.max(prior_model.mu) - self.risk_free_rate <= 0:
|
1042
|
+
raise ValueError(
|
1043
|
+
"Cannot optimize for Maximum Ratio with your current "
|
1044
|
+
"constraints and input. This is because your assets' "
|
1045
|
+
"expected returns are all under-performing your risk-free "
|
1046
|
+
f"rate {self.risk_free_rate:.2%}."
|
1047
|
+
)
|
1039
1048
|
homogenization_factor = _optimal_homogenization_factor(
|
1040
1049
|
mu=prior_model.mu
|
1041
1050
|
)
|
@@ -1060,7 +1069,6 @@ class MeanRisk(ConvexOptimization):
|
|
1060
1069
|
# Fractional Programming Problems".
|
1061
1070
|
# The condition to work is f1 >= 0, so we need to raise an user
|
1062
1071
|
# warning when it's not the case.
|
1063
|
-
# TODO: raise user warning when f1<0
|
1064
1072
|
|
1065
1073
|
constraints += [
|
1066
1074
|
expected_return * self._scale_constraints
|
@@ -123,7 +123,7 @@ class SelectNonExpiring(skf.SelectorMixin, skb.BaseEstimator):
|
|
123
123
|
)
|
124
124
|
|
125
125
|
if self.expiration_dates is None:
|
126
|
-
raise ValueError("`
|
126
|
+
raise ValueError("`expiration_dates` must be provided")
|
127
127
|
|
128
128
|
if self.expiration_lookahead is None:
|
129
129
|
raise ValueError("`expiration_lookahead` must be provided")
|
@@ -276,7 +276,7 @@ def _matching_array(values: np.ndarray, key: str, sum_to_one: bool) -> np.ndarra
|
|
276
276
|
if not arr.any():
|
277
277
|
raise EquationToMatrixError(f"Unable to find '{key}' in '{values}'")
|
278
278
|
if sum_to_one:
|
279
|
-
s =
|
279
|
+
s = arr.sum()
|
280
280
|
else:
|
281
281
|
s = 1
|
282
282
|
return arr / s
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: skfolio
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.1
|
4
4
|
Summary: Portfolio optimization built on top of scikit-learn
|
5
5
|
Author-email: Hugo Delatte <delatte.hugo@gmail.com>
|
6
6
|
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{skfolio-0.9.0 → skfolio-0.9.1}/src/skfolio/distribution/univariate/_normal_inverse_gaussian.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|