df1['Recency'] = max(df1['주문일자_dt']) - df1['주문일자_dt']
p_r = df1.pivot_table(index = '주문자ID', values = 'Recency',
aggfunc = 'min').reset_index()
p_r['Recency_int'] = p_r['Recency'].apply(func1) # 일수만 가져오기
df1['Frequency'] = 1 # 기본값 설정
p_f['Frequency'] = df1.pivot_table(index='주문자ID', values='Frequency', aggfunc='sum'].reset_index()
p_m = df1.pivot_table(index='주문자ID', values='상품주문금액', aggfunc='sum').reset_index()
p_m.rename(columns={'상품주문금액':'Monetary'}, inplace=True)
m1 = pd.concat(p_r, p_f, on='주문자ID', how='inner')
m2 = pd.concat(m1, p_m, on='주문자ID', how='inner')
m2['total'] = (-0.4 * m2['Recency_int']) + (0.3*m2['Frequency']) + (0.3*m2['Monetary'])
pd.options.display.float_format = '{:.2f}'.format
# 비율 별로 고객 등급화
cond1 = m2['total'] > m2['total'].quantile(0.9)
cond2 = m2['total'] > m2['total'].quantile(0.7)
cond3 = m2['total'] > m2['total'].quantile(0.5)
m2['rank'] = 'D'
m2.loc[cond3, 'rank'] = 'C'
m2.loc[cond2, 'rank'] = 'B'
m2.loc[cond1, 'rank'] = 'A'
...quantile(0.9) : 상위 90%
...quantile(0.7) : 상위 70%
...quantile(0.5) : 상위 50%