Hey eCommerce apps!
How are you encouraging your current users to make their next purchase?
- Sending an email with product recommendations?
- Keep them subscribed to general campaigns?
Cross-selling, or selling your existing customers new and related products, is a massively under-utilized strategy, but it’s incredibly profitable—and this is verified by almost every metric:
- It costs 5x less to keep an existing customer vs. attracting a new customer
- It’s over 3x more likely to complete a sale with an existing customer vs. selling to a new customer
- …and repeat buyers spend an average of 67% more than new customers
So, it’s clear we need to re-engage customers who have already made a purchase…but how can we do it?
Answer: Personalized, specific product recommendations, sent via push notifications.
See, you’d never want to load your entire catalog of products into a typical push notification service—You’d have far too many messages to handle, and each message would get a relatively low click-thru rate if you bulk sent these hyperspecific products.
This is what makes Aampe different—You can easily write relevant messages including all of your specific products and categories en masse (They can be directly downloaded from your CMS), and Aampe will automatically deliver each of those messages to the appropriate users according to their specific tastes and preferences.
Why push notifications vs. email?
There are a few reasons, actually.
Push notifications tend to have more singular focus, they can be sent more frequently, they have a higher deliverability rate, and they’ve been shown to be 10x more effective in driving CTRs vs email…just to name a few.
So, your hiking lovers will get push notifications showcasing new and interesting hiking equipment, and your fashionista users will get push notifications with suggestions on products that fit the latest style trends.
Aampe combines the user preferences it learns from individual user history/interactions with messaging (Sami likes casual-wear) with a recommender system based on the consumption history of all other users.
The result is push notifications that look like this:
Each notification is relevant, useful, and offers value.
How Aampe’s recommender system works
This is a short overview of the design decisions and algorithm choices we made in building a recommendations engine that is generalizable across customers and scalable for large catalogs.
If you’re more interested in the output than the design, feel free to jump down to the “How does this play out in real life?” section for a demonstration of behavior.
Coming to design a recommendation engine, we were faced with the following constraints:
- It should be generalizable to all of Aampe’s customers
- It should support large item catalogs (>10M)
- It should support large user bases (>50M)
- It cannot assume there is any item rating data
- It should cater for the long-tail
- It cannot afford a long cold-start and should be able to start recommending after the first consumption event and
- It should be cost-efficient
With the above constraints it was clear that collaborative filtering techniques, on which many recommendation engines are based, won’t be ideal in this scenario. Collaborative filtering wouldn’t have been able to function well with the data sparsity, they would cost a fortune in matrix factorization, and they’d likely fail to deliver useful recommendations, given that most users haven’t bought all that much.
Content-based filtering techniques are a good alternative, but those wouldn’t easily generalize across the Aampe customer base. Different customers come with varying levels of catalog metadata and we didn’t want to build an algorithm that only works for a subset of customers (or would require a huge amount of data organization work).
Instead, we built a recommendation engine that is based on item consumption sequences.
The base assumption of this technique is that if a user consumes item A and then item B, a different user consuming item A will also be interested in item B.
Let’s take a look at this simplified item consumption graph of User Blue and User Red for an illustration of this base assumption:
First, the facts:
- User Red consumed items A, B and C; and
- User Blue consumed items A, D and B
Since User Blue consumed item D after item A, and User Red consumed item A, there is some likelihood that user red would be interested in item D.
Similarly, since User Red consumed item C after consuming item B, this means item C would be a good thing to recommend to User Blue next.
1. Maintain two tables for all users
1.1. Consumption history: a record for all item consumption events with timestamp and item_id
1.2. Messaging history: a record for all items ever messages about (so not to recommend the same item over and over again)
2. Build an item-to-item transition matrix from the consumption history matrix that captures the likelihood to consume item B having consumed item A. The likelihood score is a function of how many users make the consumption sequence, the amount of time that has passed between the two consumption events and type of consumption event (add_to_cart, purchase, etc.).
3. Generate a recommendation for a user:
3.1. Joining their consumption history with the first item in the transition matrix
3.2. Aggregating over the second item
3.3. Sort the aggregated scores in a descending order
3.4. Pick the item with the higher score that does not appear in the messaging history table
You can see that this algorithm is generalizable because it doesn’t need any rich catalog metadata or item ratings.
It also involves fairly straightforward computations and therefore scales easily to millions of catalog items and 10s of millions of users cost-efficiently.
This algorithm is also able to recommend items starting the first consumption event (no cold start problem, at least for active users).
…but what’s really interesting is that catering for the long tail comes built-in when using consumption sequence recommendations—A niche category user will immediately access the transition matrix in that category’s rows and receive recommendations about their niche items of interest without any algorithmic juggling.
How does this play out in real life?
Paul’s going camping
To give you a gimple on how the system behaves, here’s the consumption activity of a real user named Paul, looking at trekking equipment in an e-commerce app. Paul browses packs, tents, poles, an umbrella and a sleeping bag. He also adds the tent and the sleeping bag to the cart.
Some time later, when Paul qualifies for a recommendation push notification, he receives the following message:
Note that this notification is timely, specific, relevant, and speaks to what we’ve learned from Paul from his recent interactions.
We can also introspect the algorithm by looking at the recommendation matrix generated in step 3 in the section above and find the top 5 items (following the one that was recommended) for that specific user and their likelihood scores:
Remember, these potential recommendations are all based on what other users consumed following a consumption history that’s similar to Paul’s, so they’re all likely to be highly-relevant and useful suggestions, which means Paul is likely to be interested in them as well.
Connect your users to the things they’ll love with Aampe
Simply having products in stock doesn’t make your app unique, valuable, or irreplaceable. Being able to offer your users unique and helpful, data-backed recommendations does.
Integrate your product catalog into Aampe in just a few clicks, and start sending your users relevant, useful messages today.
Your bottom line will thank you.
Are you ready to start sending hyper-relevant product recommendations via push? Drop us a line via firstname.lastname@example.org!
Do you want to help us build systems like this one? Ping us via email@example.com! We’re always keen to get to know you!