Miro Lavi
10/25/2024, 6:41 PMJosé Morales
10/25/2024, 6:54 PMfrom mlforecast import MLForecast
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from utilsforecast.data import generate_series
from utilsforecast.feature_engineering import fourier
class FeatureInteraction(BaseEstimator, TransformerMixin):
def __init__(self, lag, exog):
self.lag = lag
self.exog = exog
def fit(self, X, y):
return self
def transform(self, X):
X = X.copy(deep=False)
X['my_interaction'] = X[self.lag] * X[self.exog]
return X
freq = 'D'
h = 5
series = generate_series(2, freq=freq)
train, future = fourier(series, freq=freq, season_length=7, k=2, h=h)
model = make_pipeline(
FeatureInteraction(lag='lag1', exog='sin1_7'),
LinearRegression(),
)
mlf = MLForecast(
models=[model],
freq=freq,
lags=[1, 2, 3],
)
You can then see what that looks like with preprocess + fit_transform
X, y = mlf.preprocess(train, static_features=[], return_X_y=True)
model[:1].fit_transform(X, y)
And once you're comfortable you can just use fit + predict
mlf.fit(train, static_features=[])
mlf.predict(h=h, X_df=future)
Miro Lavi
10/25/2024, 7:20 PMJosé Morales
10/25/2024, 7:53 PMMiro Lavi
10/25/2024, 8:00 PM