Бизнес часто требует от data scientist'ов интерпретации предсказательных моделей в каких-то очень простых терминах. Например, "если клиенту позвонили из банка на мобильный и разговор длился больше 16 минут, то в результате клиент откроет депозит с вероятностью 64%". Сегодня я покажу, как такие правила можно извлечь из данных.
Можно догадаться, что подобные правила очень естественно выучиваются деревьями решений. Понятно, что отдельно взятое дерево решений обычно даёт не такие точные предсказания, как ансамбль деревьев или глубокая нейросеть. Но часто разрыв в точности не очень большой, и им можно пожертвовать ради простоты правил.
При работе с деревьями есть тонкости. Чтобы деревья не переобучались, их рост надо ограничивать. Проще всего для этого устанавливать минимальное число наблюдений на лист. Ну и потом из деревьев надо вытащить список листьев и путей до них, это не то чтобы сложно, но не совсем очевидно.
Если подумать, можно также догадаться, что если мы берём отдельно взятый лист дерева, то в цепочке правил, описывающих путь от корня до этого листа, много избыточных. Можно пройти по ним циклом и выкинуть те правила, которые не улучшают предсказательную силу листа - а таких часто бывает больше половины.
В результате мы оказываемся с мешком довольно простых правил "если комбинация фичей такая, то таргет в среднем такой", на которые может быть очень любопытно смотреть глазами. И да, если звонок длился меньше 75 секунд, то с вероятностью 99.6% депозит клиент не откроет.
Пример моего кода для извлечения сегментов можно посмотреть здесь:
https://gist.github.com/avidale/2aa018e6264a3e3887132d522b783561. Тут я тренируюсь на данных маркетинговой кампании одного португальского банка, но вы можете воспроизвести мой подход на чём угодно.
А тем временем, мы продолжаем игру: вы задаёте вопросы в комментариях, я еженедельно отвечаю на какой-то один из них длиннопостом. Собственно, этот пост был результатом одного из таких вопросов (спасибо @akogay).
Post #241
797