Custom Interpretation and Analysis#

Back to custom extensions

Use these hooks after models, features, or forecasts already exist. They do not refit models, rebuild features, or change predictions.

custom_interpretation#

mf.interpretation.custom_interpretation(
    model,
    X,
    func,
    *,
    y=None,
    name=None,
    **params,
) -> pandas.DataFrame

Callable Signature#

func(model, X, *, y=None, metadata=None, **params)

Accepted return types are DataFrame, Series, mapping, or a sequence that can be converted to a DataFrame. The output table receives attrs["macroforecast_metadata_schema"]["kind"] == "custom_interpretation".

custom_feature_diagnostic#

mf.feature_analysis.custom_feature_diagnostic(
    features,
    func,
    *,
    name=None,
    **params,
) -> pandas.DataFrame

Callable Signature#

func(X, *, feature_metadata=None, metadata=None, **params)

Use this for feature-matrix checks: missingness by block, custom stability statistics, custom factor summaries, or project-local data-quality flags.

custom_forecast_diagnostic#

mf.forecast_analysis.custom_forecast_diagnostic(
    forecasts,
    func,
    *,
    name=None,
    **params,
) -> pandas.DataFrame

Callable Signature#

func(forecasts, *, metadata=None, **params)

Use this for forecast-output checks: horizon bias, model-level summary tables, origin-level errors, custom stability summaries, or project-local reporting tables.

Example#

feature_diag = mf.feature_analysis.custom_feature_diagnostic(
    feature_set,
    lambda X, **_: {"n_features": X.shape[1], "missing_cells": int(X.isna().sum().sum())},
    name="shape_check",
)

forecast_diag = mf.forecast_analysis.custom_forecast_diagnostic(
    result,
    lambda forecasts, **_: forecasts.groupby("model", as_index=False)["prediction"].mean(),
    name="mean_prediction_by_model",
)

Output Flow#

mf.output.write_artifacts(
    {
        "custom_feature_diagnostic": feature_diag,
        "custom_forecast_diagnostic": forecast_diag,
    },
    "results/custom_diagnostics",
)