Я работаю в процессе сегментации пользователей (сегментация «RFM»), где пользователи классифицируются на основе «сегментов», в которые они входят.
В качестве быстрого примера в качестве примера пользователь может внутри «чемпионов» или «не может проиграть» ведро на основе их активности и покупок (их оценка RFM).
Все это рассчитывается с использованием алгоритма, который объясняется здесь: https://towardsdatascience.com/recency-frequency-monetary-model-with-python-and-how-sephora-uses-it-to-optimize-their-google-d6a0707c5f17
В конце она рассчитывается, как в следующем примере:
if RFM_Score >= 9:
return "Cannot lose them"
elif ((RFM_Score >= 8) and (RFM_Score < 9)):
return "Winners"
Теперь я хочу предложить пользователю возможность настроить границы (и имена) сегментов.
Можно ли построить динамическую c структуру if-else, которую можно настроить с помощью параметров?
Я подумал о каком-то словаре, например:
#The first value in the tuple is the lowerbound, the second value is the upperbound.
params={'cannot lose':(9,), 'winners':(8, 9), [...] 'promising':(4, 5)}
def find_class(value):
for classname, boundaries in params:
if value >= boundaries[0]:
if len(boundaries) == 1:
return classname
elif value < boundaries[1]:
return classname
Тем не менее, я боюсь, что это сделает алгоритм намного более сложным (представьте, что мы выполняем это с потенциально десятками миллионов записей), хотя я думаю, что простой if / else будет быть быстрым из-за пути * Интерпретатор 1028 * реализован.
Я хотел бы осветить: (1) приемлем ли диктовский подход? Какие возможны спады; (2) это намного медленнее?