Пример сгенерированного кода
Пример Python-кода, экспортированного featminer для воспроизведения отобранных признаков на датасете Home Credit Default Risk и последующего обучения CatBoost.
import pandas as pd
from catboost import CatBoostClassifier
from sklearn.metrics import roc_auc_score
from sklearn.model_selection import train_test_split
DATASET_PATH = "path/to/dataset.parquet"
OUTPUT_PATH = "path/to/features.parquet"
df = pd.read_parquet(DATASET_PATH)
features = df.groupby("SK_ID_CURR")["TARGET"].max().to_frame("TARGET")
features["credit_active__closed__fraction"] = (
(df["CREDIT_ACTIVE"] == "Closed")
.groupby(df["SK_ID_CURR"])
.mean()
)
features[
"credit_active__active__credit_type__consumer_credit__fraction_3b00388f"
] = (
(
(df["CREDIT_ACTIVE"] == "Active")
& (df["CREDIT_TYPE"] == "Consumer credit")
)
.groupby(df["SK_ID_CURR"])
.mean()
)
features[
"credit_active__active__credit_type__credit_card__fraction_6037a9ac"
] = (
(
(df["CREDIT_ACTIVE"] == "Active")
& (df["CREDIT_TYPE"] == "Credit card")
)
.groupby(df["SK_ID_CURR"])
.mean()
)
features["credit_active__active__count"] = (
(df["CREDIT_ACTIVE"] == "Active")
.groupby(df["SK_ID_CURR"])
.sum()
)
features[
"days_credit_enddate__credit_type__consumer_credit__max_99cfc7c9"
] = (
df["DAYS_CREDIT_ENDDATE"][df["CREDIT_TYPE"] == "Consumer credit"]
.groupby(df["SK_ID_CURR"])
.max()
)
features["days_credit__max"] = (
df["DAYS_CREDIT"]
.groupby(df["SK_ID_CURR"])
.max()
)
features[
"days_credit_update__credit_type__consumer_credit__max_e0df8a57"
] = (
df["DAYS_CREDIT_UPDATE"][df["CREDIT_TYPE"] == "Consumer credit"]
.groupby(df["SK_ID_CURR"])
.max()
)
features[
"days_credit_update__credit_type__credit_card__max_2d1a15b2"
] = (
df["DAYS_CREDIT_UPDATE"][df["CREDIT_TYPE"] == "Credit card"]
.groupby(df["SK_ID_CURR"])
.max()
)
features["days_credit_enddate__sum"] = (
df["DAYS_CREDIT_ENDDATE"]
.groupby(df["SK_ID_CURR"])
.sum()
)
features["days_enddate_fact__sum"] = (
df["DAYS_ENDDATE_FACT"]
.groupby(df["SK_ID_CURR"])
.sum()
)
features["amt_credit_sum_debt__sum"] = (
df["AMT_CREDIT_SUM_DEBT"]
.groupby(df["SK_ID_CURR"])
.sum()
)
features[
"amt_credit_sum_debt__credit_type__credit_card__sum_00e9a147"
] = (
df["AMT_CREDIT_SUM_DEBT"][df["CREDIT_TYPE"] == "Credit card"]
.groupby(df["SK_ID_CURR"])
.sum()
)
features["amt_credit_sum_debt__mean"] = (
df["AMT_CREDIT_SUM_DEBT"]
.groupby(df["SK_ID_CURR"])
.mean()
)
features[
"amt_credit_sum_debt__credit_type__consumer_credit__mean_24a83e39"
] = (
df["AMT_CREDIT_SUM_DEBT"][df["CREDIT_TYPE"] == "Consumer credit"]
.groupby(df["SK_ID_CURR"])
.mean()
)
features["days_credit__mean"] = (
df["DAYS_CREDIT"]
.groupby(df["SK_ID_CURR"])
.mean()
)
features["days_credit__credit_active__active__mean"] = (
df["DAYS_CREDIT"][df["CREDIT_ACTIVE"] == "Active"]
.groupby(df["SK_ID_CURR"])
.mean()
)
features[
"days_credit__credit_type__consumer_credit__mean_9e4167de"
] = (
df["DAYS_CREDIT"][df["CREDIT_TYPE"] == "Consumer credit"]
.groupby(df["SK_ID_CURR"])
.mean()
)
features[
"days_credit__credit_type__credit_card__mean_e03b83de"
] = (
df["DAYS_CREDIT"][df["CREDIT_TYPE"] == "Credit card"]
.groupby(df["SK_ID_CURR"])
.mean()
)
features["days_credit_enddate__min"] = (
df["DAYS_CREDIT_ENDDATE"]
.groupby(df["SK_ID_CURR"])
.min()
)
features[
"days_credit_enddate__credit_type__credit_card__min_9827bf25"
] = (
df["DAYS_CREDIT_ENDDATE"][df["CREDIT_TYPE"] == "Credit card"]
.groupby(df["SK_ID_CURR"])
.min()
)
features["amt_credit_sum__credit_active__active__min"] = (
df["AMT_CREDIT_SUM"][df["CREDIT_ACTIVE"] == "Active"]
.groupby(df["SK_ID_CURR"])
.min()
)
features[
"amt_credit_sum_debt__credit_type__credit_card__min_328ec1af"
] = (
df["AMT_CREDIT_SUM_DEBT"][df["CREDIT_TYPE"] == "Credit card"]
.groupby(df["SK_ID_CURR"])
.min()
)
features["days_credit_update__min"] = (
df["DAYS_CREDIT_UPDATE"]
.groupby(df["SK_ID_CURR"])
.min()
)
features["days_credit_update__credit_active__closed__min"] = (
df["DAYS_CREDIT_UPDATE"][df["CREDIT_ACTIVE"] == "Closed"]
.groupby(df["SK_ID_CURR"])
.min()
)
features[
"days_credit_update__credit_type__consumer_credit__min_d115248d"
] = (
df["DAYS_CREDIT_UPDATE"][df["CREDIT_TYPE"] == "Consumer credit"]
.groupby(df["SK_ID_CURR"])
.min()
)
features["days_credit__std"] = (
df["DAYS_CREDIT"]
.groupby(df["SK_ID_CURR"])
.std()
)
target = features.pop("TARGET")
X_train, X_valid, y_train, y_valid = train_test_split(
features,
target,
test_size=0.2,
random_state=42,
stratify=target,
)
model = CatBoostClassifier(
iterations=500,
eval_metric="AUC",
random_seed=42,
verbose=False,
)
model.fit(
X_train,
y_train,
eval_set=(X_valid, y_valid),
early_stopping_rounds=50,
)
valid_probability = model.predict_proba(X_valid)[:, 1]
print(f"Validation ROC AUC: {roc_auc_score(y_valid, valid_probability):.6f}")
features.to_parquet(OUTPUT_PATH, index=True)
print(
f"Saved {len(features)} rows, "
f"{len(features.columns)} features to {OUTPUT_PATH}"
)