Если вы спросите меня о самой непредсказуемой вещи в мире, я однозначно отвечу «человеческий разум». Но, к сожалению, эта непредсказуемость играет ключевую роль, когда речь идет о производительности вашего бизнеса. Именно поэтому в зависимости от азартной игры это, наверное, не идеальный вариант для вас. Скорее, вы можете захотеть предсказать эту непредсказуемую вещь, насколько это возможно. Звучит как оксюморон, не так ли? Надеюсь, в этом случае нам на помощь может прийти алгоритм дерева решений.

Почему дерево решений?

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

Таким образом, наше ключевое предположение заключается в том, что групповое поведение легче (и более выполнимо) предсказать, чем индивидуальное.

О данных:

Краткий превью:

Набор данных состоит из четырех столбцов: «Праздник», «Скидка», «Бесплатная доставка» и «Покупка». Здесь наша цель должна состоять в том, чтобы классифицировать целевой класс «Покупка» на основе трех других столбцов. Обратите внимание, что здесь все переменные категоричны. Таким образом, вместо регрессии следует выбирать классификатор дерева решений.

О коде:

(Если вас не интересует кодирование, перейдите к разделу интерпретации, чтобы прочитать результаты проекта.)

Импорт библиотек:

Импорт данных:

◻ Выход:

Таким образом, набор данных содержит тридцать выборок, и все столбцы имеют по две категории каждая.

Очистка данных:

Это приведет к удалению строк с отсутствующими значениями, если таковые имеются.

Кодирование категориальных данных:

◻ Выход:

Этот шаг необходим для кодирования категориальных переменных в машиночитаемые форматы. Здесь я использовал LabelEncoder из Scikit-learn, поскольку все переменные имеют только две категории каждая. Хотя этот метод не считается подходящим для переменных с несколькими категориями, он должен быть наиболее подходящим методом для рассматриваемого случая.

Разделение компонентов и цели:

Разделение поезда и тестового набора:

Подгонка под модель:

›› Определение набора параметров:

Эффективность дерева решений зависит от нескольких параметров. Параметр критерий основан на измерении примеси (либо джини, либо энтропии) в зависимости от того, какое дерево решений составлено. Параметр min_samples_leaf обозначает минимальное количество выборок, необходимых для присутствия в конечных узлах, тогда как min_samples_split указывает минимальное количество выборок, необходимых для присутствия в родительских узлах для дальнейшего разбиения. Здесь min_impurity_decrease обозначает минимальное уменьшение примесей при разделении узла. [Ссылка]

›› Определение модели:

Метод поиска по сетке применяется для поиска наилучшего набора параметров для классификатора дерева решений. GridSearchCV работает по методу перекрестной проверки. Параметр cv указывает значение k перекрестной проверки в k раз. Поскольку набор данных невелик, следует предпочесть большее значение k (но не больше, чем количество выборок в наименьшем целевом классе). [Ссылка]

Здесь я определил точность как меру переоборудования, на основании которой будет выбрана лучшая оценка. [Ссылка]

›› В поисках лучшего дерева:

◻ Выход:

Прогноз и эффективность:

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

◻ Выход:

Таким образом, наша модель может обеспечить точность прогнозов 87,5% при тестировании на независимом наборе тестов.

Построение дерева:

◻ Выход:

Удаление избыточных ветвей:

Теперь дерево решений готово. Но посмотрите на узел №6 и его дочерние элементы. Все они ведут к одному уникальному целевому классу, то есть «Да». Таким образом, очевидно, что мы можем сократить эти дополнительные ветви, поскольку они не играют никакой роли в прогнозировании. В этом случае вся избыточная часть явно идентифицируется и состоит из однородного целевого класса. Для этого простая ручная обрезка должна быть лучшим подходом, чем использование дорогостоящего в вычислительном отношении маршрута ccp_alpha.

Вышеупомянутый блок кода преобразует правый дочерний элемент узла № 0 в конечный узел. А теперь давайте построим график.

◻ Выход:

Это обрезанное дерево выглядит более интерпретируемым, чем предыдущее. Но в ветвях явно не указано их логическое значение. Хотя левые ветви удобно показаны для обозначения части условия «Да», наша диаграмма должна содержать эту информацию, чтобы ее можно было повсеместно читать. Итак, в качестве руководства для интерпретации этого графика мы можем распечатать текстовое представление дерева.

Печать текстового представления:

◻ Выход:

Теперь мы можем комбинировать сюжет и текстовое представление, чтобы интерпретировать сюжет.

Упрощенное представление:

Комбинирование этих двух слов для интерпретации может быть немного сложным. Кроме того, довольно неудобно представление категорий функций. Итак, мы можем захотеть получить более полную картину всего сценария. К сожалению, возможности настройки в Scikit-learn ограничены. Для этого я сделал упрощенную версию дерева с помощью Matplotlib Path. Честно говоря, это была утомительная задача. Вот почему я бы не рекомендовал его, если вы ДЕЙСТВИТЕЛЬНО не заботитесь о аккуратном и чистом представлении. Вы можете найти код здесь.

◻ Выход:

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

Устный перевод:

Упрощенное дерево решений показывает, что скидка является основным критерием, которому потребители придают огромное значение при совершении покупки. Этот вывод объясняет, почему вы можете сначала усилить режим скидок, чтобы привлечь клиентов. Дерево решений также указывает на то, что одна бесплатная доставка не может приносить продажи, если это не праздник. Таким образом, в этом случае предложение бесплатной доставки по цене ярлыка со скидкой может быть не лучшим выбором. Скорее, остается достаточно причин, чтобы пойти по обратному пути.

Однако, как я указывал в начале этой статьи, человеческий разум сложен, изменчив и подвержен влиянию множества условий. Вот почему мы не можем обобщать результаты конкретного исследования, особенно если оно касается поведения потребителей. Набор клиентов, которых может получить бизнес, варьируется в пространстве и времени. Для этого то, что работает для кого-то, может не сработать для вас. Кроме того, то, что работает для вас сегодня, завтра может устареть. Не стесняйтесь размещать свои запросы и мнения в разделе комментариев. Я хотел бы обогатиться вашими предложениями и опытом.

🖤 ​​Спасибо за ваше драгоценное внимание. 🖤

Используемые версии:

Python: 3.7.4

Панды: 0.25.1

Scikit-learn: 0.21.3

Матплотлиб: 3.1.1