# skfolio

Portfolio optimisation as scikit-learn estimators — fit, predict, cross-validate.

*https://stockmarketstack.com/tools/skfolio · Market Analysis & Portfolio Optimization Libraries*

## Facts

### At a glance

| Field | Value |
| --- | --- |
| Vendor | skfolio |
| Category | Market Analysis & Portfolio Optimization Libraries |
| Job | optimization |
| Website | https://skfolio.org |
| Pricing model | open-source |
| Free tier | true |
| Open source | true |
| Licence | BSD-3-Clause |
| Self-hosted | true |
| Tested hands-on | false |
| Last updated | 2026-09-19 |

### Pricing

| Tier | USD | Period |
| --- | --- | --- |
| Enterprise support | on request | — |

### Coverage

| Field | Value |
| --- | --- |
| Asset classes | stocks, etf, bonds, commodities |
| Markets | global |
| Works outside the US | true |
| Data latency | none |
| Platforms | library |
| AI features | none |

### Interfaces

| Field | Value |
| --- | --- |
| API | false |
| Webhooks | false |
| Scripting | Python |
| Python | true |
| Spreadsheet add-in | false |
| MCP server | false |
| Export | none |

### Capabilities

Yes: backtesting

No: charting, screening, scanning, automation, live_trading, paper_trading, portfolio_tracking, broker_import, tax_reporting, alerts, news, options_analysis

*Verified: pricing 2026-09-19; capabilities 2026-09-19; coverage 2026-09-19.*

## What it is

skfolio is portfolio optimisation written as scikit-learn estimators. An optimiser is an object
with `fit` and `predict`; a covariance estimator, a pre-selection transformer and an optimiser
compose into a `Pipeline`; `GridSearchCV` tunes the risk aversion the same way it would tune a
regularisation parameter. If you already think in scikit-learn, there is almost nothing new to
learn, and the payoff is that model selection stops being hand-rolled loops.

The catalogue behind that API is large. Mean-risk optimisation over about twenty risk measures,
risk budgeting, maximum diversification, distributionally robust CVaR, hierarchical risk parity and
hierarchical equal risk contribution, nested clustered optimisation, and stacking one optimiser on
top of another. The prior estimators are where it goes further than its neighbours — Black-Litterman,
factor models, entropy pooling, opinion pooling, and synthetic-data priors built from vine copulas,
which is what the stress-test and scenario tooling runs on. Around them sit shrinkage and denoising
covariance estimators, uncertainty sets, cross-sectional transformers and pre-selection steps.

The model-selection half is the part a reader coming from a backtesting page should notice.
`WalkForward` refits the whole pipeline on a rolling window; combinatorial purged cross-validation
gives a distribution of out-of-sample paths rather than one; `Population` and `Portfolio` objects
then report turnover, drawdowns, ratios and costs. That is a rebalancing study, not an order
simulator — there is no fill model anywhere in it.

The project is young and moves fast. First release December 2023, 73 releases since, 28 of them in
2026, the latest 1.2.8 on 16 September 2026, cut by an automated semantic-release bot. Not
archived; 24 open issues and 21 open pull requests.

## Pricing

Free, BSD 3-Clause, with nothing withheld — the pip package is the whole library. Skfolio Labs, the
company the lead maintainer works for, sells enterprise support, SLAs, bespoke development and
roadmap access; no price is published and the site offers a demo request instead. Read that as a
support contract rather than an open core — there is no paid build and no feature behind a key.

## Data & coverage

Three sample datasets ship inside the wheel as gzipped CSVs — S&P 500 constituent prices, the S&P
500 index and a factor set — and a further few (FTSE 100, Nasdaq, S&P 500 implied volatility) are
downloaded on first use from the project's own dataset repository and cached locally. None of it is
a feed. Real work means bringing your own prices, and the asset classes and markets are whatever you
bring.

## Integrations

scikit-learn 1.6 or newer is the backbone, so `Pipeline`, `GridSearchCV`, `RandomizedSearchCV` and
the rest work directly. The optimisation runs on `cvxpy-base` with Clarabel, a deliberately slim
install that skips the solvers cvxpy would otherwise pull; plotly draws the figures. The
documentation follows the llms.txt convention and serves a Markdown twin of every page, which makes
it one of the few libraries here that an agent can read without scraping HTML. Python 3.10 or newer.

## Limitations

- No market data, no orders, no broker. It optimises and evaluates; sourcing and executing are
  somebody else's job.
- Cardinality, threshold and group-cardinality constraints need a mixed-integer solver that is not
  installed by default. The library raises a clear error naming SCIP as the open-source option, but
  it is an extra install and a slower solve.
- The scikit-learn shape is a real cost if you do not already carry it. Expected returns and weights
  arrive as estimator attributes rather than DataFrames, and the errors are scikit-learn's errors.
- Twenty-eight releases in nine months means the surface is still moving. Pin the version in
  anything you intend to reproduce.
- The commercial relationship is worth knowing even though it buys no features — the lead maintainer
  is employed by the company selling support, and enterprise pricing is unpublished.

## Alternatives

[PyPortfolioOpt](https://stockmarketstack.com/tools/pyportfolioopt) is the smaller, plainer library for classical mean-variance
work. [Riskfolio-Lib](https://stockmarketstack.com/tools/riskfolio-lib) has the broader risk-measure catalogue and the heavier
dependency tree to match. [Portfolio Optimizer](https://stockmarketstack.com/tools/portfolio-optimizer) answers the same
questions over HTTP with no install at all, and for testing a rebalancing rule with trades rather
than weights, [bt](https://stockmarketstack.com/tools/bt) and the rest of the
[backtesting frameworks](https://stockmarketstack.com/categories/backtesting-frameworks) are the right shelf.

## FAQ

### Is skfolio actively maintained?

Unusually so. Version 1.2.8 shipped on 16 September 2026 and was the twenty-eighth release of the year; the project has published 73 releases since its first in December 2023, tagging is automated through a semantic-release bot, and the repository is not archived. 24 issues and 21 pull requests were open on 19 September 2026.

### Does skfolio backtest a strategy?

It backtests an allocation, not a trade. WalkForward and combinatorial purged cross-validation refit the optimiser on a rolling window and score the out-of-sample portfolios, with transaction costs and management fees as model parameters. There are no orders, no fills and no intrabar anything — for that you want a backtesting framework.

### Do I need to buy a solver?

Not for the usual work. Clarabel installs with the package and handles the convex problems. Cardinality, threshold and group-cardinality constraints need a mixed-integer solver, and skfolio's own error message points at SCIP, which is open source and installs through cvxpy; MOSEK, GUROBI and CPLEX are the commercial options.

### Who is behind skfolio, and is any of it paid?

The library is BSD 3-Clause and complete as published. It is led by Hugo Delatte with Matteo Manzi and Carlo Nicolini as maintainers, and backed by Skfolio Labs, which sells enterprise support and SLAs to institutions at prices it does not publish.

## Also worth comparing

- [PyPortfolioOpt](https://stockmarketstack.com/tools/pyportfolioopt.md) — Prices in, weights out — efficient frontier, Black-Litterman and HRP.
- [Riskfolio-Lib](https://stockmarketstack.com/tools/riskfolio-lib.md) — Twenty-six convex risk measures, four objectives, one cvxpy-backed optimiser.
- [Portfolio Optimizer](https://stockmarketstack.com/tools/portfolio-optimizer.md) — 248 portfolio maths endpoints over HTTP — no install, no solver, no account.
- [arch](https://stockmarketstack.com/tools/arch.md) — GARCH and the rest of the volatility-model family, plus the tests you need around them.
- [empyrical-reloaded](https://stockmarketstack.com/tools/empyrical-reloaded.md) — The maintained fork of Quantopian's empyrical — risk statistics, no plots.
- [ffn](https://stockmarketstack.com/tools/ffn.md) — Performance stats, drawdowns and portfolio weights from a DataFrame of prices.
