Thinking out loud about churn

5 minute read

In software as a service, churn plays a major role when analyzing cash flows and creating forecasts. The simplest way to define it, is as the percentage of number of users that have unsubscribed from the service in a given time frame. This definition works best when all users represent the same value (for instance, they all pay the same monthly subscription). When there are different tiers representing different payments for different users, churn is better defined as the proportional lost in revenues for the given timeframe.

As an example, let’s say our hypothetical saas company had 100 users at the end of the previous month and 90 at the end of this month. This means we lost 10 users out of 100, which represents a 10% decrease. If we say \(N_{0}=100\) and \(N_{1}=90\) then we generalize this as:

\[Churn_{1}=\frac{N_{1}−N_{0}}{N_{0}}\] \[Churn_{1}=\frac{N_{1}}{N_{0}}−1=\frac{90}{100}−1=−10%\]

In the same way, the churn for the second month will be calculated based on the number of users at the end of month 1 and the end of month 2. So let’s imagine that by the end of month 2 we have lost 10 users again, our churn would be

  • We lost the same number of users, why is churn different?
    • Well, in the second month we lost the same number of users… but from a total number that was smaller. In this case, the proportion of users lost was bigger.
  • What if we assume that we lose a fixed percentage of users per month (something like 10%)?
    • In that case, since the total number of users decreases the number of users we lose every month is going to decrease too.

So, let’s say we know what our churn is (based on historical data or maybe just because we want to test different assumptions). Can we find out the number of users at the end of this month if we know the number of users at the end of the previous month and our churn rate? we sure can, we just need to rearrange the previous equation.

\[N_{1}=(Churn_{1}+1) \cdot N_{0}\]

Note that churn here is expressed in decimal form, so -10% is -0.01. In addition, the convention would be that churn here is a negative number. If we change this convention because we know that churn is bad so it has to be negative ;D. Then we can rearrange it again as.

\[N_{1}=N_{0} \cdot (1−Churn_{1})\]

In our previous example we had that \(Churn_{1}=10%=0.1\) and \(N_{0}=100\) so:

\[N_{1}=100 \cdot (1−0.1)=90\]

Cool, we are making progress! Can we now calculate what would be the number of users after month 12 with a constant monthly churn of 10%? Well, not yet but we are almost there… let’s try.

\[N_{1}=N_{0} \cdot (1−Churn)\] \[N_{2}=N_{1} \cdot (1−Churn)\] \[N_{3}=N_{2} \cdot (1−Churn)\]

Yes, we would have totally made that work in excel with 12 rows where each row depends on the previous one. We could try solving it directly for just three months:

\[N_{3}=N_{2} \cdot (1−Churn)\] \[N_{3}=(N_{1} \cdot (1−Churn)) \cdot (1−Churn)\] \[N_{3}=((N_{0} \cdot (1−Churn)) \cdot (1−Churn)) \cdot (1−Churn)\]

Wow, that’s feeling like a lot… let’s keep going

\[N_{3}=N_{0} \cdot (1−Churn) \cdot (1−Churn) \cdot (1−Churn)\]

Ok, that wasn’t too bad… especially because now we can just represent it as

\[N_{3}=N_{0} \cdot (1−Churn)^{3}\]

Which is great, because \(N_{3}\) only depends on the initial number of subscribers \(N_{0}\) and our churn rate. So now we can take a leap of faith and generalize it as:

\[N_{t}=N_{0} \cdot (1−Churn)^{t}\]

Perfect, now we can calculate the number of subscribers at any point in time based on starting point and churn rate.

But charts are soooo much better, let’s do one and start with \(100,000\) subscribers instead of \(100\) to make rounding easier.