3월 마케팅 분석기법 파트가 끝나고
4월부터 데이터분석 파트가 시작되었는데 말이죠
그래서 TIL에서 알 수 있다시피.. pandas..python..sql..api..mcp..rss 크롤링..뭐라는거야
▼내용 참고
[GM4] 4월 TIL
'Growth Marketing/GM4' 카테고리의 글 목록
방과후 컴퓨터교실에서 배운 타자실력으로 디지털 노트 정리
pamsyra.tistory.com
마분기나 통계분석이랑 달리 이번에는 소화라도 해야겠다 싶어서 멋사에서 진행하는 야간 기초 스터디를 시작했습니다.
멋사는 참 친절한 것 같습니다. 저처럼 부족한 사람을 위해 나머지 학습도 만들어주고 흑흑
예상보다 스터디는 훨씬 만족스러운데 그 이유는 강사님의 강의 스타일이 저랑 맞아서..ㅎㅎ
배경과 이유를 상시 생각하고 알려주시는 게 저와 같은 입문찌끄레기에게 안성맞춤이라죠. 그리고 소수인게 마음에 들어요.
빛과 소금 같은 강사님이 주말 맞이 내주신 과제 2가지가 있는데 "퍼널분석"과 "리텐션분석"입니다.
하 이걸 나 혼자 한다면 스스로 뿌듯해서 행복할 것 같은데 자신은 없어요.
퍼널분석 과제부터 들어가겠습니다.
목표는 "a 기업의 병목 구간과 개선 아이디어 제안" ( + 자신감넘치게 심화버전 선택)
Attitude는 "with Gemini"
바로 할 일을 정리해봅시다.
1. 과제 파악
2. 데이터셋 확인
3. 데이터 분석
- 데이터불러오기 / 데이터 파악 / 데이터 정제 / 분석을 위한 데이터 가공 / 마케팅 지표 집계 / 인사이트 도출
4. 개선 아이디어 제안
1. 과제 파악
■ 분석 상황 요약
1. 한 이커머스 사이트에서 2015년도에 1월 부터 4월까지 4개월간의 방문 데이터를 분석하고자 한다.
2. 첫주문 퍼널은 다음 4단계로 구성되어 있다
: Home page → Search → Payment → Confirmation(결제 완료)
3. 매월 신규가입한 유저들의 주문 횟수가 0~5회이다.
■ 산출물
병목 구간 찾고 개선 아이디어 도출 ( 퍼널 단계별 방문자 수 집계 및 단계별 전환율 포함)
우선 이 상황이 실무라면..
"00씨, 아 신규가입유저들 주문횟수가 시원찮은데? 전환율 올릴만한 개선안 좀 만들어봐"
"네니오"
2번에 홈페이지부터면 홈페이지를 이미 들어온 사람 대상으로만 퍼널분석하라는 거겠지?
전부 홈페이지 들어온 다음의 데이터를 의미하는거겠지?
3번은 뭔말인지? 주문 횟수를 왜 0~5회라고 미리 알려준거지? 이해가 안되는데 세상엔 이해안되는게 많으니까 차근차근..
분석 과업이 부여되면, 우선적으로 데이터셋 이해가 필요합니다.
자체해석하는 오류를 피하기 위해 데이터엔지니어나 백엔드 담당자로부터 데이터셋의 의미를 꼭 꼭 물어보라고 하셨고,
그래서 물어보면,
2. 데이터셋 확인

음음 그렇구나 내 멋대로 해석하지 않고 이런 의미를 가진 데이터구나 라고 이해하고 넘어갑니다.
3. 데이터 분석
데이터 분석의 흐름은 5단계로 쪼갤 수 있습니다.
1) 데이터 불러오기 - pd.read_csv로 가져옵니다
2) 데이터 파악 - 어떤 데이터가 있는지 확인하는 과정으로 info, describe 쓰죠
3) 데이터 정제 - 999살 고객이 있으면 어떨 것 같으세요? 이상치/결측치 처리해야합니다.
4) 분석을 위한 데이터 기본 가공 - 파생변수 생성하는 단계입니다(제가 어려워하는 단계예요)
5) 마케팅 지표 집계 - group by를 이용해서 우리한테 필요한 지표로 산출합니다
6) 인사이트 도출
1&2) 데이터 불러오기 & 데이터 파악
코랩 이용해서 할 거라서, 코랩 파일 있는 폴더에 다운로드 받은 데이터도 함께 넣어줍니다.
드라이브 마운트하고나서 경로복사해서 pd.read_csv() 사이에 경로와 인코딩 넣어줍니다.
이제 여러번 했다고 데이터 불러오고 파악하는 코드는 조금 익숙합니다.
심화버전 과제에는 csv파일이 총 5개 있는데, 파일 불러오면서 벌써 후회했어요. 그냥 기본과제할걸
무슨 데이터인지 head부터 쫘르륵 보고 테이블별로 info랑 describe 봐볼게요.-> 이게 효율적인진 모르겠습니다
head 보니까 users말고 전부 user_id 뿐이라 users 테이블 옆에 다 붙일 수 있겠네요.




그런데 값이 user_id 뿐인데 describe해서 최소, 최대, 중앙, 평균 이런 값들 알 필요가 있나.. count만 의미있는게 아닌가 싶네요


3) 데이터 정제
결측치, 이상치 확인해봅니다.
없네요..? 이거 미리 데이터 병합 한 다음에 결측치 확인해봐도 되려나요..안되겠지

4) 분석을 위한 데이터 기본 가공
4-1) 데이터 병합
4-2) 날짜 변환
4-3) 파생변수 생성 : 이탈률 / 전환율
4-1) 데이터 병합
다음은 퍼널 단계별로 집계 분석 하기 위해서 데이터를 병합할겁니다.
그런데, 이거 병합 어떻게 하지 기억이 안나는데.. 옛날 실습 찾아보니 로아스 구해서 컬럼 만드는 건 알아냈는데 df["ROAS"] = (df["매출액"] / df["광고비"] *100).round(2) 병합..sql에서 join 함수 써야 값 없는 건 null값 나오고 할텐데.. 판다스는 기억이 안나서 제미나이에게 물어봤습니다.
판다스에도 sql의 left join 같은 게 있네요.
merge라는 함수 써줄게요



잘 합쳐진 것 같습니다.
원래 users 컬럼 4개에 나머지 테이블 1개씩 해서 4개 합쳐졌으니 8컬럼이네요.
잘 합쳐진 merged_df를 df_funnel이란 변수에 깨끗ㅎㅏ게 담겠습니다. 그래야 다음 작업들이 쉬워지니까..
※ merge 첫 번째 시도 실패
- 컬럼 x, y 명이 중복돼서 오류가 났다...어쩌고 저쩌고.. suffixes 이용해서 컬럼명 중복되지 않도록

그런데 오류 해결하고나니 컬럼명에 죄다 page가 들어가 있길래 merged_df에 붙여서 그런 것 같아요.
앞에 붙는 page 없애고 싶어서 물어봤더니 column지정하고 rename 지정하고 너무 복잡해지길래 merged_df 누적하지말고 하나씩 넣으면 안되냐니까 그러면 리셋돼서 안붙는다길래 그냥 포기합니다. page 다음 단계니까 page 있어도 된다며 자기합리화...


4-2) 날짜 변환
위에서 봤듯이 date가 object니까 이걸 날짜형식으로 변환하겠습니다. 날짜라고 인식시켜줘야 하니까요.
짜잔, object → datetime으로 바뀌었습니다

4-3) 파생변수 생성 : 이탈률 / 전환율
흑흑 드디어 이탈률, 전환율을 구할 수 있는 파생변수 만들어볼게요.
수업시간 때 전환율 구했던 데이터는 전환수와 클릭수가 있는 데이터였지만
지금은 user들의 수로 전환율, 이탈률을 구해야 합니다.
nun값 제외하고 셀 수 있도록 count 이용해서 분모, 분자 만들어주고요
cvr = ( 현단계유저수 / 전단계유저수 ) * 100 수식 사용해서 각 단계별로 cvr 지정합니다.
출력할 때는 소수점 첫번째자리까지 표시하라고 했으니 .1f로 하고 출력.
이탈률은 전환율의 반대니 churn 지정해서 100 - cvr 해줍니다.


아니 어쩐지 전환율이 너무 이상해서 이게 맞나 멍때리다가 계산 실수 찾았습니다.
분모를 직전단계가 아니라 total로만 쓰고 있었네 ㅡㅡ

5) 마케팅 지표 집계
5-1) 장치별(device) 전환율
5-2) 성별별 전환율
5-3) 가입자의 device 분포
5-4) 가입자의 성별 분포
5-5) 월별 가입자수
이제 데이터를 조금 더 세분화해서 자세하게 분석해봅시다... 어떤 기기로 온 유저가 전환율이 안좋은지, 어떤 성별이 전환율이 안좋은지 확인해볼게요
group by를 써야할 것 같아요.
pandas랑 sql이랑 계속 헷갈리는데, 교안보면서 차근차근 해보겠습니다..
5-1) 장치별(device) 전환율
장치별로 전환율을 봐야하니 device로 groupby하면 되겠다고 어림짐작해봅니다🤔
그리고나서 새로운 표를 만들어서 그 표에서 퍼널단계별(열) 유저수(행)을 구한다고 생각해봅시다.
열에 들어갈 값들은 전부 df_funnel의 count 값들이니 집계함수를 여러개 쓸 수 있는 agg를 활용합니다.

5-2) 성별별 전환율
성별로 전환율 분석하는 것 또한 5-1의 장치별과 동일하게 진행합니다.

5-3 & 5-4) 가입자의 device 분포 / 성별 분포
가입자의 device 분포와 성별 분포보다 월별 가입자수 먼저 분석했는데요.
하면서 왜 이렇게 꼬았지라는 생각이 들면서... df_funnel말고 원래 df_users 테이블에서 그냥 device만 뽑아오면 되겠다는 생각이 들어서 간단하게 끝냅니다..
그룹화된 데이터를 세는 value_counts() 써줄게요

5-5) 월별 가입자수
월별 가입자수를 구하려면...date 컬럼을 묶어서 count 해야겠다는 생각이 들었는데요.
무슨 함수 쓸지 바로 떠오르진 않고 groupby나 loc써서 4개월 조건 걸어주면 되지 않을까 막연히 생각하면서 제미나이 한테 물어봤습니다.
groupby+agg를 추천하더군요
갑자기 반골기질이 발동해서 pd.cut으로 만들고 싶다고 했습니다.
실패했고요
돌고 돌아 month 컬럼 만들고 dt.month이용해서 value_counts()이용하는 걸로 채택되었습니다(?)
.dt.month을 써서 월 정보만 빼겠습니다
astype(str)을 써서 숫자(dt.month로 뺀 월정보)를 문자로 바꿔줄게요.
+ '월'을 써서 바꿔준 문자뒤에 월 붙여서 1월, 2월, 3월 이렇게 보일 수 있도록 지정해주고,
sort_index() 써야 1월, 2월 순서대로 정렬됩니다. 없으면 가입자수가 제일 많은 컬럼순으로 나열될지도...
month_group 칼럼 만들고 value_counts()로 뽑았는데, 나중에 실무에서는 연도도 중첩될 수 있으니 제미나이가 처음에 추천한 dt.to_period('M')을 이용해서 월만 꺼내서 분류하라고 합니다...



하 기껏 구했는데 결과값이 의심 가득하게 나왔습니다.
크로스체크하려고 loc 써서 월별로 조건문 만들었는데, 그래도 동일하게 나온걸 보면 코드는 잘 돌아간 것 같아요.
이럴거면 처음부터 내가 loc 써서 한다고 할 때 제미나이는 왜 말렸는가?

월별 그룹 묶는데 할 수 있는 코드가 너무 많아요.
1. groupby + agg
2. loc
3. dt.month
4. dt.to_period
하나도 정확히 모르는 상황에서 하나 하다가 두번째 방법 듣고 두번째 방법 이해도 하기전에 세번째 방법듣고 이런식으로 방법만 몇 개 인풋되는건지? 😵💫😵💫😵💫😵💫
월별 이용자수 뽑는 데 체력 다 썼습니다. 꽥
미치게 어렵다
제미나이가 pd.to_period라는 새로운 코드 말하길래 그래도 배웠던 코드로 뽑아보고 싶잖아요?
pd.cut이용해서 age group만든것처럼 월별로 묶고 싶어서 해보는데 제미나이가 비효율적이라고 말해줬습니다.
어쩐지 bins 값에 넣을게 상상이 안되더라니 뭘 구할 때 뭘 써야 되는지 모르니까 이렇게 오래걸리네요


Q. count 와 value_counts() 차이가 뭐죠?
count로는 그룹화된 데이터의 빈도 셀 수가 없어서 value_counts()를 사용

6) 인사이트 도출

자...이제 구해둔 전환율과 이탈률을 보면서 인사이트를 도출해보겠습니다.
퍼널단계 중 결제완료 구간에서 이탈률이 가장 높습니다.
무려 92.5% !
desktop에서는 99.8 % !! ;;; 머선129
구매의사가 확실한 주문버튼을 누른 고객들이 결제완료구간에서 이탈한다는 것은
결제 완료까지 너무 등록할 게 많다거나(주소지목록 연동 안됨, 개인정보 연동안됨, 쿠폰 적용 안됨 등)
결제서비스의 오류가 있을 수 있겠네요. pg사 연동이 안된다거나, pg사가 몇 개 없다거나, 완료버튼이 눌리지 않는다거나.. 등등
혹은 추가배송비를 결제완료구간에서 알게되어서 흥미가 떨어졌을 수도 있어요...(=나)
가입자의 장치 분포를 보면 desktop유저가 66.6%로 모바일보다 많은데, 이탈률은 모바일보다 높습니다.( 모바일도 99%높긴합니다만)
desktop으로 결제하려다가 이상한 팝업이 뜨거나 주문버튼이 화면에서 날라가거나 할 수도 있겠네요.
제 생각에는 결제 시스템 오류 부터 점검하고 결제 프로세스를 간소화하는 방향으로 제안할 것 같습니다.
시스템 점검이 먼저일 것 같아요

4. 개선 아이디어 제안
💡 고객 이탈률이 가장 높은 구간은 결제완료 구간으로 주문 이후 결제완료까지 이탈률 92.5%로 나타났다. 주문 버튼을 누른 유저들은 구매의사가 명확함에도 불구하고 해당 단계에서 결제완료를 하지 못했다는 것은 결제구간에서 pg서비스 관련 오류가 지속적으로 발생했을 수 있다. 결제 서비스 오류 점검 및 결제 프로세스 간소화 등의 개선이 필요하다.
kaggle 가입하다 크롬창 다 튕겨서 억울했어요...
제미나이 없이 저 혼자 고대로 복습해야겠어요... 본 수업 처럼 머릿속에 또 남는 게 없네 ..😂
강사님이 이거 40-50분 짜리랬는데 4시간 45분 걸렸습니다.
'Growth Marketing > Job Preparation' 카테고리의 다른 글
| 마케터 지망생의 데이터 분석 정복기 ②|Pandas로 뷰티 기업 리텐션 분석하기!💄 (1) | 2026.04.19 |
|---|---|
| 마케터 지망생의 Figma Site 정복기|LPO전략 설계부터 랜딩페이지 제작까지! (0) | 2026.03.24 |
| 마케터 지망생의 META Pixel 정복기|팝업 이미지 내 버튼 클릭 이벤트 설치하기 ! (0) | 2026.03.24 |
| 마케터 지망생의 GTM 정복기|팝업 이미지 띄우고 링크 연결까지! (0) | 2026.03.23 |
| 마케터의 종류와 특징 비교 - 퍼포먼스 · 브랜드 · 콘텐츠 · CRM · 그로스 (1) | 2026.03.20 |