Сценарии использования
В featminer есть три основных pipeline. Pipeline определяет правило выбора данных для вычисления признака: взять все записи исторической таблицы, связанные с объектом по ID, все строки, предшествующие текущей по времени, или значения текущей строки. Это позволяет использовать всю информацию, доступную на момент прогноза, не заглядывая в будущее и не допуская утечки данных.
one_to_many_pipeline()— признаки, рассчитанные по всем записям исторической таблицы, относящимся к объекту по его ID. Например, сумма всех кредитов клиента — строки группируются поclient_idи вычисляется сумма кредитов;one_to_all_pipeline()— признаки, рассчитанные для каждой строки по всем строкам таблицы, которые предшествуют ей по времени. Например, сколько раз IP-адрес текущей операции встречался ранее во всей таблице, в том числе у других клиентов;one_to_one_pipeline()— признаки, рассчитанные из сочетаний значений внутри одной строки, соответствующей одному объекту. Например, отношение суммы кредита к доходу клиента. Этот pipeline рекомендуется использовать только для уже плоских таблиц.
Агрегационный датасет: one-to-many
Используйте one_to_many_pipeline(), когда одному объекту соответствует много
связанных строк: транзакции клиента, платежи по займу, заявки пользователя.
from featminer import one_to_many_pipeline
features = one_to_many_pipeline(
df=transactions,
aggregation_key="client_id",
target_col="is_bad",
cat_features=["product_code"],
)
Транзакционный датасет: one-to-all
Используйте one_to_all_pipeline(), когда каждая строка — событие, а
признаки текущей строки должны считаться по всем прошлым событиям без привязки
к ID текущей строки.
from featminer.pipelines.one_to_all import one_to_all_pipeline
features = one_to_all_pipeline(
df=transactions,
target_col="is_bad",
event_datetime="transaction_dttm",
id_col="transaction_id",
cat_features=["merchant_category"],
)
Плоский датасет: one-to-one
Используйте one_to_one_pipeline(), когда таблица уже содержит одну строку на
объект и нужно проверить парные взаимодействия числовых признаков.
Если исходная таблица имеет структуру one-to-many, не передавайте её в
one_to_one_pipeline(). Производные колонки для такой таблицы создаются самим
one_to_many_pipeline() и управляются через
DerivedColumnsConfig.
Например, DerivedColumnsConfig(differences=True, ratios=True) включает
попарные разности
(differences) и
безопасные отношения
(ratios) совместимых
исходных колонок до агрегации.
from featminer.pipelines.one_to_one import one_to_one_pipeline
target_series = one_to_one_df.pop("target")
one_to_one_df.pop("client_id")
features = one_to_one_pipeline(
features=one_to_one_df,
target_series=target_series,
operators=("+", "-", "*", "/", "max", "min"),
)
Инкрементальный режим
Если у вас уже есть признаки, передайте их в
baseline_features. Тогда
корреляционная селекция учитывает существующие признаки и не возвращает близкие
дубли.
import pandas as pd
from featminer import one_to_many_pipeline
manual_features = pd.DataFrame({
"manual_avg_amount": [120.5, 80.0, 310.2],
"manual_overdue_flag": [0, 1, 0],
}, index=[101, 102, 103])
features = one_to_many_pipeline(
df=transactions,
aggregation_key="client_id",
target_col="target",
cat_features=["product_code"],
baseline_features=manual_features,
)