탐색적 자료분석 방안 < Lift Score >
1) Lift score 정의
2) Lift를 이용한 데이터 분석
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import plotly.express as px
data=pd.read_excel('data.xlsx')
age=[]
for i in range(0,len(data)) :
if data.iloc[i,1] < 20 :
age.append('10')
elif data.iloc[i,1] <25 and data.iloc[i,1] >= 20 :
age.append('20-25')
elif data.iloc[i,1] < 30 and data.iloc[i,1] >= 25 :
age.append('25-30')
elif data.iloc[i,1] <35 and data.iloc[i,1] >=30 :
age.append('30-35')
elif data.iloc[i,1] <40 and data.iloc[i,1] >=35 :
age.append('35-40')
elif data.iloc[i,1] <45 and data.iloc[i,1] >=40 :
age.append('40-45')
data_new=pd.concat([data,pd.DataFrame(age)],axis=1)
1. 10대
data_10=data_new.loc[data_new.iloc[:,5] == '10']
data_10.iloc[:,0].value_counts()
m 5
f 4
Name: 성별, dtype: int64
data_10.iloc[:,3].value_counts()
경기 5
부산 2
강원 1
전주 1
Name: 지역, dtype: int64
data_10.iloc[:,4].value_counts()
핸드폰케이스 3
화장품 3
마스크 2
자동차용품 1
Name: 구매제품, dtype: int64
2. 20대 초반
data_20_1=data_new.loc[data_new.iloc[:,5] == '20-25']
data_20_1.iloc[:,0].value_counts()
m 39
f 28
Name: 성별, dtype: int64
data_20_1.iloc[:,3].value_counts()
서울 30
경기 21
부산 9
강원 3
제주 2
세종 2
Name: 지역, dtype: int64
data_20_1.iloc[:,4].value_counts()
노트북 18
마스크 14
핸드폰케이스 12
화장품 12
자동차용품 11
Name: 구매제품, dtype: int64
> 20대 후반 , 30대 초반, .. , 40대까지 동일
> 이렇게 보면 다른 연령대에 비해 특이한 점 발견하기가 어려움
4. 각 연령대 특징 파악 10대 - 성별
* 10대 그룹에서 남자와 여자에 대한 Lift Score를 계산해보자
gender_data=[]
gender=['f','m']
for i in range(0,2):
g=gender[i]
a10= len( data_10[data_10.iloc[:,0] == g ] ) / len(data_10)
a20_1= len( data_20_1[data_20_1.iloc[:,0] == g ] ) / len(data_20_1)
a20_2= len( data_20_2[data_20_2.iloc[:,0] == g ] ) / len(data_20_2)
a30_1= len( data_30_1[data_30_1.iloc[:,0] == g ] ) / len(data_30_1)
a30_2= len( data_30_2[data_30_2.iloc[:,0] == g ] ) / len(data_30_2)
a40= len( data_40[data_40.iloc[:,0] == g ] ) / len(data_40)
T= a10/(a10+a20_1+a20_2+a30_1+a30_2+a40)
T=T*6
gender_data.append(T)
px.bar( x=gender , y=gender_data)
👉 m > 1 : 남자의 lift score가 1 이상이므로 다른 그룹에 비하여 10대 고객 그룹에 남자가 더 많이 포함되어있다고 해석
4-1) 각 연령대 특징 파악 10대 - 지역
* 데이터 전체에 대한 각 지역별 고객 빈도수
data.iloc[:,3].value_counts()
서울 90
경기 63
부산 26
제주 6
강원 5
세종 4
울산 3
전주 2
Name: 지역, dtype: int64
* 위 함수 계산
def cal_prob(data,name):
if len(data.loc[data.iloc[:,3] == name]) !=0 :
a= len(data.loc[data.iloc[:,3] == name])/ len(data)
else:
a=0
return a
* 각 지역에 대한 Lift Score를 계산해보자.
X{10대}[서울],X{10대}[경기],...,X{10대}[전주]
state_name=['서울','경기','부산','제주','강원','세종','울산','전주']
state_data=[]
for i in range(0,8):
name=state_name[i]
b10= cal_prob(data_10,name)
b20_1=cal_prob(data_20_1,name)
b20_2=cal_prob(data_20_2,name)
b30_1=cal_prob(data_30_1,name)
b30_2=cal_prob(data_30_2,name)
b40=cal_prob(data_40,name)
T=b10/(b10+b20_1+b20_2+b30_1+b30_2+b40)
T=T*6
state_data.append(T)
px.bar( x=state_name, y=state_data)
👉 10대 그룹은 강원도 거주 비율이 상대적으로 높다.
👉 max Lift Score = 8
4-2) 각 연령대 특징 파악 10대 - 구매품목
data.iloc[:,4].value_counts()
마스크 50
노트북 49
화장품 38
자동차용품 31
핸드폰케이스 31
Name: 구매제품, dtype: int64
* 구매품목에 대한 확률을 구하는 함수
def cal_prob_product(data,name):
if len(data.loc[data.iloc[:,4] == name]) !=0 :
a= len(data.loc[data.iloc[:,4] == name])/ len(data)
else:
a=0
return a
* 각 구매 품목에 대한 Lift Score를 계산해보자.
X{10대}[마스크],X{10대}[노트북],...,X{10대}[자동차용품]
product_name=['마스크','노트북','화장품','핸드폰케이스','자동차용품']
product_data=[]
for i in range(0,5):
name=product_name[i]
b10= cal_prob_product(data_10,name)
b20_1=cal_prob_product(data_20_1,name)
b20_2=cal_prob_product(data_20_2,name)
b30_1=cal_prob_product(data_30_1,name)
b30_2=cal_prob_product(data_30_2,name)
b40=cal_prob_product(data_40,name)
T=b10/(b10+b20_1+b20_2+b30_1+b30_2+b40)
T=T*6
product_data.append(T)
px.bar( x=product_name, y=product_data)
👉 10대들은 핸드폰케이스와 화장품을 다른 그룹에 비해 많이 구매하는 것을 알 수 있다.
👉 이와 동일하게 다른 연령대도 분석 할 수 있음
👉 Lift Score를 이용하게 되면 "다른 그룹"에 비하여, 얼만큼 더 많이 포함되어 있는지와 각 그룹에서의 선호도(관심도)를 쉽게 알 수 있다.
👉 그룹안에서의 비교 가능 & 다른 그룹간의 비교도 가능