본문 바로가기

TIL

[231213] Phython: 실습 - 광고 효율, 상품 기획, 할인율 분석

* 수강 강의명: 데이터 분석 종합반 - 4주차 

 [요약] 

1. 좋은 가설이란?

① 풀고자 하는 문제의 방향성과 일치하는 가설
② 테스트 가능한 가설 
③ 액션으로 이어질 수 있는 가설

 

2. 광고 효율이 나지 않는 매체를 찾아라!

- 가설 : 여러 매체 중 광고 효율이 낮은 매체에 사용한 비용을 가장 효율이 좋은 매체에 집행한다면 기존 대비 50%의 광고효율을 증대시킬 수 있을 것이다.

#라이브러리 불러오기
import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')

#분석할 데이터 불러오기
sparta_data = pd.read_csv('파일 경로')

#데이터 확인하기
sparta_data.tail()

#수업 신청 경로를 기준으로 수강생수 합계
access_media = sparta_data.groupby('access_media')['user_id'].count()

#plt.figure(width, height) : 넓이와 높이 만큼 이미지를 생성한다는 것을 말해줍니다!
plt.figure(figsize=(6,6))

#plt.bar(X축값, Y축값)
plt.bar(access_media.index,access_media.values)

#그래프의 제목
plt.title('수강생 별 수강 신청 경로')

#그래프의 x축 라벨 이름
plt.xlabel('수강 신청 경로')

#그래프의 y축 라벨 이름
plt.ylabel('수강생 수')

#x축 눈금의 글씨를 45도 회전
plt.xticks(rotation=45)

#그래프를 화면에 나타나도록 합니다.
plt.show()

 

 

- 결론 : 광고 효율이 저조한 오프라인 광고 비용을 인스타그램으로 이관한다면 매출이 개선될 것이다. 

 

* [tip] x축과 y축을 변경하려면?  
plt.bar 뒤에 h만 추가! 
plt.barh(access_media.index,access_media.values, color="g")

 

 

3. 패키지 상품 기획하기 

- 가설 : 게임개발 종합반 과목 결제 인원 중 가장 많은 인원이 동시에 구입한 과목과 패키지를 기획해 판매한다면 약 30%의 구매 전환율을 높일 수 있을 것이다.

#라이브러리 불러오기
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic') #한글 깨짐 방지 글꼴 설정

#데이터 불러오기
sparta_data = pd.read_table('파일 경로',sep=',')
sparta_data.head()

#각 수업에서 1(수강 신청) 한 사람의 수 세기
sum_of_students_by_class = sparta_data[sparta_data==1].count()

#필요하지 않는 데이터 삭제 하기
sum_of_students_by_class = sum_of_students_by_class.drop('user_id')

#그래프 사이즈 설정
plt.figure(figsize=(10,5))

#그래프 x, y축 설정 
plt.bar(sum_of_students_by_class.index, sum_of_students_by_class.values)

#그래프 타이틀
plt.title('게임 종합반 신청한 학생 수강이력')

#x축 레이블
plt.xlabel('강의')

#y축 레이블
plt.ylabel('수강생(명)')

#그래프 보여주기
plt.show()

 

 - 결론 : 게임 종합반 수강생이 가장 관심이 많았던 강의는 앱개발 종합반이므로, 2개 강의를 패키지로 구성할 경우 게임 종합반의 구매전환율이 개선될 것이다.

└ (추가 과제) 앱개발 종합반과 게임 종합반 수강생의 공통 수강 목적 찾기 

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic') 

sparta_data_app = pd.read_table('/content/user_db_app.csv',sep=',')
sparta_data_game = pd.read_table('/content/user_db_game.csv',sep=',')

app_users_goal= sparta_data_app.groupby('goal')['user_id'].count()
game_users_goal= sparta_data_game.groupby('goal')['user_id'].count()

plt.figure(figsize=(10,8))
plt.plot(app_users_goal.index,app_users_goal.values,color="red", label="app") plt.plot(game_users_goal.index,game_users_goal.values,color="blue", label="game")

#범례
plt.legend()

plt.title("앱 종합반, 게임 종합반 수강생의 관심사")
plt.xlabel('수강 목적')
plt.ylabel('수강생 수')
plt.show()

 

4.  할인은 정말 효과적인 선택일까?

- 가설 : 결제 마지막 페이지에서 할인 쿠폰을 제공하여 금액적으로 구매 결정에 걸림돌을 제거해준다면 결제율을 높일수 있을 것이다.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family='NanumBarunGothic')

sparta_data = pd.read_csv('/content/user_db1.csv')

sum_of_students_by_discounted = sparta_data[sparta_data['group']==1]['user_id'].count()
sum_of_students_by_discounted
sum_of_students_by_not_discounted = sparta_data[sparta_data['group']==0]['user_id'].count()
sum_of_students_by_not_discounted

# sparta_data['group'] ==1 는 group의 값이 1과 동일하다는 의미
 파이썬에서는 = 은 변수를 지정할 때만 사용하므로, == 이 "equal"임

#각 결제 인원에서 실제 실험 인원인 12000명을 나누고 각 퍼센테이지 구하기percent_of_students_by_not_discounted = sum_of_students_by_not_discounted/12000 *100
percent_of_students_by_discounted = sum_of_students_by_discounted/12000 *100
print(percent_of_students_by_not_discounted , percent_of_students_by_discounted )

plt.figure(figsize=(3,5))
x_list =["정가 구입 그룹", "할인 적용 그룹"]
y_list = [percent_of_students_by_not_discounted ,percent_of_students_by_discounted]
plt.bar(x_list, y_list, width = 0.8)
plt.title('할인 여부 결제 전환율 비교 분석')
plt.xlabel('할인 적용 여부')
plt.ylabel('결제 전환율')
plt.show()

 

- 결론 : 할인 적용 신청 그룹과 미적용 그룹의 결제율은 각각 46%, 20%로 할인 적용 시 결제 완료 비중이 높으므로, 할인 제공은 전환율 개선에 효과적이다.

 

5. 시각화 디테일 바꾸기
1) 막대그래프 색상 변경
- 전체 색상 변경: plt.bar(X, Y, color='원하는 색상 컬러')
- 각 바 마다 다른색 지정 : plt.bar(X, Y,  color = ['gold', 'b', '#FF0000'])
- 투명도 설정: plt.bar(X, Y, color = 'gold', alpha = 0.3)

2) 막대그래프 테두리 변경
- 테두리 색 변경: plt.bar(X, Y, edgecolor = '원하는 색상')
- 테두리 두께 변경: plt.bar(X, Y, linewidth = 원하는 두께) 

3) 그래프 너비 바꾸기
 - 바 두께 변경(기본 0.8): plt.bar(X, Y, width=원하는 두께) 

4) 그래프 폰트 바꾸기 
- 폰트 사이즈 변경: plt.title('수강생 별 수강 신청 경로', fontsize=원하는사이즈)

5) 바에 수치 나타내기(데이터 레이블 추가) * 반복문 활용 
#그래프를 bar라는 변수에 넣고,
bar = plt.bar(access_media.index,access_media.values)
#for 반복문으로, 
for rect in bar:
#각 바의 세로길이 값을 구하고, 
    height = rect.get_height()
#bar의 가장 정 가운데 x 좌표 구하기 : get_x()로 x축의 가장 왼쪽 부분 + get_width의 절반 값
    plt.text(rect.get_x() + rect.get_width()/2.0, height, '%.1f' % height, ha='center', va='bottom', size = 12)

 

** 결측치란?

- 누락 데이터를 말하며, None, NaN, 빈칸 등으로 표시됨. 명확한 결과를 얻기 위해 결측치 제거가 필요함 

- 결측치 확인 및 제거 방법  

① 전체 데이터 확인 :  sparta_data.info()
② 결측치 확인 : sparta_data.isnull().sum()
③ 결측치 제거 : sparta_data = sparta_data.dropna()

 

[정리]

1) 어떤 문제가 있었나 

2) 내가 시도해본 건 무엇인가

3) 어떻게 해결했나

4) 무엇을 새롭게 알았나

- 파이썬으로 그래프 디자인을 디테일하게 수정할 수 있는 법과 2개 이상 지표를 하나의 그래프로 넣는 법을 새롭게 배움

- 데이터 불러오기 시 결측값 확인 및 필터링 작업이 반드시 필요함(루틴으로!) 

- 7팀원들 도움으로 파이썬 문법 공부에 도움되는 사이트를 알게 됨

https://pandas.pydata.org/docs/reference/index.html 
https://codetorial.net/matplotlib/index.html
https://scikit-learn.org/stable/

https://wikidocs.net/