What is the best tool for customer segmentation? 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.
 A: 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.
A: 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. 
A: 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).
A: 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.
A: 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.
A: You can look at the problem as one with multiple objectives.
Let's say a good customer is one who:


*

*Spends a high average amount per purchase (Brings in money)

*Makes many purchases (Shows trust)

*Makes purchases over a long duration of time (Shows loyalty)


The corresponding objectives are therefore: 


*

*Maximize $Average Amount Spent Per Purchase$

*Maximize $TotalNumberOfPurchases$

*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.
A: 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
