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

TimeSinceFirstMaximum

TimeSinceFirstMaximum()

Время от первого максимума до опорного времени.

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

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

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

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=(TimeSinceFirstMaximum(),),
)

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

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

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

client_id age_days amount
0 1 30 100
1 1 20 300
2 1 10 100
3 1 0 300

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

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

extreme — максимальное значение клиента; matches — все строки с этим значением. Из повторений выбирается самое раннее событие. Результат — абсолютное расстояние до момента прогноза в днях.

extreme = df.groupby("client_id")["amount"].transform("max")
matches = df.loc[df["amount"].eq(extreme)]
result = matches.groupby("client_id")["age_days"].max().abs()

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