
맛있는 고기쌈 :)
club_member_status가 ACTIVE 또는 PRE-CREATE인 고객을 active_customers로 분류하고 해당 고객들에 대한 RFM 분석 시도.
# 각 고객의 마지막 거래 날짜와 현재 날짜의 차이를 계산하여 Recency 값 구하기
active_transactions_rfm['t_dat'] = pd.to_datetime(active_transactions_rfm['t_dat'])
active_rfm_recency = active_transactions_rfm.groupby('customer_id_le')['t_dat'].max().reset_index()
active_rfm_recency['Recency'] = (current_date - active_rfm_recency['t_dat']).dt.days
# 각 고객의 총 거래 횟수를 계산하여 Frequency 값 구하기
active_rfm_frequency = active_transactions_rfm.groupby('customer_id_le')['receipt_no'].count().reset_index()
active_rfm_frequency.columns = ['customer_id_le', 'Frequency']
# 각 고객의 총 구매 금액을 계산하여 Monetary 값 구하기
active_rfm_monetary = active_transactions_rfm.groupby('customer_id_le')['total_price'].sum().reset_index()
active_rfm_monetary.columns = ['customer_id_le', 'Monetary']
# Recency, Frequency, Monetary 값을 active_rfm으로 통합
active_rfm = active_rfm_recency.merge(active_rfm_frequency, on='customer_id_le')
active_rfm = active_rfm.merge(active_rfm_monetary, on='customer_id_le')
# Monetary 값을 기준으로 고객을 10개의 그룹으로 나누는 함수 정의
def Monetary_group(df):
df['Monetary_group'] = 0 # 새로운 컬럼 초기화
df.loc[df['Monetary'] > 1.63, 'Monetary_group'] = 10
df.loc[(df['Monetary'] <= 1.63) & (df['Monetary'] > 0.9), 'Monetary_group'] = 9
df.loc[(df['Monetary'] <= 0.9) & (df['Monetary'] > 0.56), 'Monetary_group'] = 8
df.loc[(df['Monetary'] <= 0.56) & (df['Monetary'] > 0.37), 'Monetary_group'] = 7
df.loc[(df['Monetary'] <= 0.37) & (df['Monetary'] > 0.25), 'Monetary_group'] = 6
df.loc[(df['Monetary'] <= 0.25) & (df['Monetary'] > 0.17), 'Monetary_group'] = 5
df.loc[(df['Monetary'] <= 0.17) & (df['Monetary'] > 0.11), 'Monetary_group'] = 4
df.loc[(df['Monetary'] <= 0.11) & (df['Monetary'] > 0.07), 'Monetary_group'] = 3
df.loc[(df['Monetary'] <= 0.07) & (df['Monetary'] > 0.04), 'Monetary_group'] = 2
df.loc[(df['Monetary'] <= 0.04), 'Monetary_group'] = 1
return df
# 함수 실행해서 df1으로 분석하기
df1 = Monetary_group(df)
# Monetary_group을 기준으로 각 그룹의 통계량 계산
df1_agg = df1.groupby('Monetary_group').agg(
고객수 = ('customer_id_le', 'nunique'),
총매출 = ('Monetary', 'sum'),
최소매출 = ('Monetary', 'min'),
최대매출 = ('Monetary', 'max'),
인당평균매출 = ('Monetary', 'mean'),
총구매횟수 = ('Frequency', 'sum'),
최소구매횟수 = ('Frequency', 'min'),
최대구매횟수 = ('Frequency', 'max'),
평균구매횟수 = ('Frequency', 'mean')
)
# 통계량 확인 및 총매출 기준 정렬
df1_agg.sort_values(by='총매출', ascending=False).reset_index(drop=True)
총 매출과 인당 평균매출 등의 통계량을 확인하고, 분포를 확인하면서
10등분의 그룹을 어떤 기준으로 나누어 몇 개의 그룹으로 분류할 것인지 정할 예정.
기준
X_freatures
Inertia plot
inertia 값이 작을수록 군집 내 데이터 포인트들이 군집 중심에 가까워져 더 응집력이 강한 군집을 의미
X_featrue line plot
PCA plot
정리
군집화 결과와 RFM 세그먼트를 함께 붙여서,
비즈니스 상 집중해야 할 고객들의 특징을 정리하고,
어떤 지표를 주로 확인하면서 비즈니스 전략을 가져가야할 지에 집중해서
분석 결과와 결과물을 도출하자.
오늘의 한 줄.
오늘도 고생했다.