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

Защита от утечки из будущего

FeatMiner может исключить строки, которые ещё не были доступны на момент построения прогноза. Для этого one_to_many_pipeline() использует три параметра с разными ролями:

  • event_times — временные оси для time-aware формул;
  • prediction_time — момент, на который строится прогноз;
  • cutoff_by — временная ось, определяющая доступность строки.

При заданном prediction_time pipeline оставляет только строки, для которых значение cutoff_by не позже момента прогноза:

cutoff_by <= prediction_time

Для RelativeTime с обратным направлением времени сравнение также разворачивается.

Плановые даты из будущего

Проверка применяется только к cutoff_by, а не ко всем event_times. Будущая дата сама по себе не является утечкой, если она уже была известна на момент прогноза. Например, плановая дата платежа или закрытия кредита может находиться в будущем и при этом быть корректным входом модели.

from featminer import one_to_many_pipeline

features = one_to_many_pipeline(
    df=credits,
    aggregation_key="client_id",
    target_col="target",
    event_times=(
        "payment_date",
        "planned_payment_date",
        "record_created_at",
    ),
    prediction_time="application_date",
    cutoff_by="record_created_at",
)

В этом примере строка проходит фильтрацию по правилу record_created_at <= application_date. Значение planned_payment_date может быть позже application_date: оно описывает известный план, а не момент доступности строки.

Выбор cutoff_by

Если в event_times передана одна колонка, она автоматически используется как cutoff_by. При нескольких временных осях cutoff_by нужно указать явно.

Выбирайте колонку, которая показывает, когда вся строка стала доступна системе: дату создания записи, получения отчёта или фиксации события. Если плановые значения позднее пересчитывались, для защиты от утечки нужна дата доступности конкретной версии записи.

Полная сигнатура параметров приведена в API one_to_many_pipeline.