Конфигурация отбора признаков
SelectionConfig задаёт метрику и пороги отбора для конвейеров
one_to_many_pipeline() и one_to_all_pipeline().
Доступны шесть метрик связи признака с целевой переменной:
- AUC;
- абсолютная корреляция Пирсона;
- абсолютная ранговая корреляция Kendall tau-b;
- абсолютная ранговая корреляция Спирмена;
- Information Value (IV);
- взаимная информация (Mutual Information).
Отбор по AUC
AUC используется по умолчанию и предпочтителен для задач бинарной
классификации. Если аргумент
selection не указан, конвейер автоматически применяет
SelectionConfig.auc().
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 с большим числом классов. Пропуски и бесконечности исключаются. Если
признак или 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)
features = one_to_many_pipeline(
df=events,
aggregation_key="client_id",
target_col="target",
selection=pearson_selection,
)
В этом примере pipeline отбирает признаки по абсолютной корреляции Пирсона.
Чтобы использовать другую метрику, передайте в
selection одну из остальных
конфигураций. Если аргумент selection не указывать, применяется AUC с
параметрами по умолчанию.
Одномерная сила и дублирование признаков
Не путайте параметры конфигурации:
minimumопределяет минимальную предсказательную силу отдельного признака;feature_correlation_thresholdопределяет, когда два признака считаются дублирующими друг друга.max_null_fractionзадаёт максимально допустимую долю пропусков;max_mode_fractionзадаёт максимально допустимую долю самого частого непустого значения.
Политика устранения дубликатов
NullsFirstRedundancy используется по умолчанию. Для явного эксперимента с
приоритетом предсказательной силы перед покрытием доступна
QualityFirstRedundancy. Практическое описание и пример приведены в разделе
Отбор признаков.
Программный интерфейс
featminer.selection.config.SelectionConfig
Bases: BaseModel
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
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