custom_features#
Use custom feature functions when a transformation belongs after preprocessing and before model fitting. The output must be a numeric feature matrix aligned to the input date index.
Direct Function#
mf.feature_engineering.custom_features(
data,
func,
*,
columns=None,
name=None,
prefix=None,
**params,
) -> pandas.DataFrame
Callable Signature#
func(source: pandas.DataFrame, *, metadata: dict, **params)
Accepted Return Types#
Return type |
Requirement |
|---|---|
|
Same date index or same row count as |
|
Same date index or same row count as |
1-D array-like |
Length equals |
2-D array-like |
Row count equals |
The returned feature table receives attrs["macroforecast_metadata_schema"]
and attrs["macroforecast_metadata"].
Runner-Safe Step#
mf.feature_engineering.custom_step(
name,
func=None,
*,
fit_func=None,
transform_func=None,
columns=None,
requires_target=False,
prefix=None,
**params,
) -> dict
Stateless Step#
def square_feature(source, *, metadata=None, suffix="sq"):
column = source.columns[0]
return pandas.DataFrame(
{f"{column}_{suffix}": source[column] ** 2},
index=source.index,
)
features = mf.feature_engineering.feature_spec(
target="target",
horizon=1,
predictors=["x", "z"],
steps=[
mf.feature_engineering.custom_step(
"x_square",
square_feature,
columns=["x"],
),
],
)
Fitted Step#
features = mf.feature_engineering.feature_spec(
target="target",
horizon=1,
predictors="all",
steps=[
mf.feature_engineering.custom_step(
"my_factor",
fit_func=my_factor_fit,
transform_func=my_factor_transform,
columns=["PAYEMS", "UNRATE", "HOUST"],
requires_target=True,
prefix="myf",
n_components=2,
),
],
)
Callable |
Contract |
|---|---|
|
|
|
|
fitted state object |
|
state-aware |
|
Set requires_target=True only when the feature fit step needs the resolved
target. Transform-time code should not use future target values.
Flow#
feature_set = features.fit_transform(processed.panel)
fit = mf.models.ridge(feature_set.X.dropna(), feature_set.y.iloc[:, 0].dropna())