Перейти к содержанию

FirstCategory

FirstCategory()

Проверяет, совпадает ли первое непустое значение категории с выбранной категорией.

Использование

transactions — обучающая таблица событий с бинарным target, одинаковым внутри каждого клиента.

from featminer import RelativeTime, one_to_many_pipeline
from featminer.formulas import FirstCategory

features = one_to_many_pipeline(
    df=transactions,
    aggregation_key="client_id",
    target_col="target",
    event_times=("age_days",),
    relative_time_columns=(
        RelativeTime("age_days", unit="day", ascending=False),
    ),
    formulas=(FirstCategory(),),
)

FirstCategory() задаёт проверку категории в первом событии; pipeline перебирает подходящие категории. features содержит признаки, прошедшие отбор по таргету. age_days — возраст события в днях; меньший возраст означает более позднее событие (ascending=False).

Пример результата

Таблица событий df: client_id — ключ объекта, age_days — возраст события в днях относительно момента прогноза (0 — этот момент). Расчёт без дополнительной фильтрации строк. status — статус платежа.

client_id age_days status
0 1 30 None
1 1 20 paid
2 1 10 failed
3 1 0 failed

Значение этого кандидата по клиентам:

FirstCategory
client_id
1 1
Эквивалентный расчёт на pandas

ordered — события от старых к новым. Пропущенные значения пропускаются. category — проверяемая категория; positioned — первое непустое значение. Результат — 1 при совпадении, 0 при несовпадении, NaN, если непустых значений нет.

ordered = df.sort_values("age_days", ascending=False)
category = "paid"
positioned = ordered.groupby("client_id")["status"].first()
result = positioned.eq(category).astype(float).where(positioned.notna())

Каталог формул.