На Хабре уже было много хороших статей на эту тему - например, вот эта. Попробуем рассказать о чем-то новом.

Поверхностный обзор нового пакета FSinR

Задачи из разряда "найдите что-нибудь, что на это влияет", конечно, поставлены некорректно. В идеале, перед построением любой модели реального явления, должна существовать адекватная теоретическая модель, в полном соответствии с которой и создаются разные хитрые математические штуки. Однако, наш мир далеко не идеален, это раз, а, во-вторых, задача отбора признаков вполне применима при разведочном анализе данных, когда мы только подступаемся к анализу нового для нас явления

Пару слов о методологии

База данных для работы - данные по округам США (за 2017 год).

Алгоритм работы

Пакет "FSinR" содержит несколько алгоритмов отбора признаков, в частности:

  • aco_search (алгоритм муравьиной колонии)

  • ga_search (генетический алгоритм)

  • hc_search (hill climbing algorithm, поиск восхождением к вершине)

  • LV_search (Las Vegas algorithm, относится к семейству алгоритмов стохастического локального поиска)

  • sbs_search (sequential backward selection), sfbs_search (sequential backward floating selection) - алгоритмы обратного поиска

  • sffs_search (sequential forward floating selection), sfs_search (sequential forward selection) - алгоритмы прямого поиска

  • sa_search (simulation annealing, вероятностный метод поиска глобального оптимума)

  • ts_search (tabu search, мета-алгоритм локального поиска с ограничениями)

  • woa_search (whale optimization algorithm, алгоритм пузырьковой сети (имитирует охоту китов)

  • selectDifference (модификация алгоритма прямого поиска; выбирает функцию, прирост оценочного показателя на следующем шаге для которой меньше определенного значения)

  • selectKBest (модификация алгоритма прямого поиска с k переменными)

  • selectPercentile (модификация алгоритма прямого поиска, которая выбирает в модель определенный процент переменных)

  • selectSlope (модификация алгоритма прямого поиска, обратный selectDifference - выбирается функция, убывание показателя качества которой превысит определенный порог)

  • selectThreshold, selectThresholdRange - алгоритмы, отбирающие функции, оценочное значение которых больше определенного предела

Задача: сравнить точность (и затраты времени на их выполнение) данных алгоритмов (цель для алгоритмов - построить модель с максимумом коэффициента детерминации) при прогнозировании средней величины дохода в округе (переменная Income)

Таким образом, сначала вся выборка разделяется на тренировочную и тестовую (80/20), алгоритм подбирает переменные по тренировочной выборке, после чего ее точность проверяется на тестовой с помощью следующих показателей: коэффициент детерминации, средняя абсолютная ошибка (MAE), средняя ошибка аппроксимации, доля объектов тестовой выборки, для которых ошибка аппроксимации меньше 5 и 15 %. Процедура повторяется 10 раз.

Результаты

Результаты эксперимента обобщены в таблице (взяты медианные значения), код можно найти в ноутбуке на kaggle https://www.kaggle.com/artemcheremuhin/experiment-feature-selection-in-r

Метод

R2

MAE

Коэффициент аппроксимации,%

Доля объектов с ошибкой <5%, %

Доля объектов с ошибкой <15%, %

Время работы алгоритма, с*

aco_search

0.7288

11297

21.69

4.431

12.19

34.73

ga_search

0.7268

11318

21.82

4.453

12.16

171.66

hc_search

0.7252

11312

21.90

4.468

12.18

49.54

LV_search

0.6364

13044

25.19

3.789

10.63

8.98

sbs_search, sfbs_search, sffs_search, sfs_search

0.7279

11267

21.78

4.437

12.15

151.62 151.62 81.12 31.36

sa_search

0.6555

12991

25.14

3.819

10.68

0.91

ts_search

0.7273

11310

21.73

4.438

12.17

358.02

woa_search

0.6881

12000

23.07

4.189

11.49

8.91

selectDifference

0.7279

11267

21.78

4.437

12.15

1.17

selectKBest**

0.6671

12767

24.58

3.670

10.57

0.90

selectPercentile

0.7268

11319

21.94

4.380

12.04

0.92

selectSlope selectThresholdRange

0.4219

16485

30.45

2.845

8.26

0.87 1.00

selectThreshold

0.6693

12676

24.36

3.689

10.62

1.17

*Время работы измерялось на kaggle

**Количество переменных задавалось от 1 до 10

Заключение

Принцип работы пакета достаточно простой - необходимо задать критерий оценки (evaluator), метод отбора признаков (method) и зависимую переменную (V1). Пакет работает и с задачами регрессии, и с задачами кластеризации

method <- simulatedAnnealing() 
evaluator <- determinationCoefficient()
model_1<-method(Base_tr, 'V1', evaluator)
model_1$bestFeatures # Получаем таблицу, отражающую факт выбора переменных в итоговую модель

Конкретно для данного датасета получилось, что лучшим является метод selectDifference - при близком к наибольшему показателю детерминации время его работы значительно ниже, чем у аналогов. Недостатком большинства использованных методов является то, что наибольший показатель коэффициента детерминации достигается простым включением всех переменных в модель, а использование более продвинутых метрик (например, скорректированного коэффициента детерминации) пока пакетом не предусмотрено

  • При расчетах на ПК при отборе признаков для регрессии удается использовать другие оценщики, а на kaggle - нет, время расчетов улетает в бесконечность

  • Оригинальная версия пакета поддерживает одновременное использование нескольких функций оценки - это в перспективе очень интересно и нуждается в дальнейшем тестировании