skfolio 0.10.1__tar.gz → 0.10.2__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.10.1/src/skfolio.egg-info → skfolio-0.10.2}/PKG-INFO +42 -12
- {skfolio-0.10.1 → skfolio-0.10.2}/README.rst +40 -10
- {skfolio-0.10.1 → skfolio-0.10.2}/pyproject.toml +3 -2
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_empirical.py +1 -0
- {skfolio-0.10.1 → skfolio-0.10.2/src/skfolio.egg-info}/PKG-INFO +42 -12
- {skfolio-0.10.1 → skfolio-0.10.2}/LICENSE +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/MANIFEST.in +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/setup.cfg +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/cluster/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/cluster/_hierarchical.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/factors_dataset.csv.gz +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/sp500_dataset.csv.gz +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/datasets/data/sp500_index.csv.gz +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distance/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distance/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distance/_distance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_clayton.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_gaussian.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_gumbel.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_independent.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_joe.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_selection.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_student_t.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/copula/_utils.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/_utils.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/multivariate/_vine_copula.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_gaussian.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_johnson_su.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_normal_inverse_gaussian.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_selection.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/distribution/univariate/_student_t.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/exceptions.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/measures/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/measures/_enums.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/measures/_measures.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/metrics/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/metrics/_scorer.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/_combinatorial.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/_validation.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/model_selection/_walk_forward.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_denoise_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_detone_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_empirical_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_ew_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_gerber_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_graphical_lasso_cv.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_implied_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_ledoit_wolf.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_oas.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/covariance/_shrunk_covariance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_empirical_mu.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_equilibrium_mu.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_ew_mu.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/moments/expected_returns/_shrunk_mu.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/_nco.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/_herc.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/cluster/hierarchical/_hrp.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_distributionally_robust.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_maximum_diversification.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_mean_risk.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_risk_budgeting.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/ensemble/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/ensemble/_stacking.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/naive/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/naive/_naive.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/population/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/population/_population.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/_multi_period_portfolio.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/portfolio/_portfolio.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_drop_correlated.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_drop_zero_variance.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_complete.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_k_extremes.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_non_dominated.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/pre_selection/_select_non_expiring.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/preprocessing/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/preprocessing/_returns.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_black_litterman.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_entropy_pooling.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_factor_model.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_opinion_pooling.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/prior/_synthetic_data.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/typing.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/_base.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/_bootstrap.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/uncertainty_set/_empirical.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/__init__.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/bootstrap.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/composition.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/equations.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/figure.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/sorting.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/stats.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/utils/tools.py +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/SOURCES.txt +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/dependency_links.txt +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/requires.txt +0 -0
- {skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio.egg-info/top_level.txt +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: skfolio
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.2
|
4
4
|
Summary: Portfolio optimization built on top of scikit-learn
|
5
5
|
Author-email: Hugo Delatte <delatte.hugo@gmail.com>
|
6
|
-
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
|
6
|
+
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>, Carlo Nicolini <c.nicolini@ipazia.com>
|
7
7
|
License: BSD 3-Clause License
|
8
8
|
|
9
9
|
Copyright (c) 2007-2023 The skfolio developers.
|
@@ -176,7 +176,6 @@ Installation
|
|
176
176
|
pip install -U skfolio
|
177
177
|
|
178
178
|
|
179
|
-
|
180
179
|
Dependencies
|
181
180
|
~~~~~~~~~~~~
|
182
181
|
|
@@ -192,6 +191,23 @@ Dependencies
|
|
192
191
|
- joblib (>= |JoblibMinVersion|)
|
193
192
|
- plotly (>= |PlotlyMinVersion|)
|
194
193
|
|
194
|
+
Docker
|
195
|
+
~~~~~~
|
196
|
+
|
197
|
+
You can also spin up a reproducible JupyterLab environment using Docker:
|
198
|
+
|
199
|
+
Build the image::
|
200
|
+
|
201
|
+
docker build -t skfolio-jupyterlab .
|
202
|
+
|
203
|
+
Run the container::
|
204
|
+
|
205
|
+
docker run -p 8888:8888 -v <path-to-your-folder-containing-data>:/app/data -it skfolio-jupyterlab
|
206
|
+
|
207
|
+
Browse:
|
208
|
+
|
209
|
+
Open localhost:8888/lab and start using `skfolio`
|
210
|
+
|
195
211
|
Key Concepts
|
196
212
|
~~~~~~~~~~~~
|
197
213
|
Since the development of modern portfolio theory by Markowitz (1952), mean-variance
|
@@ -800,7 +816,7 @@ Recognition
|
|
800
816
|
~~~~~~~~~~~
|
801
817
|
|
802
818
|
We would like to thank all contributors to our direct dependencies, such as
|
803
|
-
scikit-learn and cvxpy, as well as the contributors of the following resources that
|
819
|
+
`scikit-learn <https://github.com/scikit-learn/scikit-learn>`_ and `cvxpy <https://github.com/cvxpy/cvxpy>`_, as well as the contributors of the following resources that
|
804
820
|
served as sources of inspiration:
|
805
821
|
|
806
822
|
* PyPortfolioOpt
|
@@ -809,6 +825,7 @@ served as sources of inspiration:
|
|
809
825
|
* microprediction
|
810
826
|
* statsmodels
|
811
827
|
* rsome
|
828
|
+
* danielppalomar.com
|
812
829
|
* gautier.marti.ai
|
813
830
|
|
814
831
|
|
@@ -817,12 +834,25 @@ Citation
|
|
817
834
|
|
818
835
|
If you use `skfolio` in a scientific publication, we would appreciate citations:
|
819
836
|
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
837
|
+
**The library**::
|
838
|
+
|
839
|
+
@software{skfolio,
|
840
|
+
title = {skfolio},
|
841
|
+
author = {Delatte, Hugo and Nicolini, Carlo and Manzi, Matteo},
|
842
|
+
year = {2024},
|
843
|
+
doi = {TBD after next release},
|
844
|
+
url = {https://github.com/skfolio/skfolio}
|
845
|
+
}
|
846
|
+
|
847
|
+
**The paper**::
|
848
|
+
|
849
|
+
@article{nicolini2025skfolio,
|
850
|
+
title = {skfolio: Portfolio Optimization in Python},
|
851
|
+
author = {Nicolini, Carlo and Manzi, Matteo and Delatte, Hugo},
|
852
|
+
journal = {arXiv preprint arXiv:2507.04176},
|
853
|
+
year = {2025},
|
854
|
+
eprint = {2507.04176},
|
855
|
+
archivePrefix = {arXiv},
|
856
|
+
url = {https://arxiv.org/abs/2507.04176}
|
857
|
+
}
|
828
858
|
|
@@ -84,7 +84,6 @@ Installation
|
|
84
84
|
pip install -U skfolio
|
85
85
|
|
86
86
|
|
87
|
-
|
88
87
|
Dependencies
|
89
88
|
~~~~~~~~~~~~
|
90
89
|
|
@@ -100,6 +99,23 @@ Dependencies
|
|
100
99
|
- joblib (>= |JoblibMinVersion|)
|
101
100
|
- plotly (>= |PlotlyMinVersion|)
|
102
101
|
|
102
|
+
Docker
|
103
|
+
~~~~~~
|
104
|
+
|
105
|
+
You can also spin up a reproducible JupyterLab environment using Docker:
|
106
|
+
|
107
|
+
Build the image::
|
108
|
+
|
109
|
+
docker build -t skfolio-jupyterlab .
|
110
|
+
|
111
|
+
Run the container::
|
112
|
+
|
113
|
+
docker run -p 8888:8888 -v <path-to-your-folder-containing-data>:/app/data -it skfolio-jupyterlab
|
114
|
+
|
115
|
+
Browse:
|
116
|
+
|
117
|
+
Open localhost:8888/lab and start using `skfolio`
|
118
|
+
|
103
119
|
Key Concepts
|
104
120
|
~~~~~~~~~~~~
|
105
121
|
Since the development of modern portfolio theory by Markowitz (1952), mean-variance
|
@@ -708,7 +724,7 @@ Recognition
|
|
708
724
|
~~~~~~~~~~~
|
709
725
|
|
710
726
|
We would like to thank all contributors to our direct dependencies, such as
|
711
|
-
scikit-learn and cvxpy, as well as the contributors of the following resources that
|
727
|
+
`scikit-learn <https://github.com/scikit-learn/scikit-learn>`_ and `cvxpy <https://github.com/cvxpy/cvxpy>`_, as well as the contributors of the following resources that
|
712
728
|
served as sources of inspiration:
|
713
729
|
|
714
730
|
* PyPortfolioOpt
|
@@ -717,6 +733,7 @@ served as sources of inspiration:
|
|
717
733
|
* microprediction
|
718
734
|
* statsmodels
|
719
735
|
* rsome
|
736
|
+
* danielppalomar.com
|
720
737
|
* gautier.marti.ai
|
721
738
|
|
722
739
|
|
@@ -725,12 +742,25 @@ Citation
|
|
725
742
|
|
726
743
|
If you use `skfolio` in a scientific publication, we would appreciate citations:
|
727
744
|
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
745
|
+
**The library**::
|
746
|
+
|
747
|
+
@software{skfolio,
|
748
|
+
title = {skfolio},
|
749
|
+
author = {Delatte, Hugo and Nicolini, Carlo and Manzi, Matteo},
|
750
|
+
year = {2024},
|
751
|
+
doi = {TBD after next release},
|
752
|
+
url = {https://github.com/skfolio/skfolio}
|
753
|
+
}
|
754
|
+
|
755
|
+
**The paper**::
|
756
|
+
|
757
|
+
@article{nicolini2025skfolio,
|
758
|
+
title = {skfolio: Portfolio Optimization in Python},
|
759
|
+
author = {Nicolini, Carlo and Manzi, Matteo and Delatte, Hugo},
|
760
|
+
journal = {arXiv preprint arXiv:2507.04176},
|
761
|
+
year = {2025},
|
762
|
+
eprint = {2507.04176},
|
763
|
+
archivePrefix = {arXiv},
|
764
|
+
url = {https://arxiv.org/abs/2507.04176}
|
765
|
+
}
|
736
766
|
|
@@ -4,10 +4,11 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "skfolio"
|
7
|
-
version = "0.10.
|
7
|
+
version = "0.10.2"
|
8
8
|
maintainers = [
|
9
9
|
{ name = "Hugo Delatte", email = "delatte.hugo@gmail.com" },
|
10
|
-
{ name = "Matteo Manzi", email = "matteomanzi09@gmail.com" }
|
10
|
+
{ name = "Matteo Manzi", email = "matteomanzi09@gmail.com" },
|
11
|
+
{ name = "Carlo Nicolini", email = "c.nicolini@ipazia.com" }
|
11
12
|
]
|
12
13
|
authors = [
|
13
14
|
{ name = "Hugo Delatte", email = "delatte.hugo@gmail.com" },
|
@@ -191,6 +191,7 @@ class EmpiricalPrior(BasePrior):
|
|
191
191
|
# horizon
|
192
192
|
mu = np.exp(mu + 0.5 * np.diag(covariance))
|
193
193
|
covariance = np.outer(mu, mu) * (np.exp(covariance) - 1)
|
194
|
+
mu -= 1
|
194
195
|
|
195
196
|
# we validate and convert to numpy after all models have been fitted to keep
|
196
197
|
# features names information.
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: skfolio
|
3
|
-
Version: 0.10.
|
3
|
+
Version: 0.10.2
|
4
4
|
Summary: Portfolio optimization built on top of scikit-learn
|
5
5
|
Author-email: Hugo Delatte <delatte.hugo@gmail.com>
|
6
|
-
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>
|
6
|
+
Maintainer-email: Hugo Delatte <delatte.hugo@gmail.com>, Matteo Manzi <matteomanzi09@gmail.com>, Carlo Nicolini <c.nicolini@ipazia.com>
|
7
7
|
License: BSD 3-Clause License
|
8
8
|
|
9
9
|
Copyright (c) 2007-2023 The skfolio developers.
|
@@ -176,7 +176,6 @@ Installation
|
|
176
176
|
pip install -U skfolio
|
177
177
|
|
178
178
|
|
179
|
-
|
180
179
|
Dependencies
|
181
180
|
~~~~~~~~~~~~
|
182
181
|
|
@@ -192,6 +191,23 @@ Dependencies
|
|
192
191
|
- joblib (>= |JoblibMinVersion|)
|
193
192
|
- plotly (>= |PlotlyMinVersion|)
|
194
193
|
|
194
|
+
Docker
|
195
|
+
~~~~~~
|
196
|
+
|
197
|
+
You can also spin up a reproducible JupyterLab environment using Docker:
|
198
|
+
|
199
|
+
Build the image::
|
200
|
+
|
201
|
+
docker build -t skfolio-jupyterlab .
|
202
|
+
|
203
|
+
Run the container::
|
204
|
+
|
205
|
+
docker run -p 8888:8888 -v <path-to-your-folder-containing-data>:/app/data -it skfolio-jupyterlab
|
206
|
+
|
207
|
+
Browse:
|
208
|
+
|
209
|
+
Open localhost:8888/lab and start using `skfolio`
|
210
|
+
|
195
211
|
Key Concepts
|
196
212
|
~~~~~~~~~~~~
|
197
213
|
Since the development of modern portfolio theory by Markowitz (1952), mean-variance
|
@@ -800,7 +816,7 @@ Recognition
|
|
800
816
|
~~~~~~~~~~~
|
801
817
|
|
802
818
|
We would like to thank all contributors to our direct dependencies, such as
|
803
|
-
scikit-learn and cvxpy, as well as the contributors of the following resources that
|
819
|
+
`scikit-learn <https://github.com/scikit-learn/scikit-learn>`_ and `cvxpy <https://github.com/cvxpy/cvxpy>`_, as well as the contributors of the following resources that
|
804
820
|
served as sources of inspiration:
|
805
821
|
|
806
822
|
* PyPortfolioOpt
|
@@ -809,6 +825,7 @@ served as sources of inspiration:
|
|
809
825
|
* microprediction
|
810
826
|
* statsmodels
|
811
827
|
* rsome
|
828
|
+
* danielppalomar.com
|
812
829
|
* gautier.marti.ai
|
813
830
|
|
814
831
|
|
@@ -817,12 +834,25 @@ Citation
|
|
817
834
|
|
818
835
|
If you use `skfolio` in a scientific publication, we would appreciate citations:
|
819
836
|
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
837
|
+
**The library**::
|
838
|
+
|
839
|
+
@software{skfolio,
|
840
|
+
title = {skfolio},
|
841
|
+
author = {Delatte, Hugo and Nicolini, Carlo and Manzi, Matteo},
|
842
|
+
year = {2024},
|
843
|
+
doi = {TBD after next release},
|
844
|
+
url = {https://github.com/skfolio/skfolio}
|
845
|
+
}
|
846
|
+
|
847
|
+
**The paper**::
|
848
|
+
|
849
|
+
@article{nicolini2025skfolio,
|
850
|
+
title = {skfolio: Portfolio Optimization in Python},
|
851
|
+
author = {Nicolini, Carlo and Manzi, Matteo and Delatte, Hugo},
|
852
|
+
journal = {arXiv preprint arXiv:2507.04176},
|
853
|
+
year = {2025},
|
854
|
+
eprint = {2507.04176},
|
855
|
+
archivePrefix = {arXiv},
|
856
|
+
url = {https://arxiv.org/abs/2507.04176}
|
857
|
+
}
|
828
858
|
|
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.10.1 → skfolio-0.10.2}/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
|
{skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_distributionally_robust.py
RENAMED
File without changes
|
{skfolio-0.10.1 → skfolio-0.10.2}/src/skfolio/optimization/convex/_maximum_diversification.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
|