cs_winsorize

Defined in fynance.features.cross_section

cs_winsorize(X, alpha=0.05)[source]

Per-bar cross-sectional winsorization, NaN-aware.

Clips each bar’s valid entries to their own [alpha, 1 - alpha] empirical quantiles (linear interpolation, see numpy.nanquantile).

Parameters:
Xarray_like

Panel, shape (T, N).

alphafloat, optional

Tail probability clipped on each side, must be in [0, 0.5). Default 0.05 (5% / 95%).

Returns:
np.ndarray

(T, N) winsorized panel, NaN where X is NaN.

See also

cs_rank, cs_zscore

Examples

>>> import numpy as np
>>> X = np.array([[1., 2., 3., 4., 100.]])
>>> cs_winsorize(X, alpha=0.2)
array([[ 1.8,  2. ,  3. ,  4. , 23.2]])

NaN-aware: the missing asset is excluded from the bar’s quantiles and stays NaN:

>>> cs_winsorize(np.array([[1., np.nan, 3., 100.]]), alpha=0.25)
array([[ 2. ,  nan,  3. , 51.5]])