skfolio.optimization.BaseOptimization#
- class skfolio.optimization.BaseOptimization(portfolio_params=None, fallback=None, previous_weights=None, raise_on_failure=True)[source]#
Base class for all portfolio optimizations in skfolio.
- Parameters:
- portfolio_paramsdict, optional
Portfolio parameters forwarded to the resulting
Portfolio
inpredict
. If not provided and if available on the estimator, the following attributes are propagated to the portfolio by default:name
,transaction_costs
,management_fees
,previous_weights
andrisk_free_rate
.- fallbackBaseOptimization | “previous_weights” | list[BaseOptimization | “previous_weights”], optional
Fallback estimator or a list of estimators to try, in order, when the primary optimization raises during
fit
. Alternatively, use"previous_weights"
(alone or in a list) to fall back to the estimator’sprevious_weights
. When a fallback succeeds, its fittedweights_
are copied back to the primary estimator so thatfit
still returns the original instance. For traceability,fallback_
stores the successful estimator (or the string"previous_weights"
)and
fallback_chain_
stores each attempt with the associated outcome.- previous_weightsfloat | dict[str, float] | array-like of shape (n_assets,), optional
Previous asset weights. Some estimators use this to compute costs or turnover. Additionally, when
fallback="previous_weights"
, failures will fall back to these weights if provided.- raise_on_failurebool, default=True
Controls error handling when fitting fails. If True, any failure during
fit
is raised immediately, noweights_
are set and subsequent calls topredict
will raise aNotFittedError
. If False, errors are not raised; instead, a warning is emitted,weights_
is set toNone
and subsequent calls topredict
will return aFailedPortfolio
. When fallbacks are specified, this behavior applies only after all fallbacks have been exhausted.
- Attributes:
- weights_ndarray of shape (n_assets,) or (n_optimizations, n_assets)
Weights of the assets.
- n_features_in_int
Number of assets seen during
fit
.- feature_names_in_ndarray of shape (
n_features_in_
,) Names of assets seen during
fit
. Defined only whenX
has assets names that are all strings.- fallback_BaseOptimization | “previous_weights” | None
The fallback estimator instance, or the string
"previous_weights"
, that produced the final result.None
if no fallback was used.- fallback_chain_list[tuple[str, str]] | None
Sequence describing the optimization fallback attempts. Each element is a pair
(estimator_repr, outcome)
whereestimator_repr
is the string representation of the primary estimator or a fallback (e.g."EqualWeighted()"
,"previous_weights"
), andoutcome
is"success"
if that step produced a valid solution, otherwise the stringified error message. For successful fits without any fallback, this isNone
.- error_str | list[str] | None
Captured error message(s) when
fit
fails. For multi-portfolio outputs (weights_
is 2D), this is a list aligned with portfolios.
Methods
fit_predict
(X)Perform
fit
onX
and returns the predictedPortfolio
orPopulation
ofPortfolio
onX
based on the fittedweights
.Get metadata routing of this object.
get_params
([deep])Get parameters for this estimator.
predict
(X)Predict the
Portfolio
or aPopulation
of portfolios onX
.score
(X[, y])Prediction score using the Sharpe Ratio.
set_params
(**params)Set the parameters of this estimator.
fit
Notes
All estimators should specify all parameters as explicit keyword arguments in
__init__
(no*args
or**kwargs
), following scikit-learn conventions.- fit_predict(X)[source]#
Perform
fit
onX
and returns the predictedPortfolio
orPopulation
ofPortfolio
onX
based on the fittedweights
. For factor models, usefit(X, y)
thenpredict(X)
separately.If fitting fails and
raise_on_failure=False
, this returns aFailedPortfolio
.- Parameters:
- Xarray-like of shape (n_observations, n_assets)
Price returns of the assets.
- Returns:
- Portfolio | Population
The predicted
Portfolio
orPopulation
based on the fittedweights
.
- 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.
- property needs_previous_weights#
Whether
previous_weights
must be propagated between folds/rebalances.Used by
cross_val_predict
to decide whether to run sequentially and pass the weights from the previous rebalancing to the next. This isTrue
when transaction costs, a maximum turnover, or a fallback depending onprevious_weights
are present.
- predict(X)[source]#
Predict the
Portfolio
or aPopulation
of portfolios onX
.Optimization estimators can return a 1D or a 2D array of
weights
. For a 1D array, the prediction is a singlePortfolio
. For a 2D array, the prediction is aPopulation
ofPortfolio
.If
name
is not provided in the portfolio parameters, the estimator class name is used.- Parameters:
- Xarray-like of shape (n_observations, n_assets) | ReturnDistribution
Asset returns or a
ReturnDistribution
carrying returns and optional sample weights.
- Returns:
- Portfolio | Population
The predicted
Portfolio
orPopulation
based on the fittedweights
.
- score(X, y=None)[source]#
Prediction score using the Sharpe Ratio. If the prediction is a single
Portfolio
, the score is its Sharpe Ratio. If the prediction is aPopulation
, the score is the mean Sharpe Ratio across portfolios.- Parameters:
- Xarray-like of shape (n_observations, n_assets)
Price returns of the assets.
- yIgnored
Not used, present here for API consistency by convention.
- Returns:
- scorefloat
The Sharpe Ratio of the portfolio if the prediction is a single
Portfolio
or the mean of all the portfolios Sharpe Ratios if the prediction is aPopulation
ofPortfolio
.
- 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.