BoxCoxTransformer
Box-Cox power transform with fittable lambda parameter.
The Box-Cox transformation is a power transformation that is used to make data more normally distributed and stabilize its variance based on the hyperparameter lambda. [1]
This transformer applies the Box-Cox-transform elementwise, where the lambda parameter is fitted by the specified method via method.
The Box-Cox-transform is defined as \(y\mapsto \frac{y^{\lambda}-1}{\lambda}, \lambda \ne 0 \text{ and } ln(y), \lambda = 0\), for positive \(y\).
The \(\lambda\) parameter is fitted per time series and instance and variable, by a method depending on the method parameter:
"pearsonr"- maximization of Pearson correlation between transformed and normalized untransformed. Direct interface toscipy.stats.boxcox_normmaxwithmethod="pearsonr", withbracket=bounds, and otherwise defaults."mle"- maximization of the Box-Cox log-likelihood. Direct interface toscipy.stats.boxcox_normmaxwithmethod="mle"withbracket=bounds, and otherwise defaults."guerrero"- Guerrero’s method with seasonal periodicity, see [2]. this requires the seasonality parameter to be passed assp."fixed"- fixed, pre-specified \(\lambda\), which is passed aslambda_fixed.
If non-positive :math:y are present, they are by default replaced with their absolute values in fit. In transform, the signed Box-Cox-transform is applied, i.e., the sign is kept while the transform is applied to the value.
Direct interface to scipy boxcox, and inv_boxcox for transformation, scipy boxcox_normmax and a custom implementation of Guerrero’s method for fitting the Box-Cox lambda parameter.
Quickstart
from sktime.transformations.boxcox import BoxCoxTransformer
estimator = BoxCoxTransformer(bounds=None, method='mle', sp=None, lambda_fixed=0.0, enforce_positive=True)Parameters(5)
- bounds2-tuple of finite float
Initial bracket (lower, upper) for the optimization range when fitting the value of lambda. Default = unbounded. Ignored if
method == "fixed". For half-open bounds pass a large bound value, e.g., (0, 1e12) for positive lambda. Infinity and nan as bound values are not supported.- method{“pearsonr”, “mle”, “guerrero”, “fixed”}, default=”mle”
- The optimization approach used to determine the lambda value used in the Box-Cox transformation.
- spint, optional, must be provided (only) if method=”guerrero”
- Seasonal periodicity of the data in integer form. Only used if method=”guerrero” is chosen. Must be an integer >= 2.
- lambda_fixedfloat, optional, default = 0.0
- must be provided (only) if method=”fixed” default means that BoxCoxTransformer behaves like logarithm
- enforce_positivebool, optional, default = True
If
True`, in ``fitnegative entries ofXare replaced by their absolute values. Intransform, the transform is applied to the absolute value while the sign is kept. IfFalse, any negative values will be passed unchanged to the underlying functions (possibly causing error).
Examples
>>> from sktime.transformations.boxcox import BoxCoxTransformer
>>> from sktime.datasets import load_airline
>>> y = load_airline ()
>>> transformer = BoxCoxTransformer ()
>>> y_hat = transformer. fit_transform (y)