6
$\begingroup$

I have a customer data set with the following data:

  • The number of purchases that each customer made
  • The Date that they made each purchase
  • The Date that they signed up
  • The amount they spent on each purchase

I want to segment my users into three groups:

  • Great Customers
  • Ok Customers
  • Bad Customers

Is there a tool I can use (statistical method OR software tool) that will look at all the variables and create the segmentations? I have Stata and Excel, but your answer doesn't have to be limited to these.

$\endgroup$
1
  • 7
    $\begingroup$ To segment customers, not their data, a guillotine $\endgroup$
    – denis
    Aug 26 '11 at 9:25
8
$\begingroup$

I'm afraid you are mistaking software programs and statistical algorithms for thinking, judging beings. No tool can give you the Good, the Bad, and the Ugly. You'll have to exercise your own judgment along the way! What you need is not so much a tool but well-thought-out criteria for classifying each customer. Then the rest is a matter of mechanics, or follow-through.

$\endgroup$
8
$\begingroup$

Survival analysis of LTV (lifetime value) is a good place to start. It's pretty basic, but it gets the job done. But there is a lot of business intelligence work that you could do with what you have. If you have response rates to advertisements and such it could also provide you with a good way to look at effectiveness.

I agree with rolando2, the good the bad and the ugly - being mathematically defined, is challenging. Especially with no behavioural or secondary element in your data other than purchases, even something as simple as postal code could add fantastic information to your data for understanding things like locus of purchase (it it's a store). I guess you could segment by LTV percentiles... 30%, 50%, 80% (following the 80/20 business rule...).

In terms of software, I have no idea how to do this in Excel or STATA. But, for R there's a mixed intro and example of survival analysis using the survival package here: http://www.stats.uwo.ca/faculty/jones/survival_talk.pdf from Bruce Jones at the University of Western Ontario. I'm Canadian, sue me.

In his example, Death, would be something like your average time between purchases identified in the data as 0 or 1 if the observation did purchase in the last average time between purchases. Some people like to set this up as Purchased in Last 3 Months... but obviously it's different for every type of business. You wouldn't by a car every month, would you? So that's a judgement call on your end.

Otherwise, there's a lot of interesting things that you can do with your data from a business intelligence perspective. Average purchase price, number of items purchased based on stack outs in a store, or banners on a website if you know the time that the ad or stack out was placed.... those are just a few examples.

$\endgroup$
4
  • $\begingroup$ How does survival analysis relate to LTV? Survival analysis implies a discrete (possibly recurring) event, not a continuous value (life time value = $). $\endgroup$
    – B_Miner
    Aug 26 '11 at 13:19
  • $\begingroup$ www2.sas.com/proceedings/sugi28/120-28.pdf is one example. $\endgroup$ Aug 26 '11 at 20:21
  • $\begingroup$ Thank you, I'll look into survival analysis. When you say there is a lot of things I can do from a business intelligence prospective, how is that different from segmenting customer data? $\endgroup$
    – jschwa
    Aug 29 '11 at 18:48
  • $\begingroup$ Alot of companies run on things of interest that don't necessarily have a complicated statistical element. Like average purchase price, average items purchased, average time between purchases, creating a scorecard of these metrics can sometimes be more interesting to business people than any statistical segmentation. $\endgroup$ Aug 29 '11 at 22:07
6
$\begingroup$

I would suggest with your limited data (and perhaps limited experience with clustering), you simply create an RFM coding and separate into the three bins your desire. Otherwise, cluster analysis on the data is a basic method for customer segmentation based on transactional variables (of course your dates have to become measures such as distance between purchases, tenure and recency of purchase).

$\endgroup$
2
  • $\begingroup$ Missed your answer somehow (+1) deleted my duplicate. $\endgroup$ Aug 26 '11 at 14:00
  • $\begingroup$ Thank you for that. RFM looks interesting, but I had questions about the best way to go about finding meaningful breaks for the sub-categories. The wikipedia article mentioned CHAID, which I will look into. $\endgroup$
    – jschwa
    Aug 29 '11 at 18:24
2
$\begingroup$

Generally I would agree with rolando2. However, if you interested in unsupervised categorization, there are methods that exist that can provide you with unlabeled groups of your data. One such method is latent dirichlet process (LDA) which has been used for automatic topic discovery. K-Means might be a better fit for your needs, especially since you know the number of categories you expect.

$\endgroup$
1
$\begingroup$

One way to approach this is to build a probability model of the customer data. If you have some understanding of the customer level behavior, you can model this and make predictions of who are your most valuable customers.

For example, you could assume that customers make purchases at a constant rate until they 'die.' This is the sort of survival analysis that Brandon Mentioned. You could also build more sophisticated models allowing for heterogeneity in purchasing and death rates.

Since you ask about software tools, I'd also like to suggest you check out my company, Custora. We use some more sophisticated versions of the models I described above to predict customer lifetime value based on transaction logs. One of the analyses that we provide is customer segmentation.

$\endgroup$
3
  • 2
    $\begingroup$ (-1): I'd like to prevent crossvalidated.com from degenerating into a platform where on every question someones suggests the commercial tool of his company. In this case we are better off to place ads in between the answers -,- $\endgroup$
    – mlwida
    Aug 26 '11 at 6:37
  • 2
    $\begingroup$ There's very little risk of such degeneration, @steffen, because this community has strong built-in defenses through self-policing and regulator moderator activities. In this case the answer is legitimate, because it includes disclosure and explains why it is being offered (albeit very briefly). BTW, if you ever have such a concern about an answer, please flag it for moderator attention (use the "flag" link immediately below the answer). We will take care of the problem quickly. $\endgroup$
    – whuber
    Aug 26 '11 at 16:01
  • 1
    $\begingroup$ I asked for software tools, so pointing one out is fair. What is the more sophisticated model that you are using? $\endgroup$
    – jschwa
    Aug 29 '11 at 18:50
0
$\begingroup$

You can look at the problem as one with multiple objectives. Let's say a good customer is one who:

  1. Spends a high average amount per purchase (Brings in money)
  2. Makes many purchases (Shows trust)
  3. Makes purchases over a long duration of time (Shows loyalty)

The corresponding objectives are therefore:

  1. Maximize $Average Amount Spent Per Purchase$
  2. Maximize $TotalNumberOfPurchases$
  3. Maximize $AverageTimeIntervalBetweenPurchases$

Treat all customers are solutions and sort them using non-dominated sorting. Note that you need not run the genetic algorithm, just sort the solutions once.

Say the non-dominated sorting gives you 5 ranks. You can assign ranks 1 and 2 as good customers, rank 3 as ok customers and remaining as bad customers.

$\endgroup$
0
$\begingroup$

If you want to use a probablistic approach which has already been mentioned by aaronjg, have a look at the R package CLVTools (https://cran.r-project.org/web/packages/CLVTools/index.html).

As an output, you basically get an estimate for every customer in terms of his/her future value to a business. Based on this variable you can have a look at any percentile which you might be interested in, e.g. top 10% best future customers.

This tutorial might be a good starting point: https://www.clvtools.com/articles/CLVTools.html

$\endgroup$
1
  • $\begingroup$ It seems like this should probably be a comment to that answer. $\endgroup$ Nov 19 '20 at 18:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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