skfolio.descriptor.ChangeToScale#
- class skfolio.descriptor.ChangeToScale(field, scale_field, lag)[source]#
Lagged change normalized by a positive scale.
Computes the change in
fieldover a fixed lag, divided by the current value ofscale_field:\[\text{ChangeToScale}_\ell(t) = \frac{A(t) - A(t - \ell)}{S(t)}\]where \(A\) is the
fieldvalue and \(S\) is thescale_fieldvalue.The first
lagobservations are NaN because no lagged history is available.This descriptor is appropriate when the numerator field can be negative or cross zero, such as earnings, capex or cash flows, and the change should be scaled by the firm’s current size or valuation. NaNs are allowed as missing observations and propagate when the current, lagged or scale value is missing.
Non-missing numerator values must be finite. Non-missing scale values must be finite and strictly positive. A
ValueErroris raised otherwise.- Parameters:
- fieldstr
Field name in the
AssetPanelto compute the change for. Non-missing values must be finite.- scale_fieldstr
Field name in the
AssetPanelused as the current positive denominator. Non-missing values must be finite and strictly positive.- lagint
Number of observations to look back. The interpretation depends on the data frequency:
lag=12means 1 year for monthly data,lag=252for daily data,lag=4for quarterly data.
- Attributes:
- n_assets_int
Number of assets seen during fitting.
- asset_names_ndarray of shape (n_assets,)
Asset names seen during fitting.
- change_to_scale_ndarray of shape (n_assets,)
Last change-to-scale value for each asset.
Methods
fit_transform(X[, y])Compute changes in level normalized by current scale.
Get metadata routing of this object.
get_params([deep])Get parameters for this estimator.
partial_fit_transform(X[, y])Compute changes in level normalized by current scale.
set_params(**params)Set the parameters of this estimator.
See also
ChangeInIntensityChange in the ratio \(A/S\) (intensity change).
GrowthRateSimple growth rate for positive-definite characteristics.
Examples
>>> from skfolio.descriptor import ChangeToScale >>> >>> # Earnings change to price (equivalent to EarningsChangeToPrice) >>> earnings_chg = ChangeToScale("net_income_ttm", "market_cap", lag=12) >>> >>> # Capex change to total assets >>> capex_chg = ChangeToScale("capex_ttm", "total_assets", lag=12)
- fit_transform(X, y=None, **fit_params)[source]#
Compute changes in level normalized by current scale.
- Parameters:
- XAssetPanel
Input panel containing the
fieldandscale_fieldcharacteristics configured at construction.- yNone
Ignored. Present for compatibility with scikit-learn’s API.
- **fit_paramsdict
Additional fit parameters. Ignored.
- Returns:
- change_to_scalendarray of shape (n_observations, n_assets)
Change in
fieldover the lag window, divided by currentscale_fieldfor each observation and asset.
- 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.
- partial_fit_transform(X, y=None, **fit_params)[source]#
Compute changes in level normalized by current scale.
This method supports online updates by continuing from the current fitted state. Use
fit_transformto start from a clean state.- Parameters:
- XAssetPanel
Input panel containing the
fieldandscale_fieldfields configured at construction.- yNone
Ignored. Present for compatibility with scikit-learn’s API.
- **fit_paramsdict
Additional fit parameters. Ignored.
- Returns:
- change_to_scalendarray of shape (n_observations, n_assets)
Change in
fieldover the lag window, divided by currentscale_fieldfor each observation and asset.
- 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.