Обзор проекта

Удовлетворенность клиентов способствует успеху бизнеса, а аналитика данных помогает понять, что думают клиенты. Например, фраза 360-градусный взгляд на клиента относится к агрегированию данных, описывающих покупки клиента и взаимодействие с ним в службе поддержки.

Набор данных Starbucks Udacity Data Scientist Nanodegree Capstone представляет собой симуляцию поведения клиентов в мобильном приложении Starbucks Rewards. Периодически Starbucks рассылает пользователям предложения, которые могут быть рекламой, скидками или купив один, получи второй бесплатно (BOGO). Важной характеристикой этого набора данных является то, что не все пользователи получают одно и то же предложение.

Этот набор данных содержит три файла. Первый файл описывает характеристики предложения, включая его продолжительность и сумму, которую клиент должен потратить, чтобы выполнить его (сложность). Второй файл содержит демографические данные клиентов, включая их возраст, пол, доход и время создания учетной записи в мобильном приложении Starbucks Rewards. Третий файл описывает покупки клиентов, а также время, когда они получили, просмотрели и выполнили предложение. Предложение считается успешным только в том случае, если клиент просматривает предложение и встречает или превышает его сложность в течение срока действия предложения.

Постановка проблемы/метрики

Задача, которую я решил решить, заключалась в построении модели, предсказывающей, отреагирует ли клиент на предложение. Моя стратегия решения этой проблемы состоит из четырех шагов. Сначала я объединил портфель предложений, профиль клиента и данные о транзакциях. Каждая строка этого комбинированного набора данных описывает атрибуты предложения, демографические данные клиентов и успешность предложения. Во-вторых, я оценил точность и оценку F1 наивной модели, предполагающей, что все предложения были успешными. Это дало мне основу для оценки производительности моделей, которые я построил. Точность измеряет, насколько хорошо модель правильно предсказывает, будет ли предложение успешным. Однако, если процент успешных или неудачных предложений очень низок, точность не является хорошим показателем эффективности модели. В этой ситуации оценка точности и полноты модели дает лучшее представление о ее производительности. Я выбрал показатель F1-score, потому что он представляет собой средневзвешенное значение показателей точности и полноты. В-третьих, я сравнил производительность моделей логистическая регрессия, случайный лес и повышение градиента. В-четвертых, я уточнил гиперпараметры модели, которая имела самую высокую точность и оценку F1.

Исследование/визуализация данных

Цель моего исследования и визуализации файлов данных Starbucks Capstone Challenge состоит в том, чтобы определить этапы предварительной обработки, которые мне необходимо применить перед их объединением.

Данные портфеля предложений

Данные о портфеле предложений Starbucks Capstone Challenge обобщают предложения клиентов. На основе исследовательского анализа этих данных я сделал три вывода. Во-первых, я должен разделить переменную каналов с несколькими метками, используя scikit-learn MultiLabelBinarizer. Во-вторых, мне нужно переименовать переменную id в offerid, чтобы отличить ее от идентификаторов клиентов. В-третьих, мне надо на горячую закодировать переменную offer_type.

Алгоритм, который я реализовал для очистки данных портфеля предложений, состоит из шести шагов. Сначала я изменил имя столбца id на offerid. Во-вторых, я переименовал столбец duration в durationdays. В-третьих, я удалил символы подчеркивания из имен столбцов. В-четвертых, я сразу закодировал столбец offertype. В-пятых, я один раз закодировал столбец channels. В-шестых, я заменил столбцы offertype и channels соответствующими значениями в горячем кодировании.

Данные профиля клиента

Данные профиля клиента Starbucks Capstone Challenge описывают демографические данные клиентов. Есть пять характеристик этих данных, которые я наблюдал во время моего исследовательского анализа данных. Во-первых, данные о поле и доходе отсутствуют примерно на 13%. Во-вторых, возраст клиента составляет 118 лет, когда доход клиента отсутствует (т. е. NaN). В-третьих, пол клиента не указан для ~ 1,5% данных. В-четвертых, год, когда клиент стал участником программы вознаграждений, распределяется неравномерно. Это говорит о том, что эта функция может быть полезным отличительным признаком клиентов. В-пятых, месяц, когда клиент стал участником вознаграждений, примерно одинаков. Следовательно, эта функция, вероятно, бесполезна для прогнозирования того, было ли предложение клиента успешным.

Алгоритм, который я реализовал для очистки данных профиля клиента, состоит из семи шагов. Во-первых, я удалил клиентов с отсутствующими данными о доходах. Во-вторых, я удалил профили клиентов, в которых отсутствовал атрибут пола. В-третьих, я изменил имя столбца id на customerid. В-четвертых, я преобразовал столбец became_member_on в объект datetime. В-пятых, я горячо закодировал год начала членства клиента. В-шестых, я один раз закодировал возрастной диапазон клиента. В-седьмых, я преобразовал гендерный атрибут профиля клиента из символа в число.

Есть три графика, которые я создал для изучения смоделированной демографии клиентов Starbucks. Во-первых, я построил график распределения доходов клиентов. Эти результаты свидетельствуют о том, что минимальный и максимальный доход клиентов-мужчин и женщин примерно одинаков. Однако доход клиентов-мужчин несколько смещен в сторону более низких значений по сравнению с доходами клиентов-женщин.

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

В-третьих, я построил график распределения клиентов по возрастным группам. Эти результаты показывают, что средний возраст клиентов составляет от 50 до 60 лет.

Данные о транзакциях клиентов

Данные о транзакциях клиентов Starbucks Capstone Challenge описывают покупки клиентов, а также время, когда они получили, просмотрели и выполнили предложение. Из моего исследовательского анализа этих данных я сделал два вывода. Во-первых, мне нужно разделить данные о предложениях клиентов и покупках. Во-вторых, ~45% событий — это покупки клиентов, а ~55% событий описывают предложения клиентов.

Алгоритм, который я реализовал для очистки данных о транзакциях клиентов, состоит из шести шагов. Сначала я изменил имя столбца person на customerid. Во-вторых, я удалил идентификаторы клиентов, которых нет в профиле клиента DataFrame. В-третьих, я преобразовал единицы измерения переменной времени из часов в дни. В-четвертых, я изменил название столбца time на timedays. В-пятых, я создал DataFrame, описывающий предложения клиентов. Это включало создание столбца offerid, анализ типа события предложения и одно горячее кодирование типов событий предложения клиента. В-шестых, я создал DataFrame, описывающий события транзакций клиентов.

Объедините данные о транзакциях клиентов, демографические данные и данные о предложениях

Очистка данных относится к набору преобразований, которые применяются к набору данных перед прогнозным моделированием. Алгоритм, который я реализовал для объединения данных о транзакциях клиентов, демографических данных и данных о предложениях, состоит из пяти шагов. Сначала я выбираю профиль клиента. Во-вторых, я выбираю данные о предложении для конкретного клиента. В-третьих, я выбираю транзакции для конкретного клиента. В-четвертых, я инициализирую кадры данных, которые описывают, когда клиент получает, просматривает и завершает предложение. В-пятых, я применяю следующую процедуру для каждого предложения, которое получает клиент:

а. Инициализировать текущий идентификатор предложения

б. Посмотрите описание текущего предложения

в. Инициализировать период времени, когда предложение действительно

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

е. Инициализировать логический массив, который выбирает описание того, когда клиент завершает предложение (этот массив не может содержать никаких значений True)

ф. Инициализировать логический массив, который выбирает описание того, когда покупатель просматривает предложение (этот массив не может содержать никаких значений True)

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

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

г. Инициализировать словарь, описывающий текущее предложение клиента

час Обновить список словарей, описывающих эффективность предложений для конкретного клиента

После того, как я оценил все транзакции клиентов, я преобразовал полученный список словарей в DataFrame pandas.

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

Задача, которую я решил решить, заключалась в построении модели, предсказывающей, отреагирует ли клиент на предложение. Моя стратегия решения этой проблемы состоит из четырех шагов. Сначала я объединил портфель предложений, профиль клиента и данные о транзакциях. Во-вторых, я разделил объединенные данные об эффективности предложений клиентов на обучающие и тестовые наборы перед оценкой точности и оценки F1 наивной модели, которая предполагает, что все предложения были успешными. Мой анализ показывает, что точность наивной модели составляла 0,471, а ее показатель F1 — 0,640. Я также оценил статистику предложений клиентов по обучающим данным. Эти результаты показывают, что распределение предложений в смоделированных данных мобильного приложения Starbucks примерно однородно. Они также подразумевают, что вероятность успеха предложения клиента колеблется от ~ 6% до 75%, причем два наименее успешных предложения являются информационными.

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

Я выполнил случайный поиск моделей логистической регрессии, случайного леса и повышения градиента, чтобы выбрать ту, которая имела самую высокую точность обучающих данных и показатель F1. Эти результаты показывают, что модель случайного леса имела лучшую точность по сравнению с повышением градиента, логистической регрессией и наивным предиктором, который предполагал, что все предложения клиентов были успешными. Затем я уточнил гиперпараметры модели случайного леса, используя поиск по сетке. Этот анализ показывает, что точность обучающих данных модели случайного леса улучшилась с 0,742 до 0,753. Этот результат также свидетельствует о том, что показатель F1 обучающих данных модели случайного леса увеличился с 0,735 до 0,746.

Смещение и дисперсия — две характеристики модели машинного обучения. Смещение относится к неотъемлемым предположениям модели относительно границы принятия решений между различными классами. С другой стороны, дисперсия относится к чувствительности модели к изменениям ее входных данных. Модель логистической регрессии строит линейную границу решения, чтобы разделить успешные и неудачные предложения. Однако мой исследовательский анализ демографических характеристик клиентов для каждого предложения показывает, что эта граница принятия решений будет нелинейной. Следовательно, метод ансамбля, такой как случайный лес или повышение градиента, должен работать лучше.

И случайный лес, и модели повышения градиента представляют собой комбинацию нескольких деревьев решений. Классификатор случайного леса случайным образом выбирает обучающие данные с заменой, чтобы построить набор деревьев решений, которые объединяются с использованием голосования большинством. Напротив, повышение градиента итеративно строит набор деревьев решений с целью уменьшения количества неправильно классифицированных выборок обучающих данных из предыдущей итерации. Следствием этих стратегий построения модели является то, что глубина деревьев решений, сгенерированных во время обучения модели случайного леса, обычно больше, чем градиент, повышающий глубину слабого ученика, чтобы минимизировать дисперсию модели. Как правило, повышение градиента работает лучше, чем классификатор случайного леса. Однако повышение градиента может привести к превышению тренировочных данных и потребует дополнительных усилий для настройки. Классификатор случайного леса менее подвержен переоснащению, поскольку он строит деревья решений из случайных выборок обучающих данных. Кроме того, гиперпараметры классификатора случайного леса легче оптимизировать [1].

Вывод

Задача, которую я решил решить, заключалась в построении модели, предсказывающей, отреагирует ли клиент на предложение. Моя стратегия решения этой проблемы состоит из четырех шагов. Во-первых, я объединил портфель предложений, профиль клиента и данные о транзакциях. Во-вторых, я оценил точность и показатель F1 наивной модели, которая предполагала, что все предложения клиентов были успешными. В-третьих, я сравнил производительность моделей логистической регрессии, случайного леса и повышения градиента. Этот анализ показывает, что модель случайного леса имеет наилучшую точность обучающих данных и показатель F1. В-четвертых, я уточнил гиперпараметры модели случайного леса, используя поиск по сетке. Мой анализ показывает, что полученная модель случайного леса имеет точность обучающих данных 0,753 и показатель F1 0,746. Точность набора тестовых данных, равная 0,736, и показатель F1, равный 0,727, предполагает, что построенная мной модель случайного леса не переполняла обучающие данные.

Важность функции относится к числовому значению, которое описывает вклад функции в построение модели, которая максимизирует ее метрику оценки. Классификатор случайного леса является примером модели, которая оценивает важность признаков во время обучения. Мой анализ данных обучения эффективности предложений клиентов Starbucks Capstone Challenge показывает, что пять основных функций в зависимости от их важности:

1. Offer difficulty (how much money a customer must spend to complete an offer)  
2. Offer duration   
3. Offer reward  
4. Customer income  
5. Whether a customer created an account on the Starbucks rewards mobile application in 2018

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

[1] Как производительность Gradient Boosting Machine может быть хуже, чем у Random-Forests.