The simple retention model (SRM) are applicable in situations where a customer enters into a contract. The contract specifies that the customer must make regular payments at equal time intervals (most commonly monthly). The number of payments to be made is also set at the start of the contract (e.g. 12 monthly payments in a year long contract). Each payment must be of the same amount. In this model, customers are not allowed to cancel the contract before it expires.

Here’s a little example:
A customer signs up to a 12 month mobile phone plan, paying $60 per month for the phone and services. The customer has to pay this amount every month, regardless of whether they decide they hate the phone or whether they drop it on tiles and smash the screen (again).

There is a lot of information a business may wish to know about the relationships these customers have with products of this type:

We have to start very much with the basics though, and work towards answering these more useful questions.

Customer Annuity Model

Suppose that new customers sign a contract to make T payments of amount m, and cannot cancel the contract.
In finance terminology, these customers are referred to as annuities. This means that the company invests a certain amount to acquire a customer with the knowledge that they will recieve T future payments of amount m.

These payments can be made in two ways, which leads to two different formulae for calculating the lifetime value of relationships with these customers:

  1. Payment at the end of the payment period. In finance speak, this is the Present Value of an Ordinary Annuity:

\[PV_T= \sum_{t=1}^{T}\left( \frac{m}{(1+d)^t} \right) = m\frac{1-(1+d)^{-T}}{d} \tag{1}\]

  1. Payment at the start of the payment period. In finance land, this is the Present Value of an Immediate Annuity:

\[PV_T= \sum_{t=0}^{T-1}\left( \frac{m}{(1+d)^t} \right) = m(1+d)\frac{1-(1+d)^{-T}}{d} \tag{2}\]

In both cases the variables have the same definitions:

  • \(T\) = number of payments made over the whole contract
  • \(m\) = payment amount
  • \(d\) = discount rate (which accounts for the future value of money)

Note that m can be generalised to be the profit of a customer, or the sum of cash inflows and outflows as desired. Choosing which factors to include (and which to ignore) when considering the payments m is important enough that it will get it’s own blog post.

EX 1: Phone Contract

Some customers have signed up for a one year contract with your phone company. These customers have agreed to pay \(T=12\) payments, each generating \(m=\$80\) of profit for the company. The customers make their payment at the end of each month. Find the present value of the 12 payments, using a monthly discount rate of \(d=5%\).

The solve this problem, subsitute the values \(T, m, d\) into the equation for the present value of an ordinary annuity (Equation (1) above). This gives the answer:

pv_ordinary(12, 80, 0.05)
## [1] 709.0601

Suppose the contract instead required customers to pay for the month ahead. Find the present value of the 12 payments now.

In the case of pre-payments, we use the formula for the present value of an immediate annuity (Equation (2) above):

pv_immediate(12, 80, 0.05)
## [1] 744.5131


This begins the foundation of modelling Customer Lifetime Value. It also provides a value for Long Term Value (LTV), but only for an extremely basic use case.

The sweet interactive shiny app below let’s you change the values of the input parameters and compare the difference in the values of ordinary and immediate annuities.

Simple Retention Model

The annuity models above assume that customers are making a set number of payments before the end of a contract. This is a very limiting assumption, as generally people will leave contracts early (terminating their customer relationship) or renew contracts and continue purchasing services (extending their relationship past the end of a single contract).

The Simple Retention Model (SRM) is the starting point for modelling customer behaviours. The SRM lets us estimate CLV with the following assumptions:

  • The retention rate (\(r\)) is constant.
  • Cancellation time has no effect on cash flow (\(m\)). (e.g. customers don’t pay an early exit fee).
  • The event that a customer cancels in period t is independent of the event that they cancel in any other time period.

The following example demonstrates the intuition that is needed for the SRM models. However, it doesn’t give any kind of formulation for CLV. Not yet. Be patient.

EX 2: Power Company

A power company signs up 750 customers to contracts where they will pay $350 at the end of each month, with a profit contribution of $75. The power company knows that it retains 90% of its customers each month. If a customer misses a payment, they are brutally cut off and are never allowed power again. Find the collective CLV of these customers with a monthly discount rate of 1%.

To answer this question (and expand our minds) we will need to calculate a few columns:

  • Expected Customers - The number of customers that the power company expects to have in each time period. Calculated as the initial number of customers, multiplied by the retention rate raised to the power of time.

  • Raw Cash Flow - The amount of profit the company expects in each time period. This is calculated as the expected number of customers multiplied by their profit contribution. Note that this does not discount the amounts back to a present value (i.e. back to time \(t = 1\))

  • Discounted Cash Flow - For each time period, this gives the discounted present value of the raw cash flows from that time period. So raw cash flow gives the amount of profit the company can expect in each time period, and the discounted cash flow gives the value of that profit in the current time period (i.e. at \(t=1\)).

  • Total DCF - A cumulative sum of the discounted cash flows. The final value in this column will be the value for CLV.

  • Delta Total DCF - Shows the incremental change in total DCF

The following code shows these values for 100 time periods:

initial_customers = 750
r = 0.9
m = 75
d = 0.01

power <- tibble(time = 0:100) %>%
    mutate(Expected_Customers = initial_customers*(r)^time,
           Raw_Cash_Flow = Expected_Customers*m,
           Discounted_Cash_Flow = Raw_Cash_Flow / ((1 + d)^time),
           Total_DCF = cumsum(Discounted_Cash_Flow),
           Delta_Total_DCF = Total_DCF - lag(Total_DCF) )
Expected_Customers Raw_Cash_Flow Discounted_Cash_Flow Total_DCF Delta_Total_DCF
750.00 56250.00 56250.00 56250.0 NA
675.00 50625.00 50123.76 106373.8 50123.76
607.50 45562.50 44664.74 151038.5 44664.74
546.75 41006.25 39800.26 190838.8 39800.26
492.07 36905.62 35465.58 226304.3 35465.58
442.87 33215.06 31602.99 257907.3 31602.99
398.58 29893.56 28161.08 286068.4 28161.08
358.72 26904.20 25094.03 311162.5 25094.03
322.85 24213.78 22361.02 333523.5 22361.02
290.57 21792.40 19925.66 353449.1 19925.66
261.51 19613.16 17755.54 371204.7 17755.54
235.36 17651.85 15821.77 387026.4 15821.77
211.82 15886.66 14098.61 401125.0 14098.61
190.64 14298.00 12563.11 413688.2 12563.11
171.58 12868.20 11194.85 424883.0 11194.85
154.42 11581.38 9975.61 434858.6 9975.61
138.98 10423.24 8889.16 443747.8 8889.16
125.08 9380.91 7921.03 451668.8 7921.03
112.57 8442.82 7058.35 458727.2 7058.35
101.31 7598.54 6289.62 465016.8 6289.62
91.18 6838.69 5604.61 470621.4 5604.61
82.06 6154.82 4994.21 475615.6 4994.21
73.86 5539.34 4450.28 480065.9 4450.28
66.47 4985.40 3965.60 484031.5 3965.60
59.82 4486.86 3533.70 487565.2 3533.70
53.84 4038.18 3148.84 490714.0 3148.84
48.46 3634.36 2805.90 493519.9 2805.90
43.61 3270.92 2500.31 496020.2 2500.31
39.25 2943.83 2228.00 498248.2 2228.00
35.33 2649.45 1985.34 500233.6 1985.34
31.79 2384.50 1769.12 502002.7 1769.12
28.61 2146.05 1576.44 503579.1 1576.44
25.75 1931.45 1404.75 504983.9 1404.75
23.18 1738.30 1251.76 506235.6 1251.76
20.86 1564.47 1115.43 507351.0 1115.43
18.77 1408.02 993.94 508345.0 993.94
16.90 1267.22 885.69 509230.7 885.69
15.21 1140.50 789.23 510019.9 789.23
13.69 1026.45 703.28 510723.2 703.28
12.32 923.81 626.68 511349.9 626.68
11.09 831.42 558.43 511908.3 558.43
9.98 748.28 497.61 512405.9 497.61
8.98 673.45 443.41 512849.3 443.41
8.08 606.11 395.12 513244.5 395.12
7.27 545.50 352.09 513596.5 352.09
6.55 490.95 313.74 513910.3 313.74
5.89 441.85 279.57 514189.9 279.57
5.30 397.67 249.12 514439.0 249.12
4.77 357.90 221.99 514661.0 221.99
4.29 322.11 197.81 514858.8 197.81
3.87 289.90 176.27 515035.1 176.27
3.48 260.91 157.07 515192.1 157.07
3.13 234.82 139.97 515332.1 139.97
2.82 211.34 124.72 515456.8 124.72
2.54 190.20 111.14 515568.0 111.14
2.28 171.18 99.03 515667.0 99.03
2.05 154.06 88.25 515755.2 88.25
1.85 138.66 78.64 515833.9 78.64
1.66 124.79 70.07 515904.0 70.07
1.50 112.31 62.44 515966.4 62.44
1.35 101.08 55.64 516022.0 55.64
1.21 90.97 49.58 516071.6 49.58
1.09 81.88 44.18 516115.8 44.18
0.98 73.69 39.37 516155.2 39.37
0.88 66.32 35.08 516190.2 35.08
0.80 59.69 31.26 516221.5 31.26
0.72 53.72 27.86 516249.4 27.86
0.64 48.35 24.82 516274.2 24.82
0.58 43.51 22.12 516296.3 22.12
0.52 39.16 19.71 516316.0 19.71
0.47 35.25 17.56 516333.6 17.56
0.42 31.72 15.65 516349.2 15.65
0.38 28.55 13.95 516363.2 13.95
0.34 25.69 12.43 516375.6 12.43
0.31 23.12 11.07 516386.7 11.07
0.28 20.81 9.87 516396.5 9.87
0.25 18.73 8.79 516405.3 8.79
0.22 16.86 7.84 516413.2 7.84
0.20 15.17 6.98 516420.2 6.98
0.18 13.65 6.22 516426.4 6.22
0.16 12.29 5.54 516431.9 5.54
0.15 11.06 4.94 516436.8 4.94
0.13 9.95 4.40 516441.3 4.40
0.12 8.96 3.92 516445.2 3.92
0.11 8.06 3.50 516448.7 3.50
0.10 7.26 3.11 516451.8 3.11
0.09 6.53 2.78 516454.6 2.78
0.08 5.88 2.47 516457.0 2.47
0.07 5.29 2.20 516459.2 2.20
0.06 4.76 1.96 516461.2 1.96
0.06 4.28 1.75 516463.0 1.75
0.05 3.86 1.56 516464.5 1.56
0.05 3.47 1.39 516465.9 1.39
0.04 3.12 1.24 516467.1 1.24
0.04 2.81 1.10 516468.2 1.10
0.03 2.53 0.98 516469.2 0.98
0.03 2.28 0.88 516470.1 0.88
0.03 2.05 0.78 516470.9 0.78
0.02 1.84 0.70 516471.6 0.70
0.02 1.66 0.62 516472.2 0.62
0.02 1.49 0.55 516472.8 0.55


We can then plot the Discounted Cash Flows. You can see that as time passes, our cash flows are decreasing.

Long Term Value (LTV) is calculated as the sum of discounted cash flows over the chosen time horizon (which is 100 periods into the future in this case):


power %>%
  summarise(CLV = sum(Discounted_Cash_Flow)) %>% 
  pull()
## [1] 516472.8


The following shiny applet let’s you change the input parameters and see how they effect the discounted cash flows, and ultimately the LTV. The most interesting thing to see is the way the shape of the graphs change when you vary the retention rate.

Note: This calculates LTV for the next 99 time periods. If you’d like to see how changing this time horizon will effect LTV, then that will be a great little at-home task to practice your tidyversing. If you’re working with the tidyverse does that make you a tidynaut? Someone get Hadley on the case. Anyway.



The concepts presented in this post serve mostly to get the intuition for calculating discounted future values. And to get you in the headspace of ‘wow yep retention rates are actually really important for a business’. But it doesn’t give any formulation for CLV. The next post will get into some more fun math and we’ll start getting towards a more rigourous formula for CLV. So chill.