Постановка Data Science задач и взаимодействие с бизнесом

в 8:39, , рубрики: big data, data mining, data science, python, Блог компании ID Finance, машинное обучение

image

Привет. В этот раз снова о Data Science. Думаю, многим знакома методология CRISP-DM, о которой говорят на большинстве курсов, но вот про первый пункт (business understanding) информации достаточно мало, в зря, ведь он очень важный.

Поэтому в этой статье мы поговорим о взаимодействии с бизнесом и о том, какие обычно бывают проблемы и сложности в этом вопросе. Давайте разберем все на примере.

Итак, представьте, что к вам пришел представитель бизнеса и описал следующую ситуацию:
«Привет. Нам нужна твоя помощь. У нас есть система, которой мы автоматически списываем деньги с карт наших должников (что-то вроде Uber, который после поездки сам списывает нужную сумму с карты). Мы тут обнаружили, что у неё успешность списания около 10%, нас это совсем не устраивает, так как мы платим за каждую попытку. Нам нужно сделать успешность списания около 30% минимум. Сделаешь?»

image

Ух, как много всего в нескольких предложениях, сразу и не понять.

Тут мы столкнулись с первой задачей – понять, что вообще нужно

После долгого обсуждения стало ясно, что процент успешности считается как количество успешных/количество неуспешных списаний в день, что собственно и нужно увеличить. Далее обнаруживается, что сама система работает очень сложно: делает много списываний по клиенту в день, на разные суммы, сильно зависит от дня (в дни зарплаты пытается снять чуть ли не каждый час со всех просроченных клиентов) и вообще сложно-моделируема.

Окей, хотя бы теперь мы это знаем, но встаёт вопрос с точки зрения Data Science – какая же должна быть целевая переменная?

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

Важно уточнить целевую переменную с заказчиком

Хорошо, допустим, мы поняли, что хотим предсказывать успешность каждого списывания. С какими проблемами мы можем столкнуться в данном случае?

Ну, например, мы можем заметно снизить количество ежедневных списаний и как следствие количество денег, которое собираем каждый день. Что еще? Имея такую целевую переменную, мы увеличим процент успешности, но никак не повысим количество списаний, и вполне возможно общую сумму списаний — об этом очень важно знать всем стейкхолдерам. Все эти вопросы нужно задавать до начала моделирования, а также узнать ожидаемые результаты.

Не забывайте уточнить ожидаемые результаты и возможные риски

image

Поняв, наконец, все возможные риски и выбрав целевую переменную можно приступить к сбору данных, их обработке и моделированию. По этим вопросам можно написать еще много статей, поэтому сразу перейдём к результатам моделирования и их бизнес интерпретации.

Допустим, вы построили модель и хотите рассказать бизнесу о её результатах, показывая прекрасную ROC или PR-кривую и говоря, как сильно это улучшит процент успешности и вообще весь бизнес в целом. Но вот проблема – бизнес не знает, что такое ROC-кривая, и что такое PR-кривая тоже не знает. Обычно в таком случае хорошо помогает confusion matrix. В Python её очень легко сделать библиотекой scikitplot.

image

Далее можно, например, сделать предсказания по новому месяцу, а потом объяснить, сколько по матрице у нас будет ошибок первого и второго рода (показывая прямо в количестве клиентов) или даже объяснить, что означают эти пресловутые Precision и Recall. Очень наглядно и понятно.

Выбор cut-off и подсчёт эффективности модели

Следующим пунктом обычно встает вопрос: «А сколько мы получим денег от внедрения этой модели?». И теперь самое время приступить к выбору оптимального порога отсечения.

Порогом в данном случае называется вероятность (predict_proba вам в помощь), выше которой мы говорим, что наша целевая переменная равна 1, а ниже – 0. Обычно этот порог равен 0.5, однако это не всегда соответствует максимальной прибыли и сильно зависит от цен ошибок первого и второго рода. В нашем случае мы знаем, что, если:

  • У клиента есть деньги, а мы их не списываем, то мы теряем сумму, которая могла бы быть у него списана. Среднее значение этой суммы по всем клиентам мы можем принять как значение ошибки первого рода.
  • У клиента нет денег, но мы пытаемся списать что-то. В данном случае попытка списания провальная и мы платим сервису фиксированную сумму, не зависящую от долга. В нашем случае ошибка второго рода стоит $5, в то время как среднее значение ошибки первого рода — $50.

image

Для поиска оптимального cut-off мы берем тестовый месяц и пытаемся найти порог, который принесёт нам больше всего денег. Сделать это можно простой прогонкой различных значений cut-off в питоне или даже solver’ом Excel. Но в данном кейсе мы забыли учесть еще одну важную вещь – если мы не делаем списание, у клиента есть вероятность (в нашем случае около 30%), что он отдаст деньги сам, что тоже необходимо учитывать.

На приведённом графике показана общая сумма сбора в зависимости от порога (заметьте, что из-за последнего утверждения значения даже при пороге близком к 1 не равны нулю!). Как видно, оптимальное значение 0.41, его и берем. При таком значении мы получили бы около $170 000, при этом мы знаем, что в реальности получили $145 000. Итоговая ценность модели около 25 тысяч в месяц или 300 тысяч в год. Это значение завышено, т.к. модель вряд ли будет работать целый год с одинаковым качеством, но базовую оценку мы увидели.
image

Как вы видите, даже в простой модели и обычной на первый взгляд задаче у нас нашлось множество пунктов, забыв учесть которые мы бы получили совершенно другие результаты.
Все этапы выше описаны для этого конкретного случая и могут сильно различаться в зависимости от задачи, но всё же попробуем выделить основные этапы, которым нужно следовать при взаимодействии с бизнесом:

  1. Понять, что нужно заказчику
  2. Уточнить целевую переменную
  3. Обсудить ожидаемые результаты и риски
  4. Выбрать cut-off и подсчитать эффективности модели

Надеюсь, этим примером я показал важность бизнес составляющей работы дата саентиста и кому-то она была полезна. До встречи!

P.S. Все значения в статье нереальны и взяты просто для примера.

Автор: Distem

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js