35

Starbucks Offer Personalization — Sending the right offer to the right customer

 4 years ago
source link: https://www.tuicool.com/articles/jAje6r6
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Starbucks is arguably one of the most successful coffee chains in the world. It is also one of the pioneers to introduce its own rewards apps back in 2010. Customers can get promotional offer notifications, order and pay through the mobile app and earn reward points for their orders. This allows Starbucks to not only connect with customers directly and improve brand loyalty, but also collect valuable first- hand customer information as well as their transactional behaviors.

But here is the question - do all the users get the same offers? Imagine you are a data scientist at Starbucks, what would you do to determine what the most effective offers are to send to each individual customer that he/she is most likely to use to improve user engagement?

Goal

In this project, I take on this challenge and my goal is to use the demographic and behavioral attributes of the users collected through the rewards app to predict what the best-personalized offer is to send to individual customers that would maximize the conversion rate.

Also, I want to see whether there are any distinct subgroups within the entire customer base that exhibit certain patterns of demographics and buying behaviors, which set them apart from one another.

Datasets Overview

There are three data files:

portfolio.json— contains offer ids and metadata about each offer. It contains the following attributes:

  • id (string): offer id
  • offer_type (string): type of offer, ie BOGO (buy one get one free), discount, informational(an advertisement for a drink)
  • difficulty (int): the minimum required spend to complete an offer. There are only minimums for BOGO and discount offers but none for informational.
  • reward (int): reward given for completing an offer
  • duration (int): time for offer to be open, in days
  • channels (list of strings): mobile, email, etc.

profile.json— demographic data for each customer.

  • id (str): customer id
  • age (int): age of the customer
  • became_member_on (int): date when customer created an app account
  • gender (str): gender of the customer (some entries contain ‘O’ for other rather than M or F)
  • income (float): customer’s income

transcript.json— records for transactions and usage of offers.

  • person (str): customer id
  • event (str): record description (ie transaction, offer received, offer viewed, offer completed)
  • time (int): time in hours since start of test. The data begins at time t=0
  • value: (dictionary of strings) — either an offer id or transaction amount depending on the record

The transcript data is the main dataset I will be using to engineer user behavioral features. It contains simulated data that mimics real customer purchases and offer usages on the Starbucks rewards app including the timestamp of purchase and the amount of money spent on a purchase. This transactional data also has a record for each offer that a user receives as well as a record for when a user actually views the offer. There are also records for when a user completes an offer.

Here is the tricky part. Every offer has a validity period before the offer expires. A user might receive the “buy 10 dollars get 2 dollars off offer”, but the user never opens the offer during the 10 day validity period. The customer spends 15 dollars during those ten days. There will be an offer completion record in the data set; however, the customer was not influenced by the offer because the customer never viewed the offer. For the informational offers, if a user makes transactions within the validity period after viewing the offer, he will be considered as completing the offer.

Challenge

Given those rules and exceptions for offer completion, the data cleaning and feature engineering part become especially important and tricky.

The key part of the project is summarizing each customer’s transaction behaviors from the chronological activity log to attribute the right transactions to the right offer types and track down their conversions for different offers on the user level. Those engineered features will then be combined with the user profile information such as income, age, gender and when their membership started to provide a holistic view of each customer.

With that in mind, my approach to tackling the problem will follow the below steps.

Road Map

1. Exploratory Analysis & Data Cleaning: Understand the three datasets and prepare the datasets

2. Feature Engineering: Create attributes from the transaction log on the user level

3. Machine Learning: Build a multioutput classification model to determine the offer types ranked by likelihood of conversion

4. Clustering: Find subgroups within customers that Starbucks can target differently according to each group’s distinct demographical or behavioral patterns.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK