Ключевой проект для программы Udacity Data Scientist Nano Degree

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

Starbucks предлагает один из самых фантастических сортов кофе в мире, и у многих людей могут быть разные представления о том, как работают их предложения. Клиенты женского пола чаще заканчивают на предложениях или чаще это делают мужчины? Каковы возрастные группы и диапазоны заработной платы? Какие предложения нравятся представителям каждого пола? и многие другие вопросы. Предложение может быть рекламой напитка или реальным предложением, таким как BOGO (купи один, получи один бесплатно). Некоторые пользователи получают предложения, другие не получают их вообще в определенные недели. Не все пользователи получают одно и то же предложение, это проблемы, которые мы попытаемся решить с помощью этого набора данных.

Описание входных данных

Портфолио.json

Containing offer ids and metadata about each offer (duration, type, etc.)

id (string) - offer id

offer_type (string) - a type of offer ie BOGO, discount, informational

difficulty (int) - the minimum required to spend to complete an offer

reward (int) - the reward is given for completing an offer

duration (int) - time for the offer to be open, in days

channels (list of strings)

Profile.json

Demographic data for each customer

age (int) - age of the customer

became_member_on (int) - the date when customer created an app account

gender (str) - gender of the customer (note some entries contain 'O' for other rather than M or F)

id (str) - customer-id

income (float) - customer's income

Transcript.json

Records for transactions, offers received, 
offers viewed, and offers complete

event (str)- record description (ie transaction, offer received, offer viewed, etc.) 

person (str)- customer-id

time (int) - time in hours since the start of the test. The data begins at time t=0

value - (dictionary of strings) - either an offer id or transaction amount depending on the record

Проблема Ожидания

Цель этого проекта — объединить 3 набора данных (транзакционные, демографические данные и данные о предложениях), чтобы определить, какие демографические группы лучше всего реагируют на тот или иной тип предложения. Этот набор данных представляет собой упрощенную версию фактических данных приложения Starbucks, поскольку базовый симулятор имеет один продукт, а Starbucks — несколько продуктов.

Мы достигнем этой цели с помощью следующих стратегий:

  • Изучение и визуализация данных.
  • Применение быстрого анализа данных.
  • Предварительная обработка данных.
  • Масштабирование числовых признаков.
  • Обучение контролируемых моделей обучения.
  • Оценка моделей с использованием выбранной метрики (точность) - затем выбор лучшей модели среди них.
  • Если есть потребности в улучшении, реализуйте GridSearchCV, чтобы найти лучшие параметры (чтобы повысить производительность выбранной модели).

Показатели и ожидаемый результат

Чтобы оценить производительность нашей модели, мы будем использовать точность. Этот показатель был выбран по следующим причинам:

  • Так как у нас есть простая задача классификации, т.е. либо: просмотренное предложение и завершенное предложение.
  • Это позволяет нам узнать, НАСКОЛЬКО ХОРОШО прогнозирует наша модель, сравнивая количество правильных прогнозов с общим количеством прогнозов (концепция точности).
  • Если модель не работает при первом обучении, я реализую GridSearchCV, чтобы найти лучшие параметры (чтобы улучшить производительность выбранной модели), а затем повторно протестирую модель.

Исследовательский анализ данных (EDA)

  1. Набор данных портфолио

Выводы из набора данных:

  • Нет нулевых или повторяющихся значений
  • Есть БОГО, информационные и дисконтные предложения
  • Единицей измерения столбца «сложность» являются доллары, что не отражает того, насколько сложно получить вознаграждение.

2. Набор данных профиля

Выводы из этих данных EDA:

  • Нет повторяющихся значений, 2175 пропущенных значений
  • Возраст клиентов распределяется согласно этой диаграмме

Изучение и визуализация «пола», «дохода» и «возраста»

Клиенты делятся на три категории по полу (мужчины, женщины и O)
 – клиенты-мужчины 8484, что составляет 57%;
 – клиенты-женщины 6129, что составляет 41 %; себя как О было 212.

Доход клиентов колеблется от 30 000 до 120 000, при этом доход большинства клиентов составляет от 50 000 до 75 000.

2. Набор данных расшифровки

Выводы из набора данных расшифровок.

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

Обработка данных

Набор данных профиля

Этот шаг включал:

  • Функция предварительной обработки идентификатора:

Основные шаги:

– Переименуйте столбец «id» в «offer_id».
– Измените единицу измерения в столбце «duration» с дней на часы.
– Переименуйте столбец «duration» в «duration_h», что означает, что единица измерения "часы"

  • Предварительная обработка «возраста»

Основные шаги:

— Замените 118 значениями NAN, это выбросы
— Измените тип данных о возрасте и доходе на (int)
— Удалите клиентов (удалить строки) без «возраст», «пол» и «доход» .
— Замените метку категории 'age_group' соответствующей числовой меткой следующим образом:
› 1: подросток
› 2: молодой-взрослый
› 3: взрослый
› 4: Пожилые люди

  • Предварительная обработка «дохода»

Основные шаги:

— Создайте столбец «income_range», затем замените категориальные значения «income_range» соответствующими числовыми значениями.
— Замените категориальную метку «income_range» соответствующей числовой меткой следующим образом:

› 1: средний (30 000–60 000)
› 2: выше среднего (60 0001–90 000)
› 3: высокий (более 90 000)

  • Предварительная обработка «пола»

Ключевые шаги :
замените категориальные метки «пол» на соответствующие числовые метки, как показано ниже:

› 1: F (женщина)

› 2: М (Мужской)

> 3: O

  • Предварительная обработка функции «became_member_on»:

Основные шаги:

— Удалите столбцы «возраст», «доход», «became_member_on» и «membership_days», так как они больше не нужны.
— добавлен новый столбец «start_year» для представления года, в котором клиент стал участником.
— добавить новый столбец «membersip_days», представляющий тип участника; новый, постоянный или лояльный в зависимости от дней
— Замените категориальный ярлык 'member_type' соответствующим числовым ярлыком
› 1: новый (участник с 1000 дней или меньше)
› 2: постоянный (1001–1600 дней членства)
› 3: лояльные (более 1600 дней членства)

Расшифровка набора данных

1. Переименуйте «время» в «time_h», чтобы обозначить время в часах.

2. Функция предварительной обработки человека
— переименуйте столбец «человек» в «customer_id»
— замените категориальные значения в столбце «customer_id» вновь инициированными числовыми значениями, соответствующими каждому идентификатору клиента, что привело к из предыдущей предварительной обработки для функции «id»

- Замените категориальные значения в «customer_id» новыми числовыми значениями из предыдущей предварительной обработки функции «id».

3. Предварительно обработайте функцию «значение»
— Извлеките каждый ключ, существующий в столбце «значение», в отдельный столбец, а затем удалите столбец «значение».
— Заполните все значения NaN в столбце «идентификатор_предложения». со значениями «Н/Д» (т. е. «Неприменимо»).
— Удалите столбец «Значение», так как он больше не нужен.

4 Предварительная обработка функции «событие»
— исключение всех событий «транзакция» или «получено предложение» из нашего набора данных clean_transcript.
— замена категориальных меток «события» соответствующей числовой меткой следующим образом:< br /> › 1: предложение завершено
› 2: предложение просмотрено

5. Предварительно обработайте функцию «offer_id»

Набор данных портфолио

Шаги, которые необходимо сделать:

– Переименуйте столбец «id» в «offer_id».
– Измените единицу измерения в столбце «duration» с дней на часы.
– Переименуйте столбец «duration» в «duration_h», что означает, что единица измерения — «часы».
— Нормализация функций «сложность» и «вознаграждение» с помощью MinMaxScaler.
— Создание фиктивных переменных из столбца «каналы» с использованием одноразового кодирования, а затем удаление столбца «каналы». .
— Замените 'offer_id' более простыми идентификаторами.
— Замените 'offer_type' целыми числами, представляющими каждый тип предложения, следующим образом:
1. BOGO
2. скидка< br /> 3. информационный

Объединить 3 набора данных

EDA (исследовательский анализ данных) основного набора данных

Анализ может дать ответы на следующие вопросы;

Вопрос 1 – Что обычно предлагается для каждой возрастной группы (подростки, молодые люди, взрослые и пожилые люди)?

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

Вопрос 2. На основе демографических данных клиентов с самым высоким доходом, мужчин или женщин?

Клиенты с высоким доходом (выше 90 000) — это в основном клиенты женского пола. Принимая во внимание, что клиенты со средним доходом (30 000–60 000) в основном мужчины.

Вопрос 3 — Кому требуется много времени, чтобы получить каждое предложение, мужчинам или женщинам?

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

Q4. Сколько новых членов Starbucks получает каждый год?

2017 был лучшим годом для Starbucks с точки зрения количества новых членов. Более 47% всех клиентов в нашем наборе данных зарегистрировались как участники в этом конкретном году.

Q5 — Какой тип рекламных акций (предложений) нравится каждому полу?

Диаграмма, которую мы получили, показала, что оба пола любят BOGO и дисконтные предложения, и они одинаково реагируют на информационные предложения, они оба, кажется, не заинтересованы в этом.

Вопрос 6. Какова средняя длина двух расшифровок для одного и того же клиента?

В среднем клиенту требуется менее 16 дней (372 часа), чтобы завершить предложение.

Вопрос 7. Сколько из всех предложений, просмотренных клиентами, они завершили?

Моделирование данных

В этом разделе я создал модель, которая может предсказать, будет ли клиент ТОЛЬКО ПРОСМОТРЕТЬ предложение или ПРОСМОТРЕТЬ И ЗАВЕРШИТЬ предложение. Поскольку эта модель фокусируется на событиях "Просмотр предложения" и "Просмотр предложения", я буду рассматривать только те расшифровки с событием "Просмотр предложения" или "Предложение завершено". Другими словами, я не буду включать стенограммы с событием «Транзакция» или «Получено предложение» в свои наборы для обучения и тестирования.

Что касается функций, я будурассматривать ТОЛЬКО те функции, которые, по моему мнению, важны для нашей модели для точного прогнозирования Target.

Эти функции:
[ '
time_h', 'offer_id', 'количество', 'вознаграждение', 'сложность', 'duration_h', 'offer_type', 'пол', 'возрастная группа' ', 'диапазон_дохода', 'тип_члена'].

Целевым ярлыком является "событие", которое будет содержать числовые значения
1. завершенные предложения
2. просмотренные предложения

Вот как выглядят данные, с которыми мы имеем дело:

Форма функций и меток:
︎- Форма обучающих функций: (65843, 11)
- Форма обучающих меток: (65843,)
- Форма тестовых функций: (16461, 11) )
- Тестовые этикетки Форма: (16461,)

Для части Моделирование я обучил 6 разных моделей и получил следующие результаты:

→ У нас была 100% точность как в обучающих, так и в тестовых наборах для 4 моделей (из 6)
→ Я выберу KNeighborsClassifier, чтобы максимально избежать переобучения. Я выбрал эту модель, потому что мы можем применить ее к постановке задачи бинарного результата о том, будет ли клиент просматривать или выполнять заказ.

В приведенной выше таблице показана оценка точности, связанная с использованием различных моделей обучения с учителем. У нас была 100-процентная точность как в обучающих, так и в тестовых наборах для 4 моделей из 6 моделей. Чтобы максимально избежать переобучения, я выберу модель, которая дала мне самый низкий показатель точности в тестовом наборе, то есть KNeighborsClassifier. На этой модели я получил 99,88% на тестовом наборе. Я знаю, что это очень высокая оценка, но я выбрал эту модель, потому что считаю, что ее можно использовать для решения задачи бинарного результата: от того, увидит ли покупатель предложение ( ПРОСТО ПОСМОТРЕТЬ) или он ( завершить предложение), т. е. ПОСМОТРЕТЬ И ЗАВЕРШИТЬ это конкретное предложение.

Заключение

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

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

  • Функция «возрастная группа», полученная из функции «возраст». Затем я заменил категориальные метки функции соответствующей числовой меткой следующим образом:

1: подросток

2: молодой взрослый

3: Взрослый

4: пожилой

  • Функция «income_range», полученная из функции «доход». который включает диапазон доходов, к которому относится доход клиента. Затем я заменил категориальные метки «income_range» соответствующими числовыми метками следующим образом:

1: средний (30 000–60 000)

2: выше среднего (60 001–90 000)

3: высокий (более 90 000)

  • Функция «member_type», полученная из функции «became_member_on». Конечно, функции категориальных меток были заменены соответствующими числовыми метками, как показано ниже:

1: новый (участник с 1000 дней или меньше)

2: обычный (1001–1600 дней членства)

3: лояльные (более 1600 дней членства)

В результате анализа данных мне удалось сделать следующие выводы:

  • Доход клиентов колеблется от 30 000 до 120 000, причем доход большинства клиентов составляет от 50 000 до 75 000.
  • Есть три «гендерные» категории, к которым относятся клиенты (M, F и O). Принимая во внимание приведенное выше наблюдение о том, что пропущено 2175 значений, клиентов-мужчин (8484 мужчины) больше, чем клиентов-женщин (6129 женщин), при этом 57% клиентов составляют мужчины по сравнению с 41% женщин. Однако 212 клиентов выбрали «О» в качестве своего пола.
  • Наиболее распространенным типом предложения среди всех возрастных групп является BOGO, за которым следуют предложения со скидкой. Принимая во внимание, что наименее распространенным предложением для отправки является информационное предложение. Я считаю, что предложения BOGO более привлекательны по сравнению с другими предложениями Starbucks.
  • Клиенты с высоким доходом (выше 90 000) — это в основном клиенты женского пола. Принимая во внимание, что клиенты со средним доходом (30 000–60 000) в основном мужчины.
  • И мужчинам, и женщинам требуется около 17 дней, чтобы завершить предложение.
  • 2017 год стал для Starbucks лучшим по количеству новых членов. Около 48% всех клиентов в нашем наборе данных зарегистрировались в качестве участников в этом конкретном году.
  • Оба пола любят предложения BOGO и скидки, и они одинаково реагируют на информационные предложения, кажется, что они оба не заинтересованы в этом.
  • В среднем покупателю требуется менее 16 дней (372 часа) для завершения предложения.
  • Женщины завершили примерно 75% просмотренных ими предложений, что на 16% больше, чем мужчины, которые только что завершили просмотр 58% предложений. Кажется, что женщин легче убедить в продвижении по службе, чем мужчин.

Улучшения

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

Я планировал использовать GridSearchCV для улучшения модели, которую выберу. Это был мой план, прежде чем получить эти очень высокие баллы на первом поезде.

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

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

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

Отражение ипризнание

Мне понравился этот захватывающий опыт построения моделей с реальными данными. Хотя у меня был предыдущий опыт разработки программного обеспечения, я узнал много нового из этого проекта. Вот некоторые из основных моментов:
— Построение конвейеров ML
— Построение конвейеров обработки данных
— Системы рекомендаций и многие другие футуристические идеи.
Обработка данных заняла много времени., это ответило на мою всегдашнюю науку о данных, говорящую: «обработка данных занимает 70% вашего времени :)». Это был опыт. Все было прекрасно.

Спасибо Старбакс за данные, спасибо Удасити

Репозиторий GitHub, содержащий файлы проекта вместе с наборами данных, можно найти по этой ссылке.