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
Portfolioinpredict. Unless set in this dictionary,transaction_costs,management_fees,previous_weightsandrisk_free_rateare forwarded from the optimizer when available, andnamedefaults to the optimizer class name. For example,portfolio_params={"weight_drift": True}evaluates the predicted portfolios with drifted weights instead of the target weights on every observation.- 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 thatfitstill returns the original instance. For traceability,fallback_stores the successful estimator (or the string"previous_weights") andfallback_chain_stores each attempt with the associated outcome. Withpartial_fit, only None or"previous_weights"is supported because fallback estimators have not accumulated the primary model’s online history. See Fallbacks.- previous_weightsfloat | dict[str, float] | array-like of shape (n_assets,), optional
Previous asset weights. Some portfolio optimizers 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 and no fallback succeeds. If True, the estimator raises the final error. If False, the estimator emits a warning and sets
weights_to None, so subsequent calls topredictreturn aFailedPortfolio. Duringfit,raise_on_failureapplies to any fitting error, including errors raised by the prior estimator. Duringpartial_fit,raise_on_failureapplies only to optimization failures after learning completes. Input validation failures and errors from the prior or other learning estimators are always raised. See Failure Handling for batch recovery and Updates and Failure Handling for online continuation and restart rules.
- 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 whenXhas 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.Noneif 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_repris the string representation of the primary estimator or a fallback (e.g."EqualWeighted()","previous_weights"), andoutcomeis"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] | None
For a single portfolio, this is the recorded error message, or None after a successful allocation or fallback. For multiple portfolios, it is a list with one entry per row of
weights_, containing an error message for each failed portfolio and None for each successful portfolio.
Methods
fit(X[, y])Fit the optimization estimator.
fit_predict(X)Perform
fitonXand returns the predictedPortfolioorPopulationofPortfolioonXbased on the fittedweights.Get metadata routing of this object.
get_params([deep])Get parameters for this estimator.
predict(X)Predict the
Portfolioor aPopulationof portfolios onX.score(X[, y])Prediction score using the Sharpe Ratio.
set_params(**params)Set the parameters of this estimator.
Notes
All estimators should specify all parameters as explicit keyword arguments in
__init__(no*argsor**kwargs), following scikit-learn conventions.- abstractmethod fit(X, y=None)[source]#
Fit the optimization estimator.
- Parameters:
- Xarray-like of shape (n_observations, n_assets)
Price returns of the assets.
- yarray-like of shape (n_observations, n_targets), optional
Price returns of factors or a target benchmark. The default is
None.
- Returns:
- selfBaseOptimization
Fitted estimator.
- fit_predict(X)[source]#
Perform
fitonXand returns the predictedPortfolioorPopulationofPortfolioonXbased on the fittedweights. For factor models, usefit(X, factors=...)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
PortfolioorPopulationbased 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
MetadataRequestencapsulating 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_weightsmust be propagated between folds/rebalances.Used by
cross_val_predictandonline_predictto decide whether to run sequentially and pass the weights from the previous rebalancing to the next. This isTruewhenportfolio_paramssetsweight_drift=True, or when transaction costs, a maximum turnover, or a fallback depending onprevious_weightsare present.
- predict(X)[source]#
Predict the
Portfolioor aPopulationof 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 aPopulationofPortfolio.If
nameis 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
ReturnDistributioncarrying returns and optional sample weights.
- Returns:
- Portfolio | Population
The predicted
PortfolioorPopulationbased 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
Portfolioor the mean of all the portfolio Sharpe Ratios if the prediction is aPopulationofPortfolio.
- 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.