Как стать автором
Обновить

Комментарии 22

Не пробовали использовать elastic net регуляризацию для выбора переменных? См. ссылки 1 и 2 ниже.

Я использую не Python, а R, но вроде в scikit-learn должна быть встроена elastic net регуляризация для логистической регрессии.
В любом случае, есть библиотека glmnet (см. ссылку 3), где реализована логистическая регрессия с кросс-валидацией и elastic net регуляризацией. По утверждению авторов, это еще и одна из самых быстрых реализаций (ссылка 4).

Ссылки:
1. en.wikipedia.org/wiki/Elastic_net_regularization
2. web.stanford.edu/~hastie/Papers/B67.2%20(2005)%20301-320%20Zou%20&%20Hastie.pdf
3. glmnet-python.readthedocs.io/en/latest/glmnet_vignette.html
4. web.stanford.edu/~hastie/Papers/glmnet.pdf
Привет! Elastic Net пробовали использовать, она не встроена в обычную регрессию, но доступна в sklearn.linear_model.ElasticNet. В последней версии мы прогоняем разные версии регрессии, и выбирается наилучшая из них. Но у версии в sklearn есть минус — она не выдает вероятности (нет метода predict_proba)
Неудивительно, что в sklearn.linear_model.ElasticNet нет метода
predict_proba, ведь это регрессор, а не классификатор в отличие от стандартного логрега. Впрочем, написать ElasticNet с нуля совсем не сложно — нужно только добавить кусок к лоссу в обычной логистической регрессии.
Написать elastic net или lasso (L1) с нуля сложнее, чем ridge (L2), потому что там есть часть с коэффициентами по модулю, который не дифференцируется в нуле. Да и незачем писать с нуля, если уже есть glmnet, в которой реализована логистическая и другие регрессии с elastic net, lasso и ridge регуляризацией и k-fold кросс-валидацией.
Знакома проблема черного/белого ящика, когда нужно строить объяснимую для бизнеса модель, хоть и работаю с другой отраслью (ритейл).
Для увеличения точности может помочь стакинг, когда результаты одного или нескольких «белых ящиков» подаются на вход другого «белого ящика». Если модель можно разложить на понятные компоненты. Например, в спросе на товары можно выделить сезонность, веса дней недель, эластичность по цене и т. д.
Вы пишите «а также улучшили качество всех моделей».
А по какому критерию вы оцениваете качество скоринговых моделей?
Такой подход работает с любыми типами заемщиков?
Качество оцениваем с помощью коэффициента Gini на тестовой выборке. И как раз благодаря методикам, описанным в статье он возрастает.
Второй вопрос не совсем понял.
А вы пробовали оценивать эффективность в рублях? Типа «Средний доход от хорошего клиента — Цена привлечения — Потери от плохого — Упущенная выгода»

Вы используете Базель в качестве методологии расчета скоринг моделей? Но вы так же писали об том, что порой ML эффективнее в плане работы с категориями, но не продемонстрировали это. Так же вы используете бининг и WoE для отбора, причем понимаю это и для категорий и для чисел. Почему б не посмотреть в сторону методов ML для кодирования категорий и отбора признаков?

В этой статье мы рассказываем только про логистическую регрессию и все процессы классического кредитного скоринга — то есть без применения машинного обучения. WoE
Биннинг не лучше кодирования для ML моделей, однако именно он даёт регрессии такую стабильность и интерпретируемость, за которые её любят в банках.
модель выгружается в эксель !? или это просто репортик? какой инструмент в продукции запускает модель?
Ответил чуть ниже
Спасибо, очень интересно!
Скажите:
1) Самый важный вопрос: насколько тако вариант регресии с самописным бинингом проигрывает ML моделям по Gini?
2) Как вы эту модель деплоите потом? У вас там на Проде Питон стоит или надо весь набор препроцесинга и модель заново кодить в Java?
3) Если для деплоя используется PMML, то как вы туда добавляете бины?
1. В среднем ML модели выигрывают около 10-15 gini, однако они используют 100+ переменных вместо 10 в регрессии и чуть менее стабильны при изменении, например, потока клиентов.
2. В excel выгружаются бины и коэффициенты регрессии. В нашем случае (это не всегда так и зависит от компании) дальше создается DSL-скрипт — при попадание клиента в такой-то бин ему присвается такое-то WOE. После чего скрипт используется в Java.
На вашем потоке 10п Gini это некислые деньги! И руководство даже не использует ML модели параллельно?

А предобработка? Ну там, кросс-переменные, нормализация, вот эта логика для заполнения пропусков — как она попадает на Продакшн?

upd: не туда ответил, это коммент к комменту habr.com/company/idfinance/blog/421091/#comment_19030713
ML модели используются как раз в большинстве случаев. Для них используется Docker, в котором находится скрипт на питоне.
А в случае описанном в статье нормализация и замена пропусков как раз решается WOE биннингом.

То есть у вас Продакшн скоринг в части ML работает на Питоне? Вот это и правда редкий случай, уважаю! :)
И какой поток входящих запросов держит один инстанс Докера, если не секрет?

Очень зависит от страны, порядка 15 тысяч в день. Но туда отправляется батчами каждые 30 минут, поэтому проблем не возникает

А, теперь понятно, спасибо.
А то я уже решил что вы там таки сделали промышленный онлайн скоринг на ML, питоне и докере.
Но все равно решение, да. Дёшево и сердито :)

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


Самое интересное в бининге для таких задач, как банковский скоринг, это не стабильность (тут альтернатив и правда много), а то, что эксперт может добавить в модель свои знания. Возраст — классический случай. 99% что пик WOE по возрасту это косяк в данных или непредставительная выборка. Тогда аналитик накладывает ограничение неубывания WOE на бины — Gini падает на тренинговом множестве, но растет на тесте (а даже если и не растет на тесте, то стабильность модели все равно повышается).
ИМХО другого такого способа прямо выразить знания эксперта в модель в DS просто нет.

Из нашей практики трейн и тест лучше по времени делить. В тест только самые свежие данные. Так результаты работы модели на практике будут более предсказуемые.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий