TIL_2024.05.09

김희정·2024년 5월 9일

TIL

목록 보기
57/57
post-thumbnail

지난 이틀간 팀원들과 최종 프로젝트 회고하면서 우리의 프로젝트 결과물을 재점검했다.
최종 피드백 내용이 좋은 내용은 아니었어서, 우선 여행중에 있는 승현님을 제외한 세명은 디벨롭하는데 동의했고, 다시 분석해 나가기로 했다.

프로젝트 배경에 마케팅적 요소는 과감히 배제하고,
왜 우리가 크롤링을 통한 새로운 상품 및 셀러를 영입해야 되는지에 대한 정량적 근거를 찾아봤다.

가설 검증 과정

거기서 내가 생각한 가설은

첫구매의 전환율부터 두번째 구매, 세번째 구매로 이어질때의 전환율이 감소할 것이다
== 고객이 원하는 상품 / 흥미있는 상품이 없어서 구매율이 점차 낮아진 것.

위의 가설이 검증된다면 한번도 상품 업데이트를 하지 않은 우리 데이터셋의 특성 상 매출이 점차 하락하는 이유 중 하나로 생각할 수 있을 것이라 생각했다.

purchase_counts = []

# 구매 횟수를 누적하는 코드
for customer_id, group in funnel.groupby('CustomerID'):
    purchase_count = 1
    for index, row in group.iterrows():
        if row['ActionType'] == 'purchase':
            purchase_counts.append(purchase_count)
            purchase_count += 1
        else:
            purchase_counts.append(purchase_count)

funnel['PurchaseCount'] = purchase_counts
funnel

첫구매, 두번째 구매의 리텐션을 구하는 기준을 어떻게 할지 고민하다
첫 방문을 중심으로 리텐션을 구하는 것 보다
구매 자체에 중점을 두고 구하는 방식으로 했다.

CustomerID별로 ActionType 이 purchase를 만나면 그 다음 행부터 +1을 추가해 첫구매, 두번째 구매, 세번째 구매~ 를 구하기 위한 퍼널 밑작업을 마쳤다.

CustomerID 6 을 보면
CustomerID 6의 로그 중 purchase를 지나면 그다음 ActionType의 PurchaseCount가 1씩 증가된 점을 확인 할 수 있다.

최대 재구매횟수는 22회이지만

기초 통계를 보면 평균이 2.8, 중앙값이 3회로
22라는 수치는 매우 이상치에 가깝다는걸 확인했다.

각 고객별 가장 마지막 로그로 PurchaseCount 의 분포도 확인

aa = funnel.groupby('CustomerID').apply(lambda x: x.loc[x['Timestamp'].idxmax(), ['Timestamp', 'PurchaseCount']])
aa

전체 로그로 PurchaseCount 분포도 확인

전체적인 모양은 비슷하지만

PurchaseCount가 1 -> 2 로 넘어갈때,
2 -> 3 으로 넘어갈때, 카운트 차이가 급격히 벌어지는 것과,
3 -> 4 로 넘어갔을때의 숫자가 급격히 낮아진걸을 보았을때
고객여정이 길어지고 세번째 구매부터 네번째 구매로 구매전환이 잘이어지지 않았다는걸 확인할 수 있었다.

재구매 여부 별칭 지정

위에서 기초통계로 확인했을때
PurchaseCount의 75번째 백분위수가 4 였기 때문에, 4이상을 하나로 묶었다.

funnel['재구매여부'] = funnel['PurchaseCount'].apply(lambda x: '첫구매' if x ==1 else ('재구매_2' if x ==2 else ('재구매_3' if x==3 else '재구매_4이상')))
funnel

재구매 전환율 확인

basket_rates = {}

for rebasket in 재구매여부:
    total_view = funnel[(funnel['재구매여부']==rebasket) & (funnel['ActionType'].isin(['view', 'ad_view']))]['users'].sum()
    total_basket = funnel[(funnel['재구매여부']==rebasket) & (funnel['ActionType'] == 'basket')]['users'].sum()
    retention_rate_basket = total_basket / total_view
    basket_rates[rebasket] = retention_rate_basket

for rebasket, rate in basket_rates.items():
    print(f"{rebasket}의 Basket Retention Rate: {rate:.3f}")

retention_rates = {}
재구매여부 = ['첫구매', '재구매_2', '재구매_3', '재구매_4이상']
for rebuy in 재구매여부:
    total_users = funnel[funnel['재구매여부'] == rebuy]['users'].sum()
    total_purchases = funnel[(funnel['재구매여부'] == rebuy) & (funnel['ActionType'] == 'purchase')]['users'].sum()
    retention_rate = total_purchases / total_users
    retention_rates[rebuy] = retention_rate
    
    print(f"{rebuy}의 Purchase Retention Rate : ", round(retention_rate,3))
# print(retention_rates)

재구매 횟수가 높아질 수록 리텐션이 떨어지는 점 확인

profile
데이터 애널리스트가 되고 싶은

0개의 댓글