Dynamic Pricing: Increasing App Subscription Revenue with Machine Learning

Editor’s note: This is a guest post from Jakub Chour. Jakub is co-founder of Digicamp.cz and currently works as a freelance mobile growth and subscription optimization consultant.

As publishers are looking for new revenue streams, pricing is often neglected. Most of the current pricing methods rely either on surveys, segmentation, or consulting approaches (which are over the budget for most of the smaller developers). There are also dynamic purchase predictions, which are fast, but not very reliable because they depend on black-box algorithms (Firebase predictions) or e-commerce based RFM analysis, which is not very helpful for most apps (like CleverTap’s RFM).

There is a third way, though. Using the few data points you have and machine learning (good old regressions spiced up with some new methods), you have a solid chance of getting 5-15% revenues from new subscribers, or getting an additional up-sale by offering some hefty in-app purchase.

How can you benefit from dynamic app pricing?

Our pricing surveys on users show that apps are usually used by many user groups—hobbyists, random users who were just curious, and pros, for example.  VSCO (great app, by the way!), mentioned by Nico Wittenborn in the latest SubClub podcast, is a great example of the way many user groups can use an app. Some people find great value inside the app and are willing to spend much more if they can, like business professionals. Others will use the app only a few times, which means their value is much much lower. 

All segments can be served special offers with the advanced segmentation, but because it is based on behavioral events, it usually takes a long time. This diminishes its predicting value in the first days, and lets users escape moments when they’re prone to purchase.

Using dynamic pricing based on technography events (see predictors of success) helps instantly predict the probability of purchase during the user’s first session, and allows you to show the best-possible offers soon enough to catch a higher proportion of users early in the funnel and monetize them. 

Of course, there will be users unwilling to purchase at any price point—and this is also important to predict as fast as you can to expand ad delivery to such users and increase your impression inventory.

dynamic pricing
Relying on a few events has also a few drawbacks. Mainly, it’s not for everyone, and especially complicated for casual and hyper-casual games because those games don’t have subscriptions, but rely on in-app purchases instead. In-app purchases can have hundreds of variations, which means that regression models are much less reliable.

Also, the bigger the role user-generated content (dating apps, social networks) has for your app, the less you’ll be able to predict it, as it depends on the availability of that content. If you have your timeline empty, you get no-one to pay for the subscription.

Predictors of a successful purchase

You might have guessed that in every model, platform (iOS, Android) and country play a huge role. That’s basic common sense. Apart from that, though, there are a few other predictors of subscription purchases, including the following:

  • User region (inter-regional  differences are often the same as international ones, like 19% difference in conversion-rate between Texas and California in one app)
  • User device model (for example, users with an iPhone 11 Max had, in one case, 1.4x better conversion compared to the iPhone XS)
  • Time from registration to purchase screen view (most of the subscriptions happen during the first few days)
  • Total session count. 

You might be wondering why there’s no more behavioral data like the number of songs played, swipes, tasks completed, and more. These metrics are,  of course, also influential, but as every app is different—some have onboarding, some don’t, some are expected to be used every day, some only a few times a month—behavioral modeling adds a huge drag to regular regression models you might want to use. 

What should the dynamic pricing prediction model look like? 

Dynamic pricing prediction has two parts: It measures the probability of a user purchasing, and, if so, for how much. The most “accessible” way to predict likeability of purchase seems to be random forest regression modeling. I recommend using more robust methods such as gradient boosting, which allows you to work better with a different data sample size— typical for prediction of purchase (95% of your customers will stay on freemium, only 5% and less will buy). 

You should also probably have more than one model in use, divided by regions. With each region having a different conversion rate, every additional region (input) gives the “one-size-fits-all” regression model an unnecessary burden.

Be aware that this kind of regression model is designed to deliver continuous values, so you get a 0-100% probability of purchase. This alone won’t get you closer to dynamic pricing. 

For the second part, you can either apply another model for a subset of users who are likely to pay (K-means clustering or simple classification models comes to mind), or you can decide to divide your high purchase probability users into segments and simply presume that higher probability equals higher price. I’m more inclined to the latter option. 

The reasoning behind dividing your high purchase probability is that the more models you apply on the same data, the higher the data-bias, which leads to lower prediction ability. Even simple models based on the probability of purchase have 70% accuracy, which can be further developed.

Segmentation by the probability of purchase seems necessary for the vast majority of users, as the paying user’s prediction is distributed more equally than the prediction of non-payers, where the majority has a really low chance to purchase. [example data for a mid-large non-gaming app based mainly in the US]
Segmentation by the probability of purchase seems necessary for the vast majority of users, as the paying user’s prediction is distributed more equally than the prediction of non-payers, where the majority has a really low chance to purchase. [example data for a mid-large non-gaming app based mainly in the US]

Where does it happen?

You get your CRM, your internal user database, and a lot of Jira tickets going to your devs. As the regression model itself is relatively straightforward to do, the simplicity of integration has the same importance. As I see it, you have two  options:

1. Score users on-the-flight

Every time a user checks the purchase screen, you can score him/her. The advantage here is that you can also count on additional events that can play a role like the number of purchase screen views or time from registration. The disadvantage is that you need to have your internal API quick enough to deliver in under 50-100 milliseconds, ensuring that you’re able to fetch the right SKU from Google Play or the App Store in a reasonable time. This makes predictions more accurate, but requires significant effort for the devs.

2. Send data to the connectors you already have

Most of the current CRM tools (Braze, Leanplum, CleverTap, etc.) or push and email delivery tools such as OneSignal have API ready to ingest additional data on your customers. Make use of it and send the data you have in your  CRM tool to the API—and fetch it back. You will only need a marketer-friendly tool like Zapier or Integromat. 

what the API may look like. Don’t forget that you also should be prepared for the situation that one or more data points are not available.
What the API may look like. Don’t forget that you also should be prepared for the situation that one or more data points are not available.

Practical implications

As I’ve shown in this article, dynamic pricing isn’t really hard to do if you really want to do it. The question is: should you want to? Dynamic pricing brings business ethics and public reputation considerations into question, such as serving different users different prices for the same product. 

But many companies already do that in another way: by just charging different prices in different countries. I see dynamic pricing as an extension of that practice, which doesn’t discriminate against any gender, race, age, or anything, but solely on the user’s ability to pay vs. the user’s perceived value. If you’re worried about that, you can still use it in a “good” manner and simply lower the subscription for those who see lower value in your app (those who are willing to pay less).

In any case, price discrimination is here to stay, and you can choose to take a part in it to raise your revenue or not. In the future, however, we will continue to see these kinds of solutions implemented more and more often.