skfolio.linear_model.BaseCSLinearModel#

class skfolio.linear_model.BaseCSLinearModel(fit_intercept=False)[source]#

Base class for all cross-sectional linear model estimators.

This abstract base class defines the common interface for cross-sectional linear model estimators that fit one linear model per observation across a set of assets. Subclasses are responsible for implementing fit and for setting the fitted attributes used by predict and score.

Parameters:
fit_interceptbool, default=False

Whether to calculate the intercept for each observation. If set to False, no intercept will be used in calculations.

Attributes:
coef_ndarray of shape (n_observations, n_features)

Estimated coefficients for each observation.

intercept_ndarray of shape (n_observations,)

intercept for each observation. Set to zeros if fit_intercept=False.

n_features_in_int

Number of features seen during fit.

n_valid_assets_ndarray of shape (n_observations,)

Number of assets that participated in estimation (those with positive weight) for each observation.

Methods

fit(X, y[, cs_weights])

Fit one cross-sectional linear model per observation.

get_metadata_routing()

Get metadata routing of this object.

get_params([deep])

Get parameters for this estimator.

predict(X)

Predict using the cross-sectional linear model.

score(X, y[, cs_weights])

Return the mean coefficient of determination across observations.

set_fit_request(*[, cs_weights])

Configure whether metadata should be requested to be passed to the fit method.

set_params(**params)

Set the parameters of this estimator.

set_score_request(*[, cs_weights])

Configure whether metadata should be requested to be passed to the score method.

abstractmethod fit(X, y, cs_weights=None)[source]#

Fit one cross-sectional linear model per observation.

Parameters:
Xarray-like of shape (n_observations, n_assets, n_features)

Feature tensor. The first axis indexes observations, the second axis indexes assets, and the third axis indexes features.

yarray-like of shape (n_observations, n_assets)

Target values aligned with X.

cs_weightsarray-like of shape (n_observations, n_assets), optional

Cross-sectional weights for each (observation, asset) pair.

Returns:
selfBaseCSLinearModel

Fitted estimator.

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.

predict(X)[source]#

Predict using the cross-sectional linear model.

For each observation \(t\) and asset \(i\), the prediction is the systematic part; realized outcomes satisfy \(y_{ti} = \hat{y}_{ti} + \epsilon_{ti}\) with residual \(\epsilon_{ti}\). The prediction is

\[\hat{y}_{ti} = X_{ti}^{T} \beta_t + \beta_{t,0}\]
Parameters:
Xarray-like of shape (n_observations, n_assets, n_features)

Feature tensor used for prediction. The observation and feature axes must match those seen during fit. The asset axis may differ.

Returns:
y_predndarray of shape (n_observations, n_assets)

Predicted values.

score(X, y, cs_weights=None)[source]#

Return the mean coefficient of determination across observations.

The coefficient of determination \(R^2\) is computed independently for each observation and then averaged. For observation \(t\):

\[R^2_t = 1 - \frac{\sum_i w_{ti}(y_{ti} - \hat{y}_{ti})^2} {\sum_i w_{ti}(y_{ti} - \bar{y}_t)^2}\]

where \(\bar{y}_t\) is the weighted mean of \(y\) for observation \(t\).

Parameters:
Xarray-like of shape (n_observations, n_assets, n_features)

Feature tensor on which to evaluate the model.

yarray-like of shape (n_observations, n_assets)

Target values aligned with X.

cs_weightsarray-like of shape (n_observations, n_assets), optional

Asset weights for computing weighted \(R^2\) scores. If None, all assets are given equal weight. Pairs with zero weight are excluded from the score. Pairs with positive weight must have finite X and finite y.

Returns:
scorefloat

Mean \(R^2\) across all observations with finite values. Returns NaN if no observations have valid \(R^2\) values.

set_fit_request(*, cs_weights='$UNCHANGED$')#

Configure whether metadata should be requested to be passed to the fit method.

Note that this method is only relevant when this estimator is used as a sub-estimator within a meta-estimator and metadata routing is enabled with enable_metadata_routing=True (see sklearn.set_config). Please check the User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to fit.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Parameters:
cs_weightsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for cs_weights parameter in fit.

Returns:
selfobject

The updated object.

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.

set_score_request(*, cs_weights='$UNCHANGED$')#

Configure whether metadata should be requested to be passed to the score method.

Note that this method is only relevant when this estimator is used as a sub-estimator within a meta-estimator and metadata routing is enabled with enable_metadata_routing=True (see sklearn.set_config). Please check the User Guide on how the routing mechanism works.

The options for each parameter are:

  • True: metadata is requested, and passed to score if provided. The request is ignored if metadata is not provided.

  • False: metadata is not requested and the meta-estimator will not pass it to score.

  • None: metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str: metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default (sklearn.utils.metadata_routing.UNCHANGED) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Parameters:
cs_weightsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for cs_weights parameter in score.

Returns:
selfobject

The updated object.