I've been reading tons of papers detailing methods on predicting customer attrition, but none of them have mentioned using product usage data over time. We keep detailed logs of how many times User A uses X feature in the past month, but I'm not sure how to incorporate these into a predictive model. For example, the model ideally would look at past cancellations and look at their trending behavior a few months before they cancel their contract. Unlike other time series papers I've read, we don't want to predict the customers' usage based on their past usage -- we want to predict whether or not based on present usage, a customer is on track to cancel.


2 Answers 2


One option would be to approach this as a classification problem, rather than a time-series prediction problem. Find customers who canceled, and create a feature vector of their usage of each feature, concatenated over several months before cancellation. For example if you had usage data on two features (F1/F2) and three-month window (M1-M3), your feature vector would look like [F1_M1 F2_M1 F1_M2 F2_M2 F1_M3 F2_M3].

Then, you need to mine for many negative examples, by grabbing random three-month windows from customers who did not cancel, and computing the same features.

You can then use any standard machine learning classification machinery (e.g. SVM) to try to find features which discriminate between these two groups. If this has above-chance accuracy, then you can use the decision value of this classifier (how strongly it believes you are in the "cancel" class) as a signal that a user is about to cancel.

Exactly how you set the time window will depend on some intuition about your product. You may also want to try using features from, say only 2-3 months before cancellation and see if you can predict cancellation 1 month ahead of time (which gives you more time to retain that customer).

  • $\begingroup$ This is a pretty interesting approach. Can you please elaborate on the mining for negative examples? $\endgroup$
    – lighthouse
    Jan 14, 2015 at 19:42
  • 1
    $\begingroup$ Currently we're using random forests/ID trees/logit regression to predict based on other features. If a company did not cancel, why does picking a random segment of time work? $\endgroup$
    – lighthouse
    Jan 14, 2015 at 19:45
  • 2
    $\begingroup$ You want to give your model examples of "normal" behavior (when cancellation is not imminent) as well as "about-to-cancel" behavior. It could be that usage of certain features tends to oscillate up and down during normal usage, so you'll see decline in feature usage in random windows as well as about-to-cancel windows. Hopefully the model will find some usage pattern that distinguishes about-to-cancel windows from random "normal" windows. $\endgroup$
    – Chris
    Jan 14, 2015 at 19:51

I agree with Chris, reducing the churn into a classification problem is a good direction. I suggest that you will build the classification dataset with respect to the situation your classifier will have to cope with.

In most churn problems you actually have to predict, "Out of the active users today, who will cancel in 30 days". In order to get such a dataset you can go 30 days before, see who were the active customers back then and label them by whether they canceled.

Of course you can do it with many points in time. Actually, many time in is beneficial to go deeper into history and decide what is the churn period you should use.

Note that if you had taken all the historical data your classifier will be trained to answer a different question. I don't think that you should NOT use the entire historical data. There are many benefits to using it - you get more data, you are less sensitive to seasonality, and so. However, you should evaluate your classifier on the way it will be evaluated in production. All other features, classifiers or what ever you will built on different dataset should aid to increase performance on this measure.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.