Давайте начнем понимать и анализировать клиентов Starbucks, как они реагируют на различные предложения, чтобы Starbucks, в свою очередь, могла помочь своим клиентам как можно лучше!
Введение:
Starbucks — один из крупнейших и известных брендов кофе в мире, и у него есть по крайней мере один магазин в США! Только в США Starbucks удалось привлечь 18,9 миллионов человек, и это число неуклонно растет, и во всем мире у нее 31 256 магазинов!!! Таким образом, Starbucks несет большую ответственность за то, чтобы предоставлять своим клиентам большую ценность с помощью различных предложений, чтобы они могли получить эти услуги. клиенты довольно регулярно, а также новые потенциальные клиенты, ссылаясь и многими способами. В рамках программы Udacity Nano Degree давайте попробуем расслабиться и изучить, как участники реагируют на различные предложения в Starbucks. Я благодарю Udacity и Starbucks за предоставление смоделированных данных для этой завершающей задачи, и теперь пришло время приступить к проекту :)
Наша стратегия:
Я рекомендую всем следовать процессу CRISP-DM при работе над проектами по науке о данных, чтобы вы могли проанализировать и ответить на все вопросы.
CRISP-DM — это распространенный процесс, используемый для поиска многих решений в науке о данных.
Этапы этого процесса CRISP-DM включают:
- Понимание бизнеса
- Понимание данных
- Подготовка данных
- Моделирование данных
- Оценка
- Развертывание
Наборы данных для этого проекта предоставлены Starbucks & Udacity в трех файлах:
- Portugal.json — содержит идентификаторы предложений и метаданные о каждом предложении (длительность, тип и т. д.).
- profile.json — демографические данные по каждому клиенту.
- расшифровка.json — записи транзакций, полученных предложений, просмотренных предложений и завершенных предложений.
Чтобы получить представление об этих наборах данных, мы хотели бы объединить их, а затем применить к ним методы анализа данных и моделирования. Давайте посмотрим на файлы JSON ниже:
расшифровка
- event (str) — описание записи (т. е. транзакция, полученное предложение, просмотренное предложение и т. д.)
- person (str) — идентификатор клиента
- time (int) — время в часах с начала теста. Данные начинаются в момент времени t=0
- value — (dict of strings) — либо идентификатор предложения, либо сумма транзакции в зависимости от записи
портфолио
- id (string) — id оффера
- offer_type (string) — тип предложения т.е. BOGO, дисконтное, информационное
- сложность (int) — минимальная сумма, необходимая для завершения предложения
- вознаграждение (инт) — вознаграждение дается за выполнение предложения
- duration (int) — время открытия оффера, в днях
- каналы (список строк)
профиль
- age (int) — возраст клиента
- стал_member_on (целое число) — дата, когда клиент создал учетную запись приложения.
- гендер (str) — пол клиента (обратите внимание, что некоторые записи содержат «O» вместо M или F)
- id (str) — идентификатор клиента
- доход (float) — доход клиента
Подготовка данных:
Это считается важным шагом, и он занимает большую часть времени перед задачей моделирования и задачей развертывания. Используя различные методы очистки данных, такие как удаление строк и столбцов, которые не требуются, горячее кодирование, объединение фреймов данных и т. Д., Используются для настройки фреймов данных, чтобы мы были готовы к задаче моделирования!
На этом этапе данные, которые очищаются и обрабатываются, будут выглядеть так:
Моделирование:
Я решил создать матрицу user_item, чтобы применить знаменитый алгоритм FunkSVD для рекомендации новых предложений клиентам аналогичных предложений, а также рекомендовать предложения, которые являются лучшими, потенциальным новым клиентам. FunkSVD использует матричную факторизацию, и у нас есть скрытые факторы, созданные FunkSVD, чтобы найти похожих клиентов и предоставить им аналогичные предложения для существующих клиентов. Netflix использует алгоритмы рекомендаций, такие как FunkSVD, чтобы рекомендовать вам лучшие фильмы / шоу на основе вашего вкуса и интересов, и если вы новый пользователь Netflix, он либо попросит вас понравиться некоторые жанры в соответствии с вашими интересами, либо если вы пропустите это. порекомендует вам суперхиты и самые популярные сериалы/фильмы! Таким образом, мы будем использовать знаменитый алгоритм FunkSVD.
Построение матрицы user_item займет больше времени из-за наличия большого количества записей, и вам придется вычислять для обучающей матрицы user_item, а также для тестовой матрицы user_item.
Алгоритм:
Мы используем FunkSVD, чтобы разделить матрицу на пользовательскую матрицу, матрицу скрытых функций и матрицу предложений. FunkSVD используется потому, что внутри матрицы отсутствуют значения, а обычный SVD просто не работает. Чтобы проверить наш прогноз на тестовом наборе матрицы user_item, мы разделили записи на обучающий набор (70%) и тестовый набор (30%). Мы хотим использовать предыдущие записи (более раннее время) в качестве обучающего набора для построения нашей модели, а затем использовать ту же модель для проверки более поздних записей.
Метрики:
Мы можем оценить нашу модель, используя среднеквадратичную ошибку, и отслеживать итерации алгоритма FunkSVD, который мы использовали. Алгоритм следующий: для каждой пары пользователь-предложение, если мы отправили предложение, то вычисляем ошибку как фактическое минус скалярное произведение пользователя и предложения скрытых функций, а затем суммируем все квадратные ошибки для матрицы
Наша матрица user_item выглядит так:
(пользователь будет настоящим user_id, а товар будет offer_id):
Оценка:
Выполнив FunkSVD на матрице обучения user_item со скрытыми функциями 5,10,15. Затем мы выполняем среднеквадратичную ошибку (MSE) для тестовых данных и для 15 скрытых функций имеем MSE 0,003823; Для 10 скрытых функций у нас есть MSE 0,006241; Для 5 скрытых функций у нас есть MSE 0,022370. Согласно нашим экспериментам, модель с 15 скрытыми функциями эффективнее других, потому что чем больше скрытых функций, тем лучше будет корреляция между пользователями и предложениями.
Какими будут рекомендации предложения для существующего клиента?
Здесь мы получаем user_mat и offer_mat из алгоритма FunkSVD. user_mat равен [user_id(rows) Xlatent_factors(cols)] и offer_mat равен [latent_factors(rows) X offer)id(cols)] и в приведенном ниже представлении для user_id '0610b486422d4921ae7d2bf64640c50b' мы рекомендуем ему больше предложений на основе его текущие предложения, поскольку он является существующим клиентом!
Какими будут новые рекомендации для потенциального нового клиента?
Вы можете видеть, что предложение 7 является лучшим предложением с высокими продажами, что означает, что людям понравилось предложение 7, а также остальные рекомендации предложений!
Какой процент гендерного населения рассматривает предложение «BOGO» («купи один, получай другой») и стандартное предложение скидки?
Мы видим, что для мужского населения «скидка» в основном предпочтительнее, чем «бого», а для женского населения в Starbucks они немного предпочитают «бого», чем предложение «скидка», а для другого населения и людей, которые не хотят для того, чтобы разделить свой пол, немного предпочитают предложение «скидка», чем предложение «bogo».
Какой процент гендерного населения отвечает на определенные платформы такими предложениями, как «веб-источник», «электронная почта», «мобильный», «социальный»?
мы можем ясно видеть, что все предложения, на которые ответило все население, через «Социальные сети». В большинстве женщин они ответили на предложения через «Социальные сети», а затем через «мобильные» SMS, а для мужского населения они ответили на предложения через «Социальные сети», а затем через «мобильные», а затем через 'паутина'!
Улучшение:
Несмотря на то, что мы создали механизм рекомендаций, он не кажется полезным для потенциальных новых клиентов. Итак, для новых клиентов я использовал системы рекомендаций на основе рейтинга, чтобы выдавать лучшие предложения. Эта проблема «новых клиентов» также называется «проблемой холодного старта» в науке о данных. Итак, теперь эта проблема решается с помощью ранговой системы, и мы можем продолжать рекомендовать старых клиентов, а также потенциальных новых клиентов!
Вывод:
Мы ответили на все вопросы, такие как предоставление новых рекомендаций новым и существующим пользователям, выяснение наиболее продаваемого предложения, реакция населения на определенные предложения и «канал», через который они реагируют на определенные предложения. в науке о данных существует много способов, и нет правильного или неправильного ответа как такового.
Продвижение через социальные сети — лучшее решение!
Это мой второй блог по науке о данных, надеюсь, он вам понравится, спасибо за внимание, и любые советы или любые вещи, которые следует улучшить из дальнейших блогов, приветствуются, поскольку они действительно помогут мне совершенствоваться и учиться!
Чтобы просмотреть код:
Чтобы связаться со мной через Linkedin:
https://www.linkedin.com/in/kaushik-tummalapalli/
Я хотел бы подключиться :) Увидимся в следующем блоге, а пока продолжайте суетиться и берегите себя!
Следующий блог будет основан на FunkSVD!