가는중 2023. 5. 13. 22:17

## Environment : Anaconda-navigator
## Programming Language : Python 3
## Import Pandas
## import seaborn as sns
## import Numpy as np
## import matplotlib pyplot as plt


1. 데이터를 불러오기 및 데이터 전처리
2. 데이터 분석
3. 추천시스템

 

LTV가 높은 고객군의 인구통계학적 정보. 이커머스 같은 경우 남성고객보다 여성 고객들이 많습니다 .
가령 요일/시간별 결제 비율. 가령 주중보다 주말에 결제할 확률이 높다면, 상품을 결제할 의사가 있는 고객들에게 주말에 결제를 유도하는 메일을 보낼 수 있습니다.
이러한 요청을 종합하며, 마케팅팀의 의사결정에 도움이 될 수 있는 정보를 뽑아보도록 하겠습니다.

클릭/ 좋아요 / 장바구니/ 구매의 총 인원 수와 비율을 구해보겠습니다.
먼저 가장 기본적인 정보는 클릭/ 좋아요 / 장바구니/ 구매 비율입니다.

 

 

성별 데이터를 살펴 보겠습니다.

raw_data['gender'].value_counts()

 

여성의 비율이 많다는걸 알 수 있습니다.

다만 결측치 처리로 인해 un_gender값이 있습니다. 나중에 추천시스템을 만들어야하는데 un_gender가 시스템에 악영향을 미칠수있습니다. 카테고리쪽을 살펴보아도 남자, 여자 데이터를 확실히 나누기가 어렵습니다. 데이터가 많아서 샘플링을 하거나 스케일링을 해야하는데 우선 un_gender같은 경우 drop을 하도록 하겠습니다.

 

un_gender를 날리고 전체 shape 수 5544530 - 366506 = 5178024 인지 확인하기

raw_data = raw_data[raw_data['gender'] != 'un_gender']
raw_data.shape

 

 

성별로 나이의 평균을 구해보겠습니다.

print(raw_data['age'].min()) # 해당 컬럼의 최소값
print(raw_data['age'].max()) # 해당 컬럼의 최대값

pd.pivot_table(raw_data, index = 'gender',\
               values='age', aggfunc='mean')

성별로 나이의 평균에는 큰 차이를 보이지 않습니다.

나이의 최대값이 조금 이상한점이 있습니다.

 

이번에는
1) 성별(남자/여자)
2) 나이에 따른 클릭/좋아요/장바구니/구매 비율을 알고 싶습니다.

 

나이의 경우 아래 기준으로 그룹을 나누고 진행하겠습니다.

2-1) 17세 이하
2-2) 18세 이상, 24세 이하
2-3) 25세 이상, 35세 이하
2-4) 36세 이상, 44세 이하
2-5) 45세 이상, 54세 이하
2-6) 55세 이상

 

 

피벗 테이블을 활용해 성별 그리고 event_name기준으로 간단히 데이터를 확인하고 컬럼들을 세분화 해보겠습니다.

raw_data.pivot_table(index = 'gender', columns = 'event_name',\
                       values='age' ,aggfunc='count')

 

이제 컬럼들을 나이대에 맞춰 세분화 해보겠습니다.

# 나이(age)가 17세 이하인 사용자를 찾아서 age(Group) 컬럼에 "00 ~ 17"이라는 값을 넣어줍니다
raw_data.loc[raw_data['age'] <= 17, 'age(Group)'] = "00 ~ 17"

# 위 방식에 따라 나이 설정 값으로 지정해줍니다
raw_data.loc[(raw_data['age'] >= 18) &\
               (raw_data['age'] <= 24), 'age(Group)'] = "18 ~ 24"

raw_data.loc[(raw_data['age'] >= 25) &\
               (raw_data['age'] <= 35), 'age(Group)'] = "25 ~ 35"

raw_data.loc[(raw_data['age'] >= 36) &\
               (raw_data['age'] <= 44), 'age(Group)'] = "36 ~ 44"

raw_data.loc[(raw_data['age'] >= 45) &\
               (raw_data['age'] <= 54), 'age(Group)'] = "45 ~ 54"

raw_data.loc[raw_data['age'] >= 55, 'age(Group)'] = "55 ~ 99"

# 데이터를 정리 후 아래 2개 컬럼 내용을 확인합니다
raw_data[['age','age(Group)']]

 

위 age(Group) 컬럼을 활용하여 성별과 나이대에 따른 클릭/좋아요/장바구니/구매 결과를 확인해보겠습니다.

 

결과가 잘 확인 되었습니다. 이번에는 추가적으로 age(Group)에 따른 분포 상태와 구매 전환율을 확인해보겠습니다.

# add_to_cart, click_item, like_item, purchase_success 총 인원 수를 더해서 total이라는 새로운 컬럼을 추가합니다
table['total'] = table['add_to_cart'] + table['click_item'] + table['like_item'] + table['purchase_success']

# 위에서 추가한 total이라는 컬럼으로 purchase_success(구매) 컬럼을 나누면 결제 확률, 전환율(Conversion)이 나옵니다
table['conversion'] = table['purchase_success'] / table['total']

# 이 데이터프레임의 결과를 출력합니다
table

결과가 잘 확인되었습니다.

 

 

 

분석 결과는 다음과 같습니다.

  • 가장 많은 양의 결제가 일어난 구간은 여성 25 ~ 35세입니다. 총 2334298개로, 결제 완료의 45% 이상이 이 구간에서 발생했습니다.
  • 또한 어느 정도 모수가 받쳐주는(결제 완료 10000회 이상) 그룹 중 이보다 전환율이 높은 그룹은 1) 남성 25 ~ 35세, 2) 남성 36 ~ 44세, 3) 여성 25 ~ 35세 입니다. 남성 25 ~35와 남성 36 ~ 44세 전환율 차이가 별로 나지 않기 때문에 1, 2등의 큰 의미가 없어 남성 25 ~ 44세까지 같은 그룹로 볼 수 있다.

 

이런 상황에서, 데이터분석가는 퍼포먼스 마케터와 함께 다음의 아이디어를 제시하여 회사의 매출을 증대할 수 있습니다.

(한 명의 고객을 데려오는데 필요한 비용, 줄여서 고객 획득 비용(Customer Acquision Cost, 이하 CAC))

  • 마케팅 예산을 남성 25 ~ 44세쪽에 집중한다. 이 그룹이 전환율이 높기 때문에, CAC가 여성 25 ~ 35세와 동일하다면 남성 25 ~ 44세에 마케팅 예산을 늘리는 것은 좋은 전략입니다.
  • 남성 25 ~ 44세 그룹의 CAC가 상대적으로 높다면, 이 CAC을 낮추는 시도를 합니다. 이 전략이 성공하면 그 후에 마케팅 예산을 집중하는 것도 방법입니다.
  • 현재 이용하고 있는 광고 채널을 다각화하여, 남성 25 ~ 44세가 활동하는 곳에 집중적으로 마케팅 예산을 투입하는 것도 시도해볼만 합니다.

 

 

다음 페이지에서는 본 환경을 이어서 분석을 진행하도록 하겠습니다.

 

반응형