코호트 유지율 표
pivot_table을 사용해 0주차 사용자가 이후 주차에도 계속 활동하는 비율을 보여 주는 코호트 유지율 행렬을 만듭니다.
코호트 유지율 표은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
코호트 유지율 표란 무엇인가요?
코호트 유지율 표는 사용자가 제품을 처음 사용한 주(또는 월)별로 사용자를 그룹화한 다음, 이후 각 주에도 해당 코호트의 몇 퍼센트가 계속 활성 상태인지 추적합니다. 0주차는 가입한 주를 의미하므로 항상 100%로 표시됩니다. 이후 열의 값은 제품이 사용자를 얼마나 빠르게 잃는지 보여 줍니다. 감소 속도가 느릴수록 유지율이 높은 것입니다.
import pandas as pd
df = pd.read_csv('user_events.csv', parse_dates=['event_date'])
print(df.dtypes)
print(df.head())각 사용자에게 코호트 주 할당하기
코호트 주는 각 사용자의 첫 이벤트가 발생한 주입니다. groupby('user_id')['event_date'].min()을 사용해 사용자별 첫 이벤트 날짜를 찾은 다음, .dt.to_period('W')로 ISO 주로 변환합니다. 이 코호트 라벨을 기본 이벤트 DataFrame에 다시 병합하면 모든 행에서 해당 사용자가 속한 코호트 주를 확인할 수 있습니다.
cohort_week = df.groupby('user_id')['event_date'].min().dt.to_period('W').rename('cohort_week')
df = df.join(cohort_week, on='user_id')
df['event_week'] = df['event_date'].dt.to_period('W')
print(df[['user_id', 'event_date', 'cohort_week', 'event_week']].head())코호트 이후 경과한 주 번호 계산하기
주 번호(기간 번호 또는 경과 기간이라고도 함)는 이벤트 주와 코호트 주의 차이입니다. Pandas의 Period 뺄셈은 정수 오프셋을 반환합니다. 0주는 사용자가 가입한 주에 활성 상태였음을 의미하고, 4주는 4주 후에 다시 방문했음을 의미합니다. 이 오프셋 열은 유지율 행렬의 열 축이 됩니다.
df['week_number'] = (df['event_week'] - df['cohort_week']).apply(lambda x: x.n)
print(df[['user_id', 'cohort_week', 'event_week', 'week_number']].head(10))코호트-주 조합별 활성 사용자 수 집계하기
cohort_week과 week_number를 모두 기준으로 그룹화하고 고유 사용자를 세어 원시 유지율 집계 행렬을 만듭니다. 각 셀은 코호트 C에 속한 사용자 중 N주차에 활성 상태였던 사용자가 몇 명인지 보여 줍니다. 왼쪽 위에서 오른쪽 아래로 이어지는 대각선(각 코호트의 0주차)은 코호트 규모를 나타내며, 백분율을 계산할 때 분모로 사용됩니다.
retention_counts = (
df.groupby(['cohort_week', 'week_number'])['user_id']
.nunique()
.reset_index(name='active_users')
)
print(retention_counts.head(10))유지율 행렬로 피벗하기
pivot_table()을 사용해 긴 형식의 유지율 집계를 넓은 행렬로 변환합니다. 행은 코호트 주이고 열은 주 번호입니다. aggfunc='sum'은 중복된 groupby 키를 처리합니다. 해당 코호트의 사용자가 활동하지 않은 주의 셀은 0으로 채웁니다. 이 행렬은 유지율 분석의 핵심입니다.
retention_matrix = retention_counts.pivot_table(
index='cohort_week',
columns='week_number',
values='active_users',
aggfunc='sum'
).fillna(0)
print(retention_matrix.iloc[:5, :8])유지율 백분율 계산하기
각 행을 해당 행의 0주차 값으로 나누어 집계값을 백분율로 변환합니다. 0주차 열은 코호트 규모이며 retention_matrix[0]에 저장됩니다. divide(cohort_sizes, axis=0)을 사용한 다음 100을 곱합니다. 읽기 쉽도록 소수 첫째 자리까지 반올림합니다. 결과는 제품 분석 보고서에서 사용하는 표준 유지율 히트맵입니다.
cohort_sizes = retention_matrix[0]
retention_pct = retention_matrix.divide(cohort_sizes, axis=0) * 100
retention_pct = retention_pct.round(1)
print(retention_pct.iloc[:5, :8])유지율 곡선 해석하기
유지율 표를 대각선 방향으로 읽으면 각 행이 시간에 따라 감소하는 모습을 확인할 수 있습니다. 유지율이 높은 제품은 100, 60, 50, 45, 42와 같은 값을 보입니다. 초기에 빠르게 감소한 뒤 안정적인 정체 구간에 도달하는 형태입니다. 유지율이 낮은 제품은 100, 30, 15, 8, 4처럼 정체 구간 없이 계속 감소합니다. 정체 구간의 수준(있는 경우)을 장기 유지율이라고 하며, 가장 중요한 유지율 KPI입니다.
# Average retention rate per week number across all cohorts
avg_retention = retention_pct.mean(axis=0)
print('Average retention by week:')
print(avg_retention.round(1))최고 및 최저 코호트 식별하기
코호트별 4주차 또는 8주차 유지율을 비교해 코호트 성과를 확인합니다. 4주차 유지율이 가장 높은 코호트는 제품 개선이나 효과적인 사용자 확보 채널의 혜택을 받았을 수 있습니다. 가장 낮은 코호트는 품질이 낮은 채널을 통해 확보되었을 가능성이 있습니다. .loc[:, 4].sort_values(ascending=False)를 사용해 4주차 유지율을 기준으로 코호트 순위를 매깁니다.
if 4 in retention_pct.columns:
week4 = retention_pct[4].sort_values(ascending=False)
print('Cohorts ranked by week-4 retention:')
print(week4)히트맵으로 유지율 시각화하기
색상으로 구분한 히트맵은 유지율 표를 시각화하는 대표적인 방법입니다. annot=True와 함께 sns.heatmap()을 사용해 각 셀 안에 백분율 값을 표시하고, 낮은 유지율은 빨간색, 높은 유지율은 초록색으로 나타내는 발산형 색상 맵을 사용합니다. 서로 다른 유지율 범위에서도 색상을 비교할 수 있도록 vmin=0과 vmax=100을 설정합니다.
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(14, 6))
sns.heatmap(retention_pct.iloc[:, :13],
annot=True, fmt='.0f',
cmap='RdYlGn', vmin=0, vmax=100,
ax=ax, linewidths=0.5)
ax.set_title('Weekly Cohort Retention (%)')
ax.set_xlabel('Week Number')
ax.set_ylabel('Cohort Week')
plt.tight_layout()
plt.show()유지율 곡선 그리기
주별 평균 유지율 선 차트는 비기술 이해관계자에게 전체 감소 곡선을 보여 줄 때 히트맵보다 더 명확합니다. 평균 유지율 곡선을 그리고, 코호트 간 변동 정도를 나타내도록 표준편차 ±1 범위를 음영 밴드로 표시합니다. 선이 평평해지는 정체 구간은 제품의 자연스러운 유지율 하한선입니다.
avg_ret = retention_pct.mean(axis=0)
std_ret = retention_pct.std(axis=0)
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(avg_ret.index, avg_ret.values, color='steelblue', linewidth=2, marker='o')
ax.fill_between(avg_ret.index, avg_ret - std_ret, avg_ret + std_ret, alpha=0.2)
ax.set_xlabel('Week Number')
ax.set_ylabel('Retention %')
ax.set_title('Average Cohort Retention Curve')
plt.tight_layout()
plt.show()유지율 표 내보내기
제품 관리자가 주간 검토에서 공유할 수 있도록 유지율 표를 Excel로 내보냅니다. to_excel()을 사용한 다음 Excel에서 조건부 서식을 수동으로 적용하거나, Pandas의 Styler.background_gradient()를 사용해 내보낸 파일에 색상을 직접 추가합니다. 유지율 표는 제품 분석에서 가장 많이 요청되는 결과물 중 하나입니다.
styled = retention_pct.style.background_gradient(cmap='RdYlGn', vmin=0, vmax=100)
styled.to_excel('retention_table.xlsx', engine='openpyxl')
print('Retention table saved to retention_table.xlsx')빠른 확인
이 레슨에서 배운 데이터 분석 개념을 제대로 이해했는지 확인해 보세요.
레슨 요약
이 레슨에서는 사용자를 코호트 주에 할당하고 주 오프셋을 계산하는 방법, 유지율 행렬로 피벗하고 집계값을 백분율로 변환하는 방법, 코호트 유지율을 히트맵과 평균 유지율 곡선으로 시각화하는 방법을 배웠습니다. 다음으로 퍼널 막대 차트와 히트맵을 사용해 사용자 여정을 시각화하는 방법을 살펴보겠습니다.
AI 튜터와 함께 Python을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“코호트 유지율 표” 강의는 무료인가요?
네 — “코호트 유지율 표” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“코호트 유지율 표”에서 뭘 배우나요?
pivot_table을 사용해 0주차 사용자가 이후 주차에도 계속 활동하는 비율을 보여 주는 코호트 유지율 행렬을 만듭니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“코호트 유지율 표” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 세션화와 이벤트 순서 지정
- 퍼널 분석
- 코호트 유지율 표
- 사용자 여정 시각화