Implementations
Three maintained libraries. They differ in setting, not in quality.
Use skfolio when the universe and covariance are fixed (backtests, batch rebalancing). Use allocation when assets arrive, leave, and update one observation at a time. Use precise when what you need is the covariance machinery itself — online estimators and the Schur pseudo-likelihood for scoring them.
skfolio — batch, fixed universe
The scikit-learn-ecosystem portfolio library ships a SchurComplementary
optimizer. Pipelines, cross-validation, and model selection come for free from the sklearn
idiom. Described in Nicolini, Manzi & Delatte (2025),
arXiv:2507.04176.
- Install:
pip install skfolio - Repository: github.com/skfolio/skfolio
- Start here: the Schur Complementary tutorial
allocation — streaming, changing universe
Online Schur allocation for universes that evolve: assets are ordered by Fiedler
seriation (a smooth function of the covariance, so partial_fit stays
low-turnover), covariance is maintained incrementally, and names can enter or leave without a
refit.
- Install:
pip install allocation - Repository: github.com/microprediction/allocation
- Documentation: allocation.microprediction.org
precise — online covariance and the Schur pseudo-likelihood
The estimation layer underneath: sklearn-style online covariance and correlation
estimators behind one partial_fit contract (the online complement of
sklearn.covariance), including Schur covariance estimators with the γ
dial, and assessors — among them the Schur pseudo-likelihood, which scores covariance
estimates reliably in the undersampled regime where the plain held-out likelihood fails.
- Install:
pip install precise - Repository: github.com/microprediction/precise
- Documentation: precise.microprediction.org