Biagio Principe
07/03/2024, 7:52 PMscaler = TemporalNorm(scaler_type='standard', dim=1)
Biagio Principe
07/03/2024, 8:03 PMJosé Morales
07/03/2024, 8:03 PMBiagio Principe
07/03/2024, 8:04 PMBiagio Principe
07/03/2024, 8:04 PMBiagio Principe
07/03/2024, 8:05 PMJosé Morales
07/03/2024, 8:17 PMBiagio Principe
07/03/2024, 8:27 PMJosé Morales
07/03/2024, 8:30 PMimport numpy as np
from coreforecast.grouped_array import GroupedArray as CoreGroupedArray
from mlforecast import MLForecast
from mlforecast.grouped_array import GroupedArray
from mlforecast.lag_transforms import RollingMean
from mlforecast.target_transforms import _BaseGroupedArrayTargetTransform
from sklearn.linear_model import LinearRegression
from utilsforecast.data import generate_series
class WindowStandardScaler(_BaseGroupedArrayTargetTransform):
def __init__(self, window_size: int):
self.window_size = window_size
def update(self, ga: GroupedArray) -> GroupedArray:
raise NotImplementedError
def take(self, idxs: np.ndarray) -> 'WindowStandardScaler':
raise NotImplementedError
def update(self, ga: GroupedArray) -> GroupedArray:
raise NotImplementedError
def fit_transform(self, ga: GroupedArray) -> GroupedArray:
rm = RollingMean(self.window_size, min_samples=1)
rm._set_core_tfm(lag=0)
core_ga = CoreGroupedArray(ga.data, ga.indptr)
scales = rm.transform(core_ga)
self.last_scales_ = CoreGroupedArray(scales, ga.indptr)._tail(1)
return GroupedArray(ga.data / scales, ga.indptr)
def inverse_transform(self, ga: GroupedArray) -> GroupedArray:
h = ga.data.size // (ga.indptr.size - 1)
scales = np.repeat(self.last_scales_, h)
return GroupedArray(ga.data * scales, ga.indptr)
series = generate_series(10, min_length=100)
fcst = MLForecast(
models=[LinearRegression()],
freq="D",
lags=[1, 2],
target_transforms=[WindowStandardScaler(window_size=7)]
)
fcst.fit(series)
fcst.predict(5)
Feel free to experiment with it and let me know how it goesJosé Morales
07/03/2024, 8:31 PMJosé Morales
07/03/2024, 8:32 PMfcst.preprocess(series)
to explore what the scaled target looks likeBiagio Principe
07/03/2024, 8:33 PMBiagio Principe
07/03/2024, 8:33 PM