Back to top

Churn baby churn!

"Churn" is a bit of jargon that companies use to describe the loss of customers in a given period, usually in a month. You'll hear it in press releases, analyst reports, and sales material from CRM vendors like "we brought our churn way down by using XYZ customer pleaser tool and our stock has been doing great ever since!"



I had heard about churn before, but never really dealt with it. For work I had to take a tool I was developing and replace an "expected customer lifetime in months" input for a "churn" input because "churn" is easier for our people to think about. That's fine, but what does "churn" mean when I'm calculating something over the life of a customer? My models needed a number of months.



Well, there is a fairly simple relationship between churn per month and the number of months you keep your customers: 1/churn. So, 2% churn means 1/2% or 1/.02 or 50 months. Don't believe me? I didn't believe me either, so I wrote this python script to prove it with real life examples. It has a couple of variables at the top that you can play with. It prints out the "customer list" at the beginning and then at the end of each month.

#####################################################
# Greg Knaddison's python churn monkey
# 2005-05-27
#
#####################################################

churn = 2
initialsize = 10
growth = 3
custs = [0]
custs.remove(0)
custRemoved = 0
lastAdded = 0

monthsToRun = 24


for i in range(initialsize):
    lastAdded +=1
    custs.append(lastAdded)

print 'custs in month ZERO is |%s' % (month+1,custs)

for month in range(monthsToRun):
    #print "For month %s the len(custs) BOM is %s" % (month, len(custs))

    for i in range(growth):
        lastAdded +=1
        custs.append(lastAdded)

    for i in range(churn):
        custRemoved += 1
        custs.remove(custRemoved)

    print 'custs in month %s is |%s' % (month+1,custs)
#####################################################

So, the output of it with this set of inputs is something like:


custs in month ZERO is |[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
custs in month 1 is |[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
custs in month 2 is |[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
custs in month 3 is |[7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
custs in month 4 is |[9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
custs in month 5 is |[11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
custs in month 6 is |[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]
custs in month 7 is |[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
custs in month 8 is |[17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34]
custs in month 9 is |[19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37]
custs in month 10 is |[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
custs in month 11 is |[23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43]
custs in month 12 is |[25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46]
custs in month 13 is |[27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
custs in month 14 is |[29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52]
custs in month 15 is |[31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]
custs in month 16 is |[33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58]
custs in month 17 is |[35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61]
custs in month 18 is |[37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64]
custs in month 19 is |[39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67]
custs in month 20 is |[41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]
custs in month 21 is |[43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73]
custs in month 22 is |[45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76]
custs in month 23 is |[47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
custs in month 24 is |[49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82]

So, what happens to a customer that you picked up in the first month? How about the case of our friend, Mr. 11. Well, in this case our churn was 2/10 or 20%. Mr. 11 is a happy little customer for exactly 5 months. Perfect.

There are a couple of flaws with this, like what about Mr. 13? Well, my churn is a numeric churn of "2 customers" per cycle instead of a true percent churn. Really I'm not sure what the appropriate model which is lucky enough because it's not "my job". But, this works well enough to prove the case.

Category: 
People Involved: