cs

Intro.

공부 다시 해야지. 

이제는 머리가 예전 처럼 총명하지 않으니까,,, 

하, 수식 딱 보면 공식이랑 뭐든게 딱 나올 때가 있었는데.. 이젠 바보가 되어버렸으..

 

대학교때 수학문제 풀 때 처럼 다시 해야할것같다. 

공부하고 다시보고 오래보고 다시보고 또 보고 공부하고 오래 붙잡고 있는거. 

블로그 목적인 내가 정리 한거 다시 보고 또 보고 하려는거니까. 

잡소리 그만하고 해보자. 


1. 서론 (Introduction)

1.1 코호트 분석이란? (What is Cohort Analysis?)

코호트 분석은 동일한 기간 또는 동일한 사건을 경험한 사용자 그룹(코호트)을 추적하여 시간에 따른 행동 변화를 분석하는 방법론이다.

코호트 분석을 통해서 개별 사용자 그룹의 행동 패턴을 비교하고 분석할 수 있게 하는목적이다. 

 

코호트가 뜻이 뭔데? 

코호트(Cohort)는 원래 라틴어 cohors 에서 유래한 단어로, 고대 로마 군대에서 하나의 군대 단위(대대)를 의미했다고 한다. 
로마 군대는 코호트를 기반으로 조직되었으며, 이는 군대 내 특정 그룹을 나타내는 용어로 사용되었다고 한댱.
시간이 지나면서 코호트라는 말이 이제는 특정 기간 동안 동일한 특성을 공유하는 사람들의 그룹을 지칭하는 데 사용되어서 우리가 흔이 아는 코호트 분석이 된거댜

 

 

주요 개념:

  • 코호트 (Cohort): 동일한 기간(예: 특정 월, 분기, 연도)에 가입하거나 특정 행동(예: 첫 구매)을 수행한 사용자 그룹
  • 코호트 매트릭스 (Cohort Matrix): 코호트별로 시간 경과에 따른 행동 데이터를 배열한 매트릭스

흔하디 흔한 코호트 매트릭스 이런거. 과연 모든 데이터가 저리 깔끔할까?


수학적 표현:

코호트 분석에서는 일반적으로 사용자 그룹의 특정 행동 비율을 시간에 따라 계산을 한다.

예를 들어, 특정 코호트(특정 그룹)의 유지율은 아래와 같이 계산 해볼 수 있다. 

 

 

여기서,

  • U_i,j i번째 코호트의 가입 후 개월째에 여전히 활동 중인 사용자 수를 의미하고
  • U_i,0번째 코호트의 초기 사용자 수를 나타낸다 

 

예시가 필요하다.

 

특정 월에 가입한 사용자 그룹(코호트 2024-01)의 유지율을 계산해보쟈

(코호트 분석이 유지율만 뜻하는게 아니다, 예시가 유지율을 구해본다는거다)

 

코호트 정의:

  • 2024년 1월에 가입한 사용자들: 코호트 2024-01
  • 초기 사용자 수 (U_2024−01,0) : 100명

시간 경과에 따른 활성 사용자 수:

  • 가입 후 1개월째 (2024년 2월) 활동 중인 사용자 수 : 80명
  • 가입 후 2개월째 (2024년 3월) 활동 중인 사용자 수: 60명
  • ...

유지율 계산:

  • 가입 후 1개월째 유지율을 계산해본다고하면 아래처럼 계산식이 나타나고, 80%로 정의가 가능하다:

  • 가입 후 2개월째 유지율을 계산해본다고하면 아래처럼 계산식이 나타나고, 60%로 정의가 가능하다:

 

단순하게 생겨서 이해가 바로 가긴한다. 

중요건, 초기사용자의 수의 숫자가 분모로 유지가 되는 점이겠다. 


 

1.2 코호트 분석의 중요성 (Importance of Cohort Analysis)

뭐 중요성이라기 보다는 활용?정도로 해보자 

코호트 분석은 여러 가지 이유로 비즈니스에서 중요한 도구로 사용된다고 하고, 여러 어플 회사들이 매일 말하기도 했었따..

 

코호트 분석이라고 해서 계속 리텐션만 보는게 코호트분석이 아니다. 

단어 뜻처럼 고객 집단에 대한 분석 자체가 코호트 분석이기 때문에 

리텐션 뿐만 아니라 다양하게 분석을 해볼 수 있는것이다. 

 

아래는 고객 집단? 사용자 집단에 대한 다양한 분석들이다.

 

1. 사용자 유지율 분석 (User Retention Analysis)

  • 목적: 신규 사용자가 얼마나 오래 서비스를 이용하는지 파악 (위에서 예시로 했던 리텐션이다)
  • 활용: 마케팅 전략 및 제품 개선의 근거 자료로 사용할수있다 
  • 수학적 공식: 유지율 (Retention Rate) = 활성유저 / 초기유저수 * 100

띄어쓰기 안되는거 킹받네

 

2. 이탈률 분석 (Churn Rate Analysis)

  • 목적: 사용자가 언제, 왜 이탈하는지 파악 
  • 활용: 이탈을 방지하기 위한 조치 및 대응 전략 수립
  • 수학적 공식: 이탈률 (Churn Rate) = 이탈유저수 / 초기유저수 *100

 

(공부의 중요성을 여기서 느낀다, 어제 Churn이라는 단어를 업무에서 봤는데,, 기억도 안나고 뭔 뜻이더라 했던 과거의 나 자신... 멍충하다 공부 더하자)

 

 

3. 마케팅 캠페인 효과 측정 (Measuring Marketing Campaign Effectiveness)

  • 목적: 특정 마케팅 캠페인이 신규 사용자 유치 및 유지에 미치는 영향 평가
  • 활용: 캠페인의 성공 여부를 판단하고, 향후 캠페인 전략 수립에 활용
  • 수학적 공식: 캠페인 효과 = 캠페인 후 신규 유저수 / 캠페인 전 신규 유저수 

전후비교이긴 하지만 뭐..

 

 

4. LTV (고객 생애 가치) 계산 (Calculating Customer Lifetime Value)

  • 목적: 고객이 기업에 얼마나 많은 가치를 제공하는지 계산
  • 활용: 고객 유치 비용 대비 수익성 평가
  • 수학적 지표:

갑자기 시그마 튀어나왔다고 놀라지마세요

  • R_i 년차에 고객이 지불한 금액
  • i년차에 고객을 유지하는 데 든 비용
  • 은 할인율
  • 은 고객 유지 기간

대부분의 데이터 분석 글들을 보면 LTV를 많이 활용하는데, 그래도 그 안에 있는 수학적 공식정도는 한번 집고 넘어가야 한다고 생각한다.

 

(솔찍히 데이콘 보면 그냥 뜻 없이 죄다 코드만 있어서, 뭘 말하고싶은건지도 모르겠고, 고객 데이터는 LTV쓰는거래 그러면서 복붙하는건지 모르겠다..)


2. 실습: 코호트 분석 예제 (Hands-on Example)

 

예를들어 e-commerce데이터가 있다고 가정하고 예시를 정말 간단하게 만들어보자. 

 

위 데이터 프레임은 개인 프로젝트의 일부 테이블이다.

위 처럼 고객의 데이터들이 있고 주문일을 기준으로 코호트를 만들어보려고 한다. 

 

고객의 첫 주문 월을 기준으로 코호트를 정의하고 각 코호트의 월별 유지율을 계산해보자.

 

# 첫주문월과 주문월을 period[M] 형식으로 변환
df['첫주문월'] = pd.PeriodIndex(df['첫주문월'], freq='M')
df['주문월'] = pd.PeriodIndex(df['주문월'], freq='M')

# 각 주문이 첫 주문으로부터 몇 개월이 지났는지 계산
df['월차'] = (df['주문월'] - df['첫주문월']).apply(lambda x: x.n)

# 코호트 그룹을 첫 주문 월로 설정
df['코호트그룹'] = df['첫주문월']

# 중복 데이터 제거 (고객ID, 코호트그룹, 월차가 동일한 중복 제거)
df = df.drop_duplicates(subset=['고객ID', '코호트그룹', '월차'])

# 피벗 테이블 생성
cohort_counts = df.pivot_table(index='코호트그룹', columns='월차', aggfunc='size', fill_value=0)

# 첫 달 주문 수로 나누어 유지율 계산
cohort_sizes = cohort_counts.iloc[:, 0]
retention = cohort_counts.divide(cohort_sizes, axis=0)

 

위의 테이블을 df라고 가정했을때 간단히 계산을 해볼 수 있는 코드다. 

df에서 '첫주문월'을 period형식으로가지고 왔기때문에 freq='M'처리를 해줬다.

 

만약에 retention의 값이 1.0 초과가 되는 것이 있다면, 그건 있을 수 없는 오류이기때문에 데이터를 다시 확인해주어야한다. 

 

중복이거나 전처리가 안되었기 때문에 나타나는 현상이기에 , 중복이라도 한번 꼭 처리해주고 계산해보자. 

 

리텐션(유지율)을 구하는 것이기 때문에 위에서 수식으로 계산한 것 처럼, 첫달의 주문일을 기준으로 그룹을 만들어주고 각 월별로 얼마나 계속 유지(주문을 꾸준히)하고있는지 결과를 나타내면 아래의 예시처럼 나타날것이다. 

참 설명하기 어렵고 해석하기 어렵다

 

대충 한번 보이는대로 적어본다면...

1. 2020-01 코호트

  • 월차 0 (1월): 유지율 1.0 (100%) - 이 코호트의 고객들이 첫 달에 100% 재구매함.
  • 월차 1 (2월): 유지율 0.844 (84.4%) - 1월에 첫 구매를 한 고객 중 84.4%가 2월에 다시 구매함.
  • 월차 2 (3월): 유지율 0.855 (85.5%) - 1월에 첫 구매를 한 고객 중 85.5%가 3월에 다시 구매함.
  • ...
  • 월차 35: 유지율 0.867 (86.7%) - 1월에 첫 구매를 한 고객 중 86.7%가 35개월 후에도 다시 구매함.

2. 2020-09 코호트

  • 월차 0 (9월): 유지율 1.0 (100%) - 이 코호트의 고객들이 첫 달에 100% 재구매함.
  • 월차 1 ~ 25: 유지율 1.0 (100%) - 각 월차에서 모든 고객이 지속적으로 재구매함.
  • 월차 26 이후: 유지율 0.0 (0%) - 이 시점 이후에는 데이터가 없어 유지율이 0으로 기록됨.

3. 2021-04 코호트

  • 월차 0 (4월): 유지율 1.0 (100%) - 이 코호트의 고객들이 첫 달에 100% 재구매함.
  • 월차 1 (5월): 유지율 0.0 (0%) - 4월에 첫 구매를 한 고객 중 5월에 다시 구매한 고객이 없음.
  • 월차 2 (6월): 유지율 0.5 (50%) - 4월에 첫 구매를 한 고객 중 50%가 6월에 다시 구매함.
  • 월차 3 (7월): 유지율 1.0 (100%) - 4월에 첫 구매를 한 고객 중 100%가 7월에 다시 구매함.
  • ...
  • 월차 26 이후: 유지율 0.0 (0%) - 이 시점 이후에는 데이터가 없어 유지율이 0으로 기록됨.

 

 

일반적인 패턴 해석:

  • 높은 유지율: 코호트 그룹에서 지속적으로 높은 유지율을 보이는 경우, 해당 기간에 고객 충성도가 높고 재구매가 활발히 이루어졌음을 의미!
  • 유지율의 감소: 시간이 지남에 따라 유지율이 감소하는 것은 자연스러운 현상이다. 즉 고객이 시간이 지나면서 재구매를 하지 않을 가능성이 높아지는걸 의미한다.

 

물론 위의 데이터가 아름답고 학교 자료나 제공해주는 데이터처럼 아름답지 못한 것 일 수도, 그리고 내가 전처리를 잘 못했을수도 있는데, 지금 목적은 코호트를 어떻게 이해하고 개념을 잡고 활용해보는 것이기 때문에 크게 신경쓰지 않겠다. 


3. Summary 

이론과 실습을 통해 코호트 분석의 기본 개념과 그 중요성, 그리고 실제 데이터에 어떻게 적용할 수 있는지를 간단하게나마 이해할 수 있었댜.

일단 나는 그렇다

다시 한번 정리하자면:

  • 코호트 분석의 핵심은 동일한 기간에 가입하거나 특정 행동을 한 사용자 그룹의 행동 변화를 시간에 따라 분석하는 것이다. 이를 통해 사용자 유지율, 이탈률, 마케팅 캠페인의 효과, 고객 생애 가치를 평가할 수 있다.
  • 실습을 통해 확인한 바와 같이, 데이터를 전처리하고 코호트 그룹을 정의한 후, 각 코호트의 월별 유지율을 계산하여 시각화하는 방법을 배웠다. 이 과정에서 데이터의 정확성을 다시 한번 점검하는 것이 중요하며, 오류가 발생할 경우 데이터의 전처리 단계에서 문제를 해결하는 것이 필수적이다.
  • 코호트 분석의 활용은 매우 다양하다. 고객 유지 전략을 개선하거나, 마케팅 캠페인의 효과를 측정하거나, 고객 생애 가치를 계산하는 데 있어 중요한 도구가 된다. 이를 통해 우리는 고객 행동을 더 깊이 이해하고, 데이터 기반의 의사결정을 할 수 있게 된다.

 

 


Outro.

마지막으로, 꾸준한 학습과 실습의 중요성을 느꼈다.

예전처럼 수식과 공식이 익숙했던 때와는 달리, 지금은 다시 한 번 기본부터 차근차근 쌓아가야 한다는 사실... 

머리가 굳어버려땨.. 

+ Recent posts