# Customer-Segmentation based on feature importance

The problem: We have asked customer-satisfaction for various shops (variable satisfaction ranging from 1 to 4). In addition we have provided 30 shop features and our participants had to rate if the shop-feature fits the shop (1 yes it fits, 0 no it doesn't fit).

Now we want to find out which of the 30 shop features are most important for the overall satisfaction rating. Therefor we used a random forest.

But we think, that there might be different customer segments with different requirements (shop feature importances). Now we are looking for this different segments.

here is an example of the dataset:

One possible way could be to cluster our customers in a first step and in a second step we calculate the importancies for each segment and compare them. But in this case we might overlook some "better" segments that couldn't be clustered (because we are missing an important variable or something similar).

So we would like to calculate importancies and segments "at the same time". The segmentation should be based on the importancies.

My approach to this problem would be something like this: I would add a segmentation variable more or less random to cluster the sample into groups. After that I would calculate the importancies and check if there are any major differences (I have no idea how to judge if a difference is major or not yet). In a next step I would start permuting the segmentation variable and compare the newly formed groups and so on until every possible segmentation combination is done. After that I would select the segmentation that brought the biggest differences (and check if these segments look reasonable in practice too).

There are a few problems with this aproach:

1. it might need a lot of computer power, because it has to be done a great number of random forests.

2. Finding the best number of segments and as well finding the best number of customers per segment will increase the calculation effort again (lets say we have 20 customers. I could start looking for 2 segments with 5 customers in 1 segment and 15 in the other. After that i could look for 6 customers in 1 segment and 14 in the other and so on).

3. I am not sure if this approach will be biased by random noise in the data. I might end up having segments that are just the result of noise?

Do you think this is a good idea for the given problem? Are there any alternative/better methods?