Наука о данных в реальном мире

Кто такой потенциальный покупатель?

Прогнозирование покупательского намерения в Интернете с использованием машинного обучения и Google Analytics для маркетинговой стратегии

Каждый день сайты онлайн-покупок получают огромное количество посещений. Однако лишь небольшая часть посещений превратилась в покупки.

Что, если торговые сайты знают, какие группы клиентов с большей вероятностью совершат покупки?

Они смогут запускать целевые акции, которые принесут пользу как сайтам, так и клиентам. Сегодня мы исследуем эту проблему, используя возможности машинного обучения. Набор данных взят из исследования К. Окан Сакара. Мы будем использовать различные методологии исследования в этом проекте. Если вы хотите воспроизвести этот проект, вы можете найти все ресурсы в моем Github.

Обзор данных

Набор данных состоит из 12330 сеансов (строк) посещений веб-сайта за покупками в Интернете. Данные приведены в пределах 1-летнего периода, чтобы избежать какой-либо тенденции. Для описания каждого сеанса используются 18 функций, разделенных на числовые и категориальные функции. Функция «Доход» - это метка в нашей задаче двоичной классификации. Наша цель - использовать все остальные 17 функций, перечисленных ниже, для прогнозирования метки «Доход», то есть для того, чтобы увидеть, завершится ли сеанс посещения транзакцией или нет.

Вот описания функций, упомянутых в документе.

Стоит отметить, что показатели Google Analytics используются в числовых функциях: показатель отказов измеряет, покидает ли клиент страницу, не перейдя на другую; Скорость выхода сообщает вам, как часто страница оказывается последней страницей сеанса; Ценность страницы показывает, какая страница принесла больше дохода сайту.

Методология

Каков рабочий процесс этого проекта?

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

Как мы принимаем решения?

Нам нужно принять множество решений по выбору моделей и функций в этом проекте. Решения принимаются на основе следующих показателей: Точность, Отзыв, Точность и F1. Позвольте мне объяснить их, используя наше экономическое обоснование.

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

Допущения: 1. Доход 100 долларов США за каждый размещенный заказ и стоимость 5 долларов США за каждый отправленный купон. 2. Вероятный покупатель с купоном совершит покупку, а маловероятный покупатель с купоном НЕ совершит покупку.

Как видно из приведенной выше таблицы, мы хотим, чтобы произошло больше «истинно положительных (TP)», и чтобы избежать «ложно отрицательных (FN)», насколько это возможно. Как применить это к модели машинного обучения? Метрики классификации:

Рейтинг отзыва: TP / (TP + FN)

Сколько из всех вероятных клиентов модель может правильно идентифицировать. Для высокого отзыва требуется как высокий TP, так и низкий FN. Он может выявить большую часть вероятных клиентов, чтобы сократить потерянные продажи. Между тем, купоны получат и более маловероятные клиенты (FP). Это нормально, если упущенная выгода превышает стоимость купона.

Оценка точности: TP / (TP + FP)

Из всех «вероятных» клиентов, предсказанных нашей моделью, сколько из них действительно правильные, а не ложноположительные. Высокая точность требует как высокого TP, так и низкого FP. Это может гарантировать, что большая часть предсказанных вероятных клиентов верна. Используется больше купонов, меньше купонов тратится впустую. Однако другие вероятные клиенты будут проигнорированы, что приведет к потере продаж.

Оценка F1: 2 * отзыв * точность / (отзыв + точность)

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

Оценка точности: (TP + TN) / (TP + TN + FN + FP)

Процент предсказанных результатов верен. Эта метрика работает только тогда, когда классы сбалансированы. Мы не используем его для несбалансированных данных.

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

Первоначальный выбор модели

Сначала очистим данные:

Обычно транзакциями завершается лишь небольшая часть посещений. Мы подозреваем, что данные несбалансированы. После тестирования ниже мы обнаружили, что коэффициент конверсии транзакций составляет всего 18,3%. Это означает, что позже нам нужно будет выполнить балансировку данных для моделирования.

Категориальные данные необходимо преобразовать в числовые для дальнейшего анализа.

Набор данных сильно несбалансирован. Все модели, как правило, подходят к классу большинства, поэтому для повышения производительности модели нам необходимо сначала сбалансировать данные. Я использовал технику увеличения размера SMOTE, в результате оба класса имеют одинаковое количество образцов.

Теперь мы можем использовать точность в качестве метрики для сбалансированного набора данных. Я выбрал 7 классификаторов в качестве кандидатов в модели. Я разделил набор данных на 80% поездов и 20% тестов. Затем поезд встраивается в каждую модель без настройки. Здесь мы получаем базовый рейтинг точности. Я выберу 4 лучшие модели в качестве базовых моделей: случайный лес, ДОПОЛНИТЕЛЬНЫЕ деревья, ADAboost и логистическая регрессия. Теперь мы отдаем приоритет точности, чтобы вспомнить, потому что нам нужны объективные модели. Затем выберите модели с высокой степенью отзыва среди моделей высокой точности.

Разработка функций и настройка моделей будут выполнены позже на 4 моделях. Подробности кода см. На моей странице Github.

Выбор функций в первом раунде

Моя цель - уменьшить количество функций и одновременно увеличить значения метрик. Благодаря меньшему количеству функций снижаются затраты на сбор данных, а также время и стоимость вычислений. Для принятия всестороннего решения использовались три метода выбора характеристик: информационные значения, SelectFromModel () в sklearn и значения корреляции.

Какие функции могут дать нам больше информации при прогнозировании, чем другие функции? Давайте попробуем SelectFromModel () sklearn, чтобы отфильтровать веса важности функций. Это дает нам три важные функции. Мы сохраним их и продолжим изучать два других метода выбора функций.

'ProductRelated_Duration', 'ExitRates', 'PageValues'

На тепловой карте слева показаны корреляции между всеми функциями. Чем темнее цвет, тем выше корреляция. Мы хотим видеть, что функции очень коррелируют с ярлыком «Доход», но не соотносятся друг с другом. Но некоторые функции сильно коррелируют с другой функцией. Это означает, что можно сохранить только одну из коррелированных функций. Как мы узнаем, какой из них оставить? Информационные значения (IV) нам помогут.

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

Приведенная ниже функция рассчитает информационную ценность каждой функции.

После всех вычислений, приведенных выше, теперь у нас есть следующие результаты:

В таблицах выше показаны 8 функций, сохраненных для дальнейшего моделирования:

Административная_Длительность, Информационная_Длительность_продукта, Показатель выхода, Особый день, Месяц, Тип посетителя, Значения страницы

Как я принимал решения?

Схема слева - это мой мыслительный процесс.

  1. Функция с IV ниже 0,1 удалена.
  2. В остальном, если функция выбрана фильтром sklearn, мы ее сохраняем.
  3. Остальное удаляется, если оно сильно коррелирует с сохраненными чертами.
  4. Затем последняя часть, если одна функция не коррелирует с другой, мы сохраняем ее. Если это так, сохраняется тот, который имеет более высокую информационную ценность.

Теперь у нас меньше функций, давайте посмотрим, могут ли они помочь улучшить наши модели:

У нас отличные результаты! Все значения отзыва значительно улучшаются после выбора функции, и другие показатели также выглядят хорошо.

Выбор функций во втором раунде

У нас есть 7 категориальных характеристик. Несмотря на то, что они раньше преобразовывались в числовые значения, все значения категориального признака находятся в одном столбце. Что, если мы сделаем каждую ценность отдельной характеристикой? Давайте рассмотрим фиктивную категориальную переменную функции! После обработки данных у нас есть 29 функций и 1 метка.

Почему мы не используем фиктивные переменные в первом раунде выбора функций? Потому что неэффективно притворяться функциями с низкой информационной ценностью и создавать слишком много новых функций. Это снизит производительность моделей.

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

Administrative_Duration, Informational_bins_page_1_plus, ProductRelated_Duration, ExitRates, Month 11, VisitorType_bins_return, PageValues_bins_above_0

Теперь тепловая карта выше показывает 7 функций + 1 метку после нового раунда выбора функций. Обратите внимание, что никакие две функции не коррелируют (это здорово), а функция Pagevalues_bins_above_0 очень важна для дохода.

Теперь давайте посмотрим, как эти новые функции работают на моделях.

Мы видим, что EXTRA tree и AdaBoost улучшили показатели запоминания, в то время как две другие модели работают не так хорошо, как раньше. Модель EXTRA tree имеет более низкий отзыв, чем AdaBoost, но более высокий F1. Итак, мы оставим обе модели на данный момент для следующего шага, настройки модели.

Тюнинг модели

Теперь мы сузились до двух моделей: EXTRA tree и AdaBoost. Настраивая их гиперпараметры, мы потенциально могли бы еще больше увеличить показатель запоминания. Для методов настройки модели я сначала буду использовать RandomizedSearchCV. Он будет случайным образом запускать модель по списку определенных нами гиперпараметров. Когда мы добьемся максимальной производительности с помощью RandomizedSearch, мы будем использовать GridSearch для дальнейшего улучшения модели, просматривая более узкий список гиперпараметров. Подробности смотрите на моем Github.

На рисунке выше показано, что обе модели были улучшены с помощью рандомизированного поиска, а затем поиска по сетке. Разница в окончательных оценках отзыва составляет всего 0,002. Затем мы смотрим на F1 и показатели точности. Модель ДОПОЛНИТЕЛЬНЫЕ деревья имеет гораздо более высокие баллы по обоим показателям. В результате это наша окончательная модель.

Заключение

В этом проекте мы построили модель машинного обучения с двоичной классификацией, чтобы предсказать покупательские намерения клиентов на сайте онлайн-покупок. После нескольких раундов выбора функций и моделей мы определяем, что лучшая модель для наших данных - это ДОПОЛНИТЕЛЬНЫЕ деревья, а функции, которые подходят для этой модели, указаны ниже.

Модель EXTRA tree, которую мы построили в этом проекте, может охватить 83% вероятных клиентов. Это означает, что если маркетинговая команда отправит купоны всем вероятным клиентам, предсказанным этой моделью, купоны охватят 83% всех фактических вероятных клиентов на рынке. Эта модель определенно может помочь команде маркетинга разработать эффективные маркетинговые стратегии!

Спасибо, что уделили время чтению этой статьи. Я надеюсь, что это вдохновит вас на создание вашего собственного проекта. Если вам понравилась моя статья, пожалуйста, хлопните в ладоши. Связаться со мной в Linkedin всегда приветствуется! Удачного обучения!