60 дней фильмов
и сериалов по промокоду:
VC60
Забрать
60 дней подписки Яндекс Плюс бесплатно для новых пользователей, ранее не оформлявших подписку Яндекс Плюс либо подписки, её включающие, при условии привязки банковской карты. Далее — автопродление: 199 ₽/месяц. Действует на территории РФ. Активировать до 30.08.2021 г. https://hd.kinopoisk.ru/gift. Условия: clck.ru/FMQND.
18+
Личный опыт
MagicScore

Stepwise алгоритм выбора фичей

В текущую эпоху больших данных, при построении классификационных моделей машинного обучения с учителем (supervised learning algorithm), часто возникает вопрос отбора построенных фичей (features), которые следует включить в модель/ Особенно остро возникает эта проблема при генерации тысяч и десятков тысяч переменных. Каким образом возможно отсеять "ненужные" и оставить те, что обладают наибольшей ранжирующей способностью?

В этой статье попробуем ответить на этот вопрос реализуя на языке Python "умный" алгоритм выбора фичей или stepwise selection algorithm.

Проблематика

С одной стороны можно попробовать включить в модель сразу все тысячи и десятки тысяч переменных, но это может привести к следующим проблемам:

  • Переобучение модели (overfitting). Модель потеряет способность обобщать на новых данных и подстроится под обучающую и валидационные выборки.
  • Сложность во внедрении и сопровождении такой модели.
  • Невозможность интерпретации результата принятия решения. Например, в случае внедрения моделей в банковском секторе при наличии отказа клиенту в займе, регулятор может попросить предоставить обоснование, почему такое решение было принято, и указывать описание тысяч переменных, которые были учтены при этом крайне затруднительно.

Метрика оценки

Поскольку мы рассматриваем классифкационные модели, в частности, модели с двумя исходами, то нашей метрикой оценки качества будет площадь под ROC-кривой (Area Under Curve или ROC AUC). В некоторых реализациях можно встретить оценку по методу наименьших квадратов (Ordinary Least Squares).

Алгоритм

1) Определить множество F всех фичей-кандидатов и целевую переменную (учителя или target).
2) Выбрать среди всех кандидитов ту переменную-фичу f1, модель с которой обладает наибольшим значением ROC AUC.
3) Исключить из множества F фичу f1.
4) Выбрать среди оставшихся кандидитов такую фичу f2, что в комбинации с выбранной ранее даёт модель с наибольшим значением ROC AUC.
5) Повторить 3-4 до тех пор, пока не закончатся переменные или не превысится ограничение на их количество.

Реализация

Для оценки ROC AUC будем использовать python-библиотеку sklearn и классическую логистическую регрессию.

from sklearn import linear_model from sklearn.metrics import roc_auc_score

Сперва реализуем функцию расчёта нашей метрики ROC AUC, которая принимает на вход обучающую выборку, обучает модель и вычисляет показатель:

def auc(variables, target, basetable): X = basetable[variables] y = basetable[target] logreg = linear_model.LogisticRegression() logreg.fit(X, y) predictions = logreg.predict_proba(X)[:, 1] auc = roc_auc_score(y, predictions) return auc

Затем, реализуем функцию отбора кандидата с наибольшим ROC AUC:

def select_next(current_variables, candidate_variables, target, basetable): best_auc = -1 best_variable = None for v in candidate_variables: auc_v = auc(current_variables + [v], target, basetable) if auc_v > best_auc: best_auc = auc_v best_variable = v return best_variable

Наконец, соединяем всё вместе и реализуем stepwise selection алгоритм:

# Определяем переменные кандидаты из таблицы candidate_variables = list(basetable.columns.values) candidate_variables.remove("target") # Инициализируем лист отобранных фичей current_variables = [] # Алгоритм stepwise с ограничением в 5 фичей number_iterations = 5 for i in range(0, number_iterations): next_variable = select_next(current_variables, candidate_variables, ["target"], basetable) current_variables = current_variables + [next_variable] candidate_variables.remove(next_variable) print("Переменная добавленная на шаге %s:\t%s " % (i+1, next_variable)) print(current_variables)

⚠ Замечание

Изолированно, некоторые фичи могут иметь больший вес ROC AUC сами по себе, но такие переменные могут быть не включены алгоритмом, например, из-за наличия высокой корреляции с другмими переменными.

Вместо заключения

Большое спасибо за внимание к статье, ей мы запускаем рубрику технического характера, в которой будем раскрывать проблематику прогнозирование дефолта заёмщика и разные ее аспекты.

Если статья показалась вам полезной, не забудьте поставить лайк и подписаться на наш блог, чтобы отслеживать появление нового материала.😉Будем благодарны за любые комментарии под статьей. В особенности ждем ваши пожелания по темам для дальнейшего разбора в нашей рубрике.

Для получения подробного описания сервисов компании MagicScore и интеграции с нами, пожалуйста, пишите в ЛС или оставляйте заявки на нашем сайте.

{ "author_name": "MagicScore", "author_type": "self", "tags": [], "comments": 5, "likes": 9, "favorites": 21, "is_advertisement": false, "subsite_label": "life", "id": 261270, "is_wide": true, "is_ugc": true, "date": "Mon, 21 Jun 2021 22:58:16 +0300", "is_special": false }
0
5 комментариев
Популярные
По порядку
3

А когда кросс-валидация?

Ответить
0

Артур, спасибо за вопрос! Статья на эту тему уже запланирована. Следите за обновлениями. 😊 

Ответить
2

Отсеять ненужные от ранжирующих можно классическим определением точности и полноты математического правила. При помощи данного подхода так же можно решить проблематику предоставления основания решения для регулятора. Еще я бы изначально разделил базу на true и false. И строил бы выборку правил отдельно. Это даст возможность более эффективно проверить, созданый скоринговый процесс, на уже имеющейся базе.

Ответить
1

Последний абзац как бы намекает на то, что неплохо бы сначала провести анализ корреляции и проверить на мультиколинеарность VIF после построения модели.
"переменную-фичу f1 что обладает наибольшим значением ROC AUC." - фичи никаким AUROC не обладают, обладает модель с этой фичей, давайте будем точны в терминологии. Если помните, как строится ROC-кривая - мы плавно меняем cut-off линию от 0 к 1 и считаем accuracy и sensitivity модели (по сути наши X и Y на графике)
"бинарные модели с двумя исходами" - масло масляное, ок)
Вы забыли упомянуть, что stepwise может работать в обе стороны, как исключение, так и пошаговое включение фичей.
В целом, если статья рассчитана на новичков, неплохо бы начинать с самых азов.

Ответить
1

Антон, поправили, спасибо за замечание. А по поводу азов сказать что обязательно будем делать цикл статей от адама и евы☺️

Ответить
Читать все 5 комментариев
«Spotify: История продукта». Создание десктопного приложения

От десктопного приложения с серверами в шкафу до революционного нового формата потоковой передачи музыки. «Spotify: История продукта» — серия статей от команды Spotify в России, в которой читателям vc.ru расскажут о том, как создавался сервис, какие решения стояли за продуктовыми изменениями и кто повлиял на то, как музыкальные стриминги выглядят…

Aleph расширяет присутствие на Ближнем Востоке: холдинг приобрел контрольный пакет акций Connect Ads

Aleph Holding, глобальный партнер крупнейших диджитал платформ и материнская компания Httpool, объявил о приобретении контрольного пакета акций Connect Ads. Компания является провайдером цифровых медиа и рекламных решений в странах Ближнего Востока и Африки.

План победы: как я получил 2.5 миллиона рублей в конкурсе Сбера

История о том, как мне удалось с помощью старания, стратегии и толики удачи выиграть конкурс для разработчиков с внушительным призовым фондом.

Морзе, резистор, стихотворный размер. Везде одна страница с визуальным выводом и длинный голосовой ввод.
«Яндекс.Про» отстранил курьера от работы из-за неправильного адреса клиента

Несколько лет назад я прочитал на VC занимательную статью о том, как в одной из американских IT компаний искусственный интеллект самостоятельно уволил сотрудника, а тот никак не смог этому противостоять. Тогда мне это показалось забавным, исключительным случаем, но я и подумать не мог, что такие ситуации могут быть отлажены в «систему» и…

«Ростелеком» подал на меня в суд после смены провайдера

Дело было в 2019 году. Мой провайдер в целом меня устраивал, но цена казалась слегка завышенной, да и просадки в скорости частенько бывали.
И тут как-то звонит мне человек с незнакомого номера, предлагает подключиться к Ростелекому, сэкономить 100 рублей в месяц, получить выше скорость и хороший роутер в аренду за рубль. Я заинтересовался, но мне…

Банкомат «Альфа-банка» дал сбой и не зачислил деньги. Банк ничего не делает

Банкомат не вернул 50 300 рублей. А Банк дальше чат бота по обращению отвечает ориентировочно, когда-нибудь ответим на обращение.

Итоги Python meetup: медленные языки, быстрые роботы
От конкурентной разведки до настройки рекламы: как использовать прокси в бизнесе

Объясняем на простых примерах.

История «Макет 29»: Как продавать модели подводных лодок из Северодвинска в США и Францию

Артём Ботолин, основатель «Макет 29», родился и вырос в городе корабелов и моряков — Северодвинске. В детстве, как и многие мальчишки в классе, мечтал стать военным, но в итоге карьеру связал с любимым хобби — созданием изделий из дерева. Поработав долгое время в макетной мастерской, Артём открыл собственный бизнес, магазин «Макет 29», где можно…

Архетипы проблемных продакт-менеджеров в ИТ-проектах Статьи редакции

Одни пишут слишком длинные ТЗ, а другие не пишут их вовсе. Кто-то заставляет коллег перерабатывать или во всём винит разработчиков. Чем они опасны и как с ними работать, объясняет техлид Нил Грин.

Фильм «Несносные боссы»
Дизайн-джем #36: вышивка для Бьорк и журнала Time, а также дизайн-работы Moonassi, Оамула Лу, Лизы Смирновой и других

В сотканном из нитей вдохновения дайджесте от Futura by red_mad_robot.

null