How to classify customers by those who use quite a lot of shops vs. mostly one specific shop I would be interested in how to approach the following problem:
A supermarket chain has 1 million customers in a region and 10 shops. For each of the customers we know the distribution for all the shops, so for example: 


*

*Customer 1 uses Shop 1 70%, Shop 2 10% and the remaining 20% are distributed across the other 8 shops.  

*Customer 2 uses Shop 3 80%, shop 2 5%, ...


My question now is which model to use to find out how to classify the customers best. I would like to separate the customers into three categories:  


*

*Fairly distributed customers who use quite a lot of shops 

*Peak customers which use one specific shop most of the time 

*Something in the middle


My question is how to define rules for these three categories? 
 A: Please note that the labeling on the customers is given to you.
You don't need classification in order to know it.
In order to get the label of a customer, count in how many different shops he visited.
In Sql you you can simply implement it like
select customer_id, count(distinct shop_id) as shops from customer_shopping group by customer_id

However, you should notice that the straight forward definition of shopping in shops isn't necessarily the one that will serve you best.


*

*Is shopping in a shop once enough to consider it?

*Should you consider shopping done two years ago?

*Is there a minimal threshold on the price?


The answers to the above questions should come from two sources:


*

*Business rules - before any statistical investigation, your business should dictate what is considered buying at a shop.

*Desired statistical properties. One property them seems very desirable in your setting is that the customer classification will be stable. If a customer shops in many shops, he should be labeled as so when you use shopping data from different periods or when using 90% of the shopping data. So you should evaluate possible rules and see which one serves you best.


Once you have the labels, you can take it further.
You can extract descriptive statistics on the groups, look for differences between them, build classifiers to predict new customer labels, etc.
A: My suggestion is to extract several features from each customer. E.g. 


*

*Maximum percentage from the ten shops, e.g. 0.7 for Customer 1

*Maximum deviation from 10% of the 10 numbers

*Mean of the ten values

*Standard deviation of the values

*Some other feature that might be of interest...


You can then do clustering by example k-means to see how the typical clusters look like. You are still not guaranteed to get the clusters that you define.
I think you need to clarify a bit better what is a peak customer. Is a peak someone that is over 70% in one store? If you have a clear definition of this you can simply do some thresholding to find the answer. Otherwise if you want the groups to be of specific sizes, then you can define the thresholding based on the data.
I think that clustering is probably the way to go. You can also try some other algorithms then k-means, e.g. archetypal analysis.
I would suggest that you start by looking at the distribution of the features. Look at the percentages of people with a value over 95%, 90%, 85% etc. Then you maybe have an idea of how your data looks like.
