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

EwaFraction

EwaFraction(*, half_life_days: int)

Экспоненциально взвешенная доля событий с выбранным условием.

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

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

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

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=(EwaFraction(half_life_days=30),),
)

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

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

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

client_id age_days status
0 1 60 paid
1 1 30 failed
2 1 0 paid

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

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

history — события не позднее момента прогноза; w — вес события, weighted_sum — сумма значений с этими весами. За half_life_days дней вес уменьшается вдвое; в примере веса равны 0.25, 0.5, 1. flag — индикатор условия status = 'paid' (1 при выполнении, иначе 0).

half_life_days = 30
history = df.loc[df["age_days"].ge(0)]
w = 0.5 ** (history["age_days"] / half_life_days)
flag = history["status"].eq("paid").fillna(False)
weighted_sum = (flag.astype(int) * w).groupby(history["client_id"]).sum()
result = weighted_sum / w.groupby(history["client_id"]).sum()

Параметры

Параметр Описание
half_life_days Период полураспада, положительное целое число дней. Обязательный.
Стандартные значения 1, 7, 30, 90, 365 дней.

Обязательные параметры не имеют значения по умолчанию; стандартные значения используются в готовых наборах.

Условия генерируются автоматически: min_category_fraction=0.01 отсеивает редкие категории и условия по доле строк во всей таблице; derived_columns.max_condition_columns=1 ограничивает число колонок в условии. Подробнее об условиях.

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