0. 세팅
### 한글깨짐방지!! ###
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.rc('font', family='Malgun Gothic')
mpl.rcParams['axes.unicode_minus'] = False
import pandas as pd
import seaborn as sns
articles=pd.read_csv("articles_hm.csv")
customer=pd.read_csv("customer_hm.csv")
transactions=pd.read_csv("transactions_hm.csv")
Python
복사
1. 고객 세그먼트별 매출 특징
- 연령대 별 매출 구하기
# 연령대 별 구분
def age_group_go(age):
if age <=19:
return "10대"
elif age <= 29:
return "20대"
elif age <= 39:
return "30대"
elif age <= 49:
return "40대"
elif age <= 59:
return "50대"
elif age <= 69:
return "60대"
elif age <= 79:
return "70대"
elif age <= 89:
return "80대"
else:
return "90대"
customer["age_group"] = customer["age"].apply(age_group_go)
df_tr_cu_left = transactions.merge(customer, on="customer_id", how="left")
# 연령대별 총매출
df_tr_cu_left_agg_gr = df_tr_cu_left.groupby("age_group")["price"].sum().reset_index()
df_tr_cu_left_agg_gr
Python
복사
매출발생 핵심 층은 “20대”가 압도적, “30~50대”가 뒤를 이음
10대, 7~90대 매출이 낮음
- 회원 상태 별 매출 구하기
club_member_status_price = (df_tr_cu_left .groupby("club_member_status")["price"]
.sum()
.reset_index()
.sort_values("price", ascending=False))
Python
복사
- 고객별 평균적인 재구매 주기 구하기
transactions["t_dat"] = pd.to_datetime(transactions["t_dat"])
# 1) 고객 & 구매일 기준 정렬
transactions_sorted = transactions.sort_values(["customer_id", "t_dat"])
# 2) 고객별 다음 구매일까지 날짜 차이 계산
transactions_sorted["diff_days"] = transactions_sorted.groupby("customer_id")["t_dat"].diff().dt.days
# 4) 고객별 평균 재구매 주기 계산
re_purchase = (
transactions_sorted.groupby("customer_id")["diff_days"]
.mean()
.reset_index()
.rename(columns={"diff_days": "avg_repurchase_days"})
)
Python
복사
0은 제외
2. 상품군 별 트렌드는 무엇인가?
- 상품군별 매출 TOP 10 구하기 + TOP 10 에서 각 상품군별 인기색상 구하기
pg_price = (
df_tr_ar_left.groupby("product_group_name")["price"]
.sum()
.reset_index()
)
# 매출 기준 내림차순 정렬
pg_price = pg_price.sort_values("price", ascending=False)
# TOP 10 추출
pg_price_top10 = pg_price.head(10)
pg_price_top10
Python
복사
→ 상품 하위항목별 색상 매출 분포
- 상품군별 재구매율 파악하기
# 구매 횟수 계산
df_tr_ar_left = transactions.merge(articles, on="article_id", how="left")
df_tr_ar_left_grp = df_tr_ar_left.groupby(['customer_id', 'product_group_name']).size().reset_index(name='purchase_cnt')
# 재구매 고객만 필터링
re_cid = df_tr_ar_left_grp[df_tr_ar_left_grp['purchase_cnt'] >= 2]
# 상품군별 재구매 고객 수
re_cnt = re_cid.groupby('product_group_name')['customer_id'].nunique().reset_index(name='repurchase_customers')
# ALL 구매 고객 수 (재구매 아닌값도 포함)
tt_cnt = df_tr_ar_left_grp.groupby('product_group_name')['customer_id'].nunique().reset_index(name='total_customers')
# 재구매율 계산 (재구매 / 전체로)
repurchase_rate = pd.merge(tt_cnt, re_cnt, on='product_group_name', how='left')
repurchase_rate['repurchase_customers'] = repurchase_rate['repurchase_customers']
repurchase_rate['repurchase_rate'] = repurchase_rate['repurchase_customers'] / repurchase_rate['total_customers']
repurchase_rate.sort_values('repurchase_rate', ascending=False, inplace=True)
Python
복사
의상 재구매율이 매우 높음
하위권 - 가구 인테리어 등 비주기성 물품
비주기성 물품(funiture, interior textile 등) → 단가를 조정, 마진 중심 전략 수립
3. 연령대별 채널(온, 오프라인) 사용 현황 + 연령대별 매출 상위 10개 상품군 구하기
- 연령대별 채널 사용 현황
# 연령대 채널 별 사용 현
aggr_scid = (df_tr_cu_left.groupby(["age_group", "sales_channel_id"]).size().reset_index(name="usage_count"))
aggr_scid
Python
복사
온라인 판매채널 사용량이 우세
20~50대가 전체 사용량의 중심, 60대 이후 급격히 감소
10대 전체 수 자체가 적음
- 연령대별 매출 상위 10개 상품군 구하기
df_all_left = df_tr_ar_left.merge(customer[['customer_id','age','age_group']], on='customer_id', how='left')
age_group_price = df_all_left.groupby(['age_group','product_group_name'])['price'].sum().reset_index(name='total_sales')
age_top10 = (
age_group_price.sort_values(['age_group','total_sales'], ascending=[True, False])
.groupby('age_group')
.head(10)
.reset_index(drop=True)
)
age_top10
Python
복사
의류 카테고리 = 모든 연령대에서의 핵심 상품군
20대 = 다양한 카테고리에서 높은 매출 = 트렌드 주도층
30~50대 = 20대 구매력을 뒤따름, 비슷한 패턴
60대 이상 = 전반적으로 낮으나, 의류군 꾸준히 존재함
*** 연령대별 채널사용현황 x 연령대별 매출상위 10개 상품군
20대 : 온라인 상 거래량 + 대부분 상품군에서 매출이 압도적
•
온라인 구매 경험 최적화 → 추가 매출성장의 트리거
◦
성별/체형 기반 코디 추천 (무신사)
◦
신상품 출시 → 선 노출
30~50대 : 온라인 상 거래량이 높고, 실용적인 상품군 집중(의류, 악세서리)
•
실용적 측면 강조
◦
신뢰 마케팅 (리뷰, 별점 기반 노출)
◦
프리미엄 기능성 제품 추천
60대 ~ : 거래 자체가 적어짐, 온/오프라인 비율도 감소, 매출 폭 역시 감소, 의류군 중심
•
베이직 의류 중심 (패키지 상품 출시, 타겟팅??)
•
회원가입 혜택, 온라인 배송 시 무료 등 전환 캠페인
•
ux 단순화 & 큰 글씨








