- 파이썬을 이용한 RFM 분석
- Recency: 얼마나 최근에 구매를 했는가
- Frequency: 얼마나 자주 구매를 했는가
- Monetary: 총 얼마를 구매했는가
#RFM 계산
snapshot_date = main_data['order_purchase_timestamp'].max() + dt.timedelta(days=1)
rfm = main_data.groupby('customer_id',as_index=False).agg({'order_purchase_timestamp': lambda x: (snapshot_date - x.max()).days,
'order_id': 'count',
'price': 'sum'})
rfm = rfm.rename(columns={'order_purchase_timestamp': 'recency',
'order_id': 'frequency',
'price': 'monetary'})
- RFM 시각화
- frequency와 monetary에서 데이터가 한 쪽으로 몰려있는 왜도를 보임
- 추후 log_scale 변환을 통해서 왜도 문제를 해소할 필요가 보임
- log 변환 이후 monetary의 왜도문제는 해소됐지만 frequency와 recency의 왜도는 해결되지 않음
- 다른 해결 방식을 통해 접근할 필요가 보임
#RFM 시각화
fig, ax = plt.subplots(1,3,figsize=(15,5))
sns.distplot(rfm['frequency'] , ax=ax[0]);
sns.distplot(rfm['recency'] , ax=ax[1]);
sns.distplot(rfm['monetary'] , ax=ax[2]);
#RFM 시각화 (로그변환)
fig, ax = plt.subplots(1,3,figsize=(15,5))
sns.distplot(np.log(rfm['frequency']) , ax=ax[0]);
sns.distplot(np.log(rfm['recency']) , ax=ax[1]);
sns.distplot(np.log(rfm['monetary']) , ax=ax[2]);
'Data > [스파르타 내일배움캠프]' 카테고리의 다른 글
[TIL]본캠프 45일차(심화 프로젝트 4일차) (0) | 2024.06.20 |
---|---|
[TIL]본캠프 44일차(심화 프로젝트 3일차) (2) | 2024.06.19 |
[TIL]본캠프 42일차(심화 프로젝트 1일차) (2) | 2024.06.17 |
[WIL]본캠프 9주차 (0) | 2024.06.14 |
[TIL]본캠프 41일차 (0) | 2024.06.14 |