На Хабре уже было много хороших статей на эту тему - например, вот эта. Попробуем рассказать о чем-то новом.
Поверхностный обзор нового пакета 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 - нет, время расчетов улетает в бесконечность
Оригинальная версия пакета поддерживает одновременное использование нескольких функций оценки - это в перспективе очень интересно и нуждается в дальнейшем тестировании