I have a requirement where I want to predict whether the client will renew the subscription or not.

And the data is something like below. enter image description here

Basically client's subscription end date can be anything. And I want to predict whether client A will renew the subscription in Oct or not. And Similarly client B will renew it in December or not.

And I want to run the model every day because every client's subscription end date can be anything. Along with this I have various features of the client i.e. Feature 1, 2, 3 etc which can be used to train the model. My question is, how do I structure the data so that I can run the model everyday and what would be my output variable. What kind of model I can fit. I was thinking of survival analysis but not sure if the data structure I have can be used for survival analysis or not.

Need your suggestion to approach this problem.


1 Answer 1


That data structure is fine. You need to have a dataset of historic subscriptions (I.E. subscriptions that have now finished), where the output variable is "Renewed/ Not renewed". You can train your model on that dataset and then make predictions each day as to whether or not each "Active" subscription is likely to be renewed when it reaches the end date.

As to what kind of model you can train, the "usual suspects" should be fine for this. LogisticRegression, XGBoost, RandomForests and so on can all handle this kind of problem.


So lets say for example I have a 3 month subscription that runs from 1st Jan to 31st March. I decide to renew for another 3 Months until 30th June. I then renew again until 30th September. YOU have the same subscription from 1st Jan to 31st March, and you also renew until 30th June. You then decide NOT to renew. In that case, your data should look like this:

enter image description here

The Status column shows subscriptions which are Finished, and which are active. You should train the model against Finished subscriptions only and make predictions against Active ones. The target variable is the "Renewed" feature. For testing purposes you should split the Finished subscriptions into a 75/25; train the model on the 75% and test it against the 25%

Hope that clarifies.

  • $\begingroup$ Thank you for the reply. When a client's subscription is renewed, the status remains active. And when it is not renewed, it becomes cancelled. So how will the model know that the subscription will end on a future date and it gives prediction beyond future date. So till today the client is active and I can consider it as sensored data in survival analysis. But at the same time I also know that the client's end date is in Oct. So until Oct anyways it doesn't need prediction. And will my test dataset would be just the active records ? Not sure if I am able to explain the requirement properly. :) $\endgroup$
    – Akash
    Commented Aug 6, 2019 at 10:25
  • $\begingroup$ for the client A, B and C what would be the output variable in train dataset.? I am actually not sure what to take in train and test dataset. $\endgroup$
    – Akash
    Commented Aug 7, 2019 at 10:22
  • $\begingroup$ @Akash hey, sorry I missed that you had replied yesterday. Your output variable needs to be 1 denoting a "renewed" subscription and 0 denoting a "not renewed" subscription; but you can't have that for "Active" subscriptions because you don't know if they will be renewed or not yet. If I understand you correctly you're saying that for example for client A if they renew on 1st October then their row will simply be updated to have a later end date? I would say that at that point you need to treat that as a new row, and to have the original row represent the original subscription. $\endgroup$
    – Dan Scally
    Commented Aug 7, 2019 at 10:39
  • $\begingroup$ @Akash I edited my answer to clarify a little $\endgroup$
    – Dan Scally
    Commented Aug 7, 2019 at 10:45
  • $\begingroup$ Appreciate your help. Now I got it. Thank you. $\endgroup$
    – Akash
    Commented Aug 7, 2019 at 12:11

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.