Tabla de retención por cohortes
Construya una matriz de retención por cohortes que muestre el porcentaje de usuarios de la semana 0 que siguen activos en semanas posteriores mediante pivot_table.
Tabla de retención por cohortes es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué es una tabla de retención por cohortes?
Una tabla de retención por cohortes agrupa a los usuarios según la semana (o el mes) en que utilizaron el producto por primera vez y, después, registra qué porcentaje de cada cohorte sigue activo en las semanas posteriores. La fila 0 siempre muestra 100 % porque la semana 0 se define como la semana de registro. Los valores de las columnas posteriores muestran la rapidez con la que el producto pierde usuarios: cuanto más lenta sea la disminución, mayor será la retención.
import pandas as pd
df = pd.read_csv('user_events.csv', parse_dates=['event_date'])
print(df.dtypes)
print(df.head())Asignación de una semana de cohorte a cada usuario
La semana de cohorte es la semana del primer evento de cada usuario. Utilice groupby('user_id')['event_date'].min() para encontrar la fecha del primer evento de cada usuario y, después, conviértala en una semana ISO con .dt.to_period('W'). Combine esta etiqueta de cohorte con el DataFrame principal de eventos para que cada fila sepa a qué semana de cohorte pertenece su usuario.
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())Cálculo del número de semana desde la cohorte
El número de semana (también llamado número de período o antigüedad) es la diferencia entre la semana del evento y la semana de cohorte. La resta de Periods de Pandas devuelve un desplazamiento entero. La semana 0 significa que el usuario estuvo activo durante su semana de registro; la semana 4 significa que regresó cuatro semanas después. Esta columna de desplazamiento se convierte en el eje de columnas de la matriz de retención.
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))Recuento de usuarios activos por par cohorte-semana
Agrupe por cohort_week y week_number, y cuente los usuarios únicos para obtener la matriz de recuentos de retención sin procesar. Cada celda indica cuántos usuarios de la cohorte C estuvieron activos en la semana N. La diagonal de la esquina superior izquierda a la inferior derecha (semana 0 de cada cohorte) proporciona el tamaño de las cohortes, que constituye el denominador para calcular los porcentajes.
retention_counts = (
df.groupby(['cohort_week', 'week_number'])['user_id']
.nunique()
.reset_index(name='active_users')
)
print(retention_counts.head(10))Conversión a una matriz de retención
Utilice pivot_table() para convertir los recuentos de retención en formato largo en una matriz ancha: las filas son las semanas de cohorte y las columnas son los números de semana. aggfunc='sum' gestiona cualquier clave de agrupación duplicada. Rellene con 0 las celdas correspondientes a semanas en las que ningún usuario de esa cohorte estuvo activo. Esta matriz es el núcleo del análisis de retención.
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])Cálculo de los porcentajes de retención
Divida cada fila por su valor de la semana 0 para convertir los recuentos en porcentajes. La columna de la semana 0 es el tamaño de la cohorte, almacenado en retention_matrix[0]. Utilice divide(cohort_sizes, axis=0) y multiplique por 100. Redondee a un decimal para facilitar la lectura. El resultado es el mapa de calor de retención estándar que se espera en los informes de analítica de producto.
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])Interpretación de la curva de retención
Lea la tabla de retención en diagonal: cada fila disminuye con el tiempo. Un producto con una retención sólida mostrará valores como 100, 60, 50, 45, 42: una caída inicial rápida seguida de una meseta estable. Un producto con una retención deficiente mostrará 100, 30, 15, 8, 4: una disminución continua sin meseta. El nivel de la meseta (si existe) se denomina tasa de retención a largo plazo y es el KPI de retención más importante.
# 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))Identificación de las mejores y peores cohortes
Compare el rendimiento de las cohortes observando la retención en la semana 4 o en la semana 8 entre las distintas cohortes. La cohorte con la mayor retención en la semana 4 se benefició de una mejora del producto o de un canal de adquisición eficaz; la peor cohorte podría haberse adquirido mediante un canal de baja calidad. Utilice .loc[:, 4].sort_values(ascending=False) para ordenar las cohortes según su retención en la semana 4.
if 4 in retention_pct.columns:
week4 = retention_pct[4].sort_values(ascending=False)
print('Cohorts ranked by week-4 retention:')
print(week4)Visualización de la retención como mapa de calor
Un mapa de calor con colores es la visualización estándar de las tablas de retención. Utilice sns.heatmap() con annot=True para mostrar el porcentaje dentro de cada celda y un mapa de colores divergente (retención baja = rojo, alta = verde). Establezca vmin=0 y vmax=100 para que los colores sean comparables entre distintas escalas de retención.
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()Representación de la curva de retención
Un gráfico de líneas de la retención media por semana comunica la curva de disminución general con mayor claridad que un mapa de calor al presentarla a partes interesadas no técnicas. Represente la curva de retención media con una banda sombreada que muestre más o menos una desviación estándar, para indicar cuánta variación existe entre las cohortes. La meseta, donde la línea se aplana, es el nivel mínimo natural de retención del producto.
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()Exportación de la tabla de retención
Exporte la tabla de retención a Excel para que los responsables de producto puedan compartirla en las revisiones semanales. Utilice to_excel() y aplique manualmente el formato condicional en Excel, o use Styler.background_gradient() en Pandas para añadir los colores directamente al archivo exportado. La tabla de retención es uno de los resultados más solicitados en la analítica de producto.
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')Comprobación rápida
Compruebe su comprensión de los conceptos de Análisis de datos de esta lección.
Resumen de la lección
En esta lección aprendió a: asignar usuarios a semanas de cohorte y calcular desplazamientos semanales, convertir los datos en una matriz de retención y transformar los recuentos en porcentajes y visualizar la retención por cohortes como un mapa de calor y una curva de retención media. A continuación, exploraremos la visualización de los recorridos de los usuarios mediante gráficos de barras de embudo y mapas de calor.
Aprende Python con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Tabla de retención por cohortes» es gratis?
Sí — el texto completo de «Tabla de retención por cohortes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Tabla de retención por cohortes»?
Construya una matriz de retención por cohortes que muestre el porcentaje de usuarios de la semana 0 que siguen activos en semanas posteriores mediante pivot_table. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Pandas & NumPy Academy?
No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Tabla de retención por cohortes»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?
Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Creación de sesiones y secuenciación de eventos
- Análisis de embudo
- Tabla de retención por cohortes
- Visualizar los recorridos de los usuarios