데이터 분석/분석기법

RFM 분석

민서타 2023. 11. 28. 00:41

RFM: 고객 분류 기법

  • Recency: 얼마나 최근에 구매했는지
  • Frequency: 얼마나 자주 구매했는지
  • Monetary: 얼마만큼의 규모로 구매했는지

코드 구현:

1. 데이터: 1000명의 RFM 데이터 활용, is_back을 타깃으로한 로지스틱 회귀 모델 생성

2. 구간별 데이터 구분, 점수 환산 함수 생성, 상관계수를 곱해주는  RFM SCORE, TOTAL 피쳐 생성

3. TOTAL 함수를 구간화, 점수 산출(level col 생성)

4. level별 리텐션(1-리텐션)


X = df.drop(['mem_no', 'last_ord_dt','is_back'], axis=1)
y = df['is_back']

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y)

model = LogisticRegression()
model.fit(X_train, y_train)
 
coef = pd.DataFrame({'features':X.columns, 'coefficient':model.coef_[0]})
 
# 백분위수 기반 RFM 점수 산출 함수 생성
def percent(x) :
  if x <= a1 :
    return 4
  elif x > a1 and x <= a2 :
    return 3
  elif x > a2 and x < a3 :
    return 2
  elif x >= a3 :
    return 1
 
a1, a2, a3 = np.percentile(df['recency'], [20,40,60])
b1, b2, b3 = np.percentile(df['frequency'], [10,50,80])
c1, c2, c3 = np.percentile(df['monetary'], [20,40,80])
 
df['recency_score'] = df['recency'].apply(percent)*-coef.iloc[0,1]
df['frequency_score'] = df['frequency'].apply(percent)*coef.iloc[1,1]
df['monetary_score'] = df['monetary'].apply(percent)*coef.iloc[2,1]
df['total_score'] = df['recency_score'] + df['frequency_score'] + df['monetary_score']

t1, t2, t3, t4 = np.percentile(df['total_score'], [20,50,70,90])
 
def level(x) :
  if x <= t1 :
    return 5
  elif x > t1 and x <= t2 :
    return 4
  elif x > t2 and x <= t3 :
    return 3
  elif x > t3 and x <= t4 :
    return 2
  elif x > t4 :
    return 1
 
df['level'] = df['total_score'].apply(level)
 
#그룹별 리텐션(1-리텐션)
pivot = df.groupby('level').agg({'is_back':'sum', 'mem_no':'count'})
pivot['retention'] = pivot.is_back/pivot.mem_no
반응형

'데이터 분석 > 분석기법' 카테고리의 다른 글

LTV, 로그 데이터 개념  (0) 2023.12.16
코호트 분석  (0) 2023.12.10
A/B Test, 이중차분법  (0) 2023.12.04