Конфигурация отбора признаков
SelectionConfig задаёт метрику и пороги отбора для конвейеров
one_to_many_pipeline() и one_to_all_pipeline().
Доступны шесть метрик связи признака с целевой переменной:
- AUC;
- абсолютная корреляция Пирсона;
- абсолютная ранговая корреляция Kendall tau-b;
- абсолютная ранговая корреляция Спирмена;
- Information Value (IV);
- взаимная информация (Mutual Information).
Отбор по AUC с запасной проверкой MI
По умолчанию one_to_many_pipeline() и one_to_all_pipeline() используют
SelectionConfig.auc_with_mi_fallback(). Кандидат проходит проверку при
AUC не ниже 0.55. Если AUC ниже, проверяется взаимная информация с target;
кандидат принимается при MI не ниже 0.005 nats. Эту стратегию можно настроить
через minimum_auc и minimum_mi. MI вычисляется только после отказа по AUC.
При устранении коррелирующих признаков стратегия сравнивает их по MI. Сначала,
как обычно, учитывается число пропусков. Параметр minimum_mi следует
подбирать на валидационных данных: эмпирическая MI может быть положительной
даже без устойчивой зависимости.
Отбор только по AUC
Прежний вариант доступен явно как SelectionConfig.auc(). Он использует
порог AUC 0.5 по умолчанию и подходит для задач бинарной классификации.
minimum задаёт минимальный AUC отдельного признака.
Отбор по корреляции Пирсона
Для задач регрессии вместо AUC следует использовать абсолютную корреляцию Пирсона с целевой переменной.
minimum задаёт минимальную абсолютную корреляцию кандидата с target. Поэтому
значения -0.3 и +0.3 имеют одинаковую силу 0.3.
Отбор по корреляции Kendall tau-b
Kendall tau-b оценивает согласованность порядка значений признака и target. Метрика подходит для монотонных зависимостей и корректирует результат при совпадающих значениях признака или target.
Для каждой пары наблюдений проверяется, одинаково ли упорядочены значения признака и target. Согласованные пары увеличивают коэффициент, несогласованные уменьшают его, а поправка tau-b учитывает совпадающие ранги. При отборе используется модуль коэффициента, поэтому возрастающая и убывающая монотонные зависимости равной силы получают одинаковую оценку.
Отбор по корреляции Спирмена
Корреляция Спирмена — это корреляция Пирсона между рангами исходных значений. Она обнаруживает монотонную зависимость, даже если та не является линейной.
Совпадающим значениям назначаются усреднённые ранги. Как и для Kendall,
сравнение с minimum выполняется по модулю коэффициента.
Для Пирсона, Kendall и Спирмена нечисловые значения преобразуются в пропуски, а пропуски и бесконечности исключаются попарно. Если после очистки данных недостаточно либо признак или target постоянны, метрика не вычисляется и кандидат не проходит соответствующий фильтр.
Отбор по Information Value
Information Value измеряет, насколько по распределению признака различаются два класса бинарного target. Если у числового признака не больше 10 уникальных значений, каждое значение образует отдельный bin; иначе используются 10 квантильных bins. Для каждого bin вычисляется Weight of Evidence:
WoEᵢ = ln(pᵢ(event) / pᵢ(non-event));IV = Σᵢ (pᵢ(event) − pᵢ(non-event)) × WoEᵢ.
К частотам каждого класса добавляется сглаживание 0.5, поэтому отсутствие
одного из классов в отдельном bin не приводит к бесконечному результату.
Пропуски и бесконечности исключаются. IV не ограничен сверху, поэтому
minimum может быть больше 1. Если target не
бинарный либо признак постоянный, метрика не вычисляется.
Отбор по взаимной информации
Взаимная информация измеряет статистическую зависимость числового признака и дискретного target, включая нелинейные и немонотонные связи. Если у признака не больше 10 уникальных значений, каждое значение образует отдельный bin; иначе используются 10 квантильных bins. Затем метрика вычисляется по совместному распределению bins и классов target:
MI(X, Y) = Σₓ,ᵧ p(x, y) × ln(p(x, y) / (p(x) × p(y))).
Результат выражается в nats, всегда неотрицателен и не нормирован к диапазону
[0, 1]: 0 означает отсутствие обнаруженной зависимости, а более высокие
значения — более сильную зависимость. Поэтому
minimum может быть больше 1, например для
target с большим числом классов. Пропуски и бесконечности признака
объединяются в отдельный bin. Строки без target исключаются. Если после
разбиения признак или target постоянны, метрика не вычисляется.
Как передать конфигурацию в pipeline
Создайте конфигурацию нужной метрики и передайте её в аргумент
selection.
Доступные варианты:
from featminer import SelectionConfig, one_to_many_pipeline
auc_selection = SelectionConfig.auc(minimum=0.50)
pearson_selection = SelectionConfig.pearson(minimum=0.10)
kendall_selection = SelectionConfig.kendall(minimum=0.10)
spearman_selection = SelectionConfig.spearman(minimum=0.10)
iv_selection = SelectionConfig.information_value(minimum=0.10)
mi_selection = SelectionConfig.mutual_information(minimum=0.10)
auc_mi_selection = SelectionConfig.auc_with_mi_fallback(
minimum_auc=0.55,
minimum_mi=0.005,
)
features = one_to_many_pipeline(
df=events,
aggregation_key="client_id",
target_col="target",
selection=pearson_selection,
)
В этом примере pipeline отбирает признаки по абсолютной корреляции Пирсона.
Чтобы использовать другую метрику, передайте в
selection одну из остальных
конфигураций. Если аргумент selection
не указывать, применяется AUC с запасной проверкой MI.
Одномерная сила и дублирование признаков
Не путайте параметры конфигурации:
minimumопределяет минимальную предсказательную силу отдельного признака;feature_correlation_thresholdопределяет, когда два признака считаются дублирующими друг друга.max_null_fractionзадаёт максимально допустимую долю пропусков;max_mode_fractionзадаёт максимально допустимую долю самого частого непустого значения.
Политика устранения дубликатов
NullsFirstRedundancy используется по умолчанию. Для явного эксперимента с
приоритетом предсказательной силы перед покрытием доступна
QualityFirstRedundancy. Практическое описание и пример приведены в разделе
Отбор признаков.
Программный интерфейс
featminer.selection.config.SelectionConfig
Bases: BaseSelectionConfig
auc
classmethod
auc(
*,
minimum: float = 0.5,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig
auc_with_mi_fallback
classmethod
auc_with_mi_fallback(
*,
minimum_auc: float = 0.55,
minimum_mi: float = 0.005,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
minimum_common_fraction: float = 0.5,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig
pearson
classmethod
pearson(
*,
minimum: float,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig
kendall
classmethod
kendall(
*,
minimum: float,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig
spearman
classmethod
spearman(
*,
minimum: float,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig
information_value
classmethod
information_value(
*,
minimum: float,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig
mutual_information
classmethod
mutual_information(
*,
minimum: float = 1.3,
feature_correlation_threshold: float = 0.7,
max_null_fraction: float = 0.5,
max_mode_fraction: float = 0.95,
comparison_population: ComparisonPopulation = ComparisonPopulation.INDIVIDUAL_VALID,
redundancy: RedundancyPolicy | None = None,
) -> SelectionConfig