[AI스쿨 7기, 14주차] pandas background_gradient, seaborn heatmap, 중복 데이터, ARPPU, MAU, 리텐션, 코호트 빈도, unstack, RFM, 채용후기, 코드리뷰 가이드라인, 추천시스템

hyemin·2022년 12월 20일

멋쟁이사자처럼

목록 보기
50/51

221220 멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

✅ 1201 실습 파일

  • InvoiceNo
    실제 비즈니스에서는 취소건에 업데이트를 하기 보다는 새로운 레코드를 하나 더 생성한다.
    주문-취소가 짝이 되도록 만든다. 언제 주문이 일어났고, 언제 취소가 되었는지 알기 위해 로그를 남기는 방식으로 구현한다.
    카드 결제 데이터는 취소가 마이너스 승인이다.

  • 수치변수 히스토그램
    ❓ 어떻게 그래프를 해석할 수 있을까?(Quantity, UnitPrice)
    🔸 이상치가 있다. 값이 1 가까운 부분에 쏠려있다.

  • 전체 주문금액 파생변수
    주문서와 결제 테이블이 실 비즈니스에서는 따로 되어 있기도 하다.
    이 데이터는 주문서 테이블이라고 볼 수 있다.
    ❓ 결제 테이블에는 무엇이 있을까?
    🔸 결제 테이블이라면 고객ID, 주문서ID, 총결제금액, 결제수단, 결제일자, PG사승인번호, 상태값(완료, 실패)

  • ❓요일에서 특이한 점이 있다면?
    🔸 토요일이 없다.

  • estimator 가 들어가는 시각화에서는 errorbar(이전 버전은 ci) 를 제외하고 그리는 것을 추천
    y 값은 수치 데이터를 꼭 하나 지정해주어야 한다. 그리고 연산은 len 을 사용하면 개수를 세어 시각화한다.

  • ❓ 어떨 때 pandas 의 background_gradient 를 사용하고, 어떨 때 seaborn 의 heatmap 을 사용하면 좋을까?
    🔸 pandas 의 background_gradient 는 변수마다 성질이 다를 때, 각 변수별로 스케일 값을 표현한다.
    🔸 seaborn 의 heatmap 은 같은 성질의 변수를 비교할 때, 전체 수치 데이터로 스케일 값을 표현한다.

  • ❓ 중복 데이터는 왜 생길까?
    🔸 중복 데이터는 게시판에 글을 쓸 때 네트워크가 불안정할 때 전송버튼을 두 번 누르거나, 서버측 트래픽 이슈로 중복해서 쌓이는 경우가 발생하기도 한다. 요즘은 대부분 이런 이슈가 없도록 프론트, 백엔드 개발에서 고려해서 프로그램을 작성하지만 그래도 중복 이슈가 발생하기도 한다.
    🔸 가끔 서버가 불안정할 때 카톡 2번 보내지는 경험과 비슷하다.

고객

DAU, MARU, CAC, ARPPU, LTV, ROAS 는 따아, 아아, JMT 처럼 자주 사용하는 용어를 줄여서 사용하는 것과 비슷하다. https://terms.naver.com/entry.naver?docId=2028542&cid=42914&categoryId=42915

  • ARPU(Average Revenue Per User) : 가입한 서비스에 대해 가입자 1명이 특정 기간 동안 지출한 평균 금액
  • ARPPU(Average Revenue Per Paying User) : 지불 유저 1명당 한달에 결제하는 평균 금액을 산정한 수치
  • ARPPU 를 구할 때, "Customer_ID" 는 count 가 아니라 nunique를 사용한다.
# df_valid(유효고객, 유효주문)내 고객별( CustomerID ) 구매( InvoiceNo ) 빈도수를 구합니다.
# 고객별 구매 빈도수, 평균 구매 금액, 총 구매금액
# cust_agg
cust_agg = df_valid.groupby(["CustomerID"]).agg({
    "InvoiceNo":["nunique", "count"], 
    "TotalPrice":["mean", "sum"]})
cust_agg.columns = ["nunique", "count", "mean", "sum"]
cust_agg

MAU(Monthly Active User)

한 달 동안 해당 서비스를 이용한 순수한 이용자 수. 해당 서비스를 얼마나 많은 사용자가 실제로 이용하고 있는지를 나타내는 지표
MAU 는 기준을 다르게 정하기도 하는데 로그인 수로 세기도 하고,
여기서는 구매 데이터만 있기 때문에 구매수로 구했다.

# df_valid = df_valid.groupby(["InvoiceYM"])["CustomerID"].nunique()
mau = df_valid.groupby("InvoiceYM").agg({"CustomerID":"nunique"})
mau.plot.bar(figsize=(12,3), rot=30)

유효 고객, 유효 주문에 대해 월별 데이터 InvoiceYM 확인

리텐션

❓ 리텐션이 무엇일까? 코호트 분석 중 시간으로 묶어서 분석하는 기법이기도 하다.
🔸 코호트 기법에서 시간으로 묶어서 분석하는 것이 리텐션이고 리텐션으로는 이탈, 성장 등을 분석할 수 있다.
이탈 : 지난 달에 구매한 사람이 이번달에도 구매했는가?
성장 : 지난 달에 비해 매출액이 늘어났는가?
🔸 리텐션을 볼 때는 서비스마다 보는 관점이 다르기도 하다.
🔸 전월대비 유지고객 비율, 헬스장 전월 대비 회원권 유지 회원 비율, 정기 구매 고객, 구독형 서비스(통신사, 정수기, OTT, 클라우드) 가입자 유지 비율

❓ 리텐션을 어떻게 구할 수 있을까?
해당 고객의 첫 구매월을 찾는다. 첫 구매월과 해당 구매 시점의 월의 차이를 구한다. 첫 구매한 달로부터 몇달째 구매인지를 구한다.
해당 고객의 해당 구매월 - 첫 구매월 의 차이를 구한다. => 해당 구매가 첫 구매로부터 몇 번째 달의 구매인지를 구할 수 있다.

df_valid["해당구매월"] = pd.to_datetime(df_valid["InvoiceYM"])

df_valid["최초구매월"] = df_valid.groupby("CustomerID")["해당구매월"].transform("min")

df_valid[["CustomerID", "InvoiceDate", "최초구매월", "해당구매월"]].sample(5)

첫 구매일로부터 몇 달 째 구매인지

year_diff = df_valid["해당구매월"].dt.year - df_valid["최초구매월"].dt.year
month_diff = df_valid["해당구매월"].dt.month - df_valid["최초구매월"].dt.month

" 연도차이 * 12개월 + 월차이 + 1 "로 첫 구매 후 몇달 후 구매인지 알 수 있도록 CohortIndex 변수를 생성
2010-12-01부터 2011-12-01의 데이터를 기반으로 진행되어 CohortIndex 변수의 최소값은 1이며, 최대값 13.

❓ 코호트 빈도를 구했더니 어떤 인사이트를 얻을 수 있을까?
🔸 첫 달에만 구매하고 다음달부터 구매하지 않는 사람이 많다.
🔸 마케팅비를 많이 쏟아서 고객을 유치했지만 유지가 잘 되지 않는 것으로 보인다.
🔸 휴면 고객을 위한 이벤트, 쿠폰 등이 적절한 시점에 있으면 도움이 되겟다라는 계획을 세워볼 수도 있다.

❓ 판다스의 어떤 기능으로 구할 수 있을까?
crosstab : 기준이 중복제거해야한다는 조건이라면 groupby 를 사용하는게 나아보인다.
df_valid.groupby(["최초구매월", "CohortIndex"])["CustomerID"].nunique()

❓ 어떻게 하면 이미지의 리텐션 표처럼 구할 수 있을까?
.unstack()

값을 깔끔하게 보이게 하기 위해서.
cohort_norm.index = cohort_norm.index.astype(str)
히트맵은 대각선을 기준으로 같은 달.

코호트 분석에서 시간 단위로 묶어서 보는 분석 중에 하나가 리텐션 분석이다. 같은 달에 첫 구매한 사람들이 같은 집단으로 묶였기 때문에 시간 단위 코호트 분석이 된다.

RFM

R(Recency) 최근에 구매했는지
F(Frequency) 얼마나 자주 구매했는지
M(Monetary) 얼마나 많은 금액을 구매했는지?
를 기준으로 고객 Segment 를 나누는 것이 RFM 분석이다.
📌 미리 읽어오면 좋다. http://www.itdaily.kr/news/articleView.html?idxno=8371


📌 nc soft 면접관 관점에서 채용후기 (https://m.blog.naver.com/rlawoals93/221372472680)
📌 프론트엔드 코드 리뷰 가이드라인 https://jobs.class101.net/a6c5c3e8-a45c-49a1-9b7c-c7624398c571
📌 토크ON 82차. 추천시스템 분석 입문하기 | T아카데미 - YouTube (https://www.youtube.com/playlist?list=PL9mhQYIlKEhdkOVTZWJJIy8rv6rQaZNNc)


퀴즈

13/15문제

  1. 코호트 분석을 통해 회사는 고객이 겪는 자연적 주기를 고려하지 않고 맹목적으로 모든 고객을 분할하는 대신 고객(또는 사용자)의 수명 주기 전반에 걸쳐 패턴을 명확하게 볼 수 있습니다.
  1. 잔존율 분석에서 일관된 유지 분석을 실행하여 알 수 없는 항목을 골라주세요.
    고객이 이탈하는 이유, 고객이 떠날 가능성이 더 높을 때, 이탈이 수익에 미치는 영향, 유지 전략을 개선하는 방법을 알 수 있다.
    고객이 이탈 후 돌아올 가능성이 높을 때는 알 수 없다.

  2. 중복 데이터 확인 중 keep의 파라미터를 적용했을때 실행이 되지 않는 코드는 무엇일까요?
    keep=False 중복되지 않은 모든 값을 남김
    keep=True 는 실행이 안된다.
    keep="first"
    keep="last"

profile
아직 고쳐나가는 중.

0개의 댓글