Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Structure a cohort analysis for retention, LTV, or behavioural patterns. Use when asked to run a cohort analysis, analyse retention by cohort, segment users by behaviour over time, or calculate lifetime value by acquisition period. Produces a complete cohort analysis framework with methodology, cohort definitions, retention curves, and prioritised interventions.
.claude/skills/mohitagw15856-cohort-analysis/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 34% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 95% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 115% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 88% | 0% |
Este skill produce un análisis de cohortes estructurado que cubre curvas de retención, estimación de LTV, segmentación por comportamiento e intervenciones accionables. El resultado está listo para presentar a la dirección de producto o compartir con equipos de crecimiento y datos.
Pide al usuario estos datos si no están disponibles:
Tipo de análisis: Retención / LTV / Comportamiento / Churn] Definición de cohorte: Mes de adquisición / Canal de signup / Tier de plan / Fecha de adopción de feature] Ventana de observación: X meses / semanas] Métrica principal: Nombre de la métrica] Fecha de preparación: Fecha]
| Cohorte | Período | Tamaño | Descripción | |---|---|---|---| | Cohorte 1] | Ene 2025] | N usuarios] | p. ej. Usuarios que se registraron en ene 2025 a través de orgánico] | | Cohorte 2] | Feb 2025] | N usuarios] | ...] |
Lógica de cohorte:
Cómo leer: Cada celda muestra qué % de la cohorte realizó la métrica clave en el período N.
| Cohorte | Período 0 | Período 1 | Período 2 | Período 3 | Período 6 | Período 12 | |---|---|---|---|---|---|---| | Ene 2025 | 100% | X%] | X%] | X%] | X%] | X%] | | Feb 2025 | 100% | X%] | X%] | X%] | X%] | X%] | | Tendencia] | — | ↑/↓ vs anterior] | ...] | ...] | ...] | ...] |
Meseta de retención: ¿En qué período se estabiliza la retención? ¿En qué % se estabiliza?]
Observaciones clave:
Curvas de retención, dibujadas — también renderiza las curvas como un gráfico de líneas Mermaid/chart para que la meseta y las brechas entre cohortes sean visibles (se renderiza en vivo en el playground y se exporta como PNG). Una línea por cohorte, período en el eje x:
chart{ "type": "line", "title": "Retención por cohorte (%)", "labels": ["P0", "P1", "P2", "P3", "P6", "P12"], "series": [ { "name": "Ene 2025", "data": [100, 62, 51, 45, 40, 37] }, { "name": "Feb 2025", "data": [100, 66, 55, 49, 44, 41] } ] }
ARPU por período: £/$/€ X por usuario activo por mes] Curva de retención utilizada: Qué cohorte o promedio combinado]
| Período | Retenido % | Ingresos por usuario | LTV acumulado | |---|---|---|---| | Mes 1 | X%] | £X] | £X] | | Mes 3 | X%] | £X] | £X] | | Mes 6 | X%] | £X] | £X] | | Mes 12 | X%] | £X] | £X] |
LTV combinado: £X a 12 meses — basado en retención combinada entre cohortes]
LTV por segmento: | Segmento | LTV (12M) | vs Baseline | |---|---|---| | Orgánico] | £X] | +X%] | | Paid] | £X] | -X%] | | Enterprise] | £X] | +X%] |
Agrupa cohortes por patrones de comportamiento, no solo por fecha de adquisición:
| Segmento | Definición | Tamaño | Retención (P6) | LTV (12M) | |---|---|---|---|---| | Power users | Usó feature central ≥ 3x/semana en primeros 30 días] | X%] | X%] | £X] | | Casual users | Usó 1–2x/semana en primeros 30 días] | X%] | X%] | £X] | | Dormant | Inició sesión pero no usó feature central] | X%] | X%] | £X] | | Never activated | Se registró pero nunca completó onboarding] | X%] | X%] | £X] |
Insight de activación: Qué acción — realizada en los primeros X días — predice mejor la retención? Este es el "momento aha" a optimizar.]
Lista las señales que aparecen antes de que los usuarios hagan churn, para que los equipos puedan intervenir:
| Señal | ¿Con cuánta anticipación aparece? | Correlación con churn | Intervención | |---|---|---|---| | Sin login durante 7 días] | 7 días antes del churn] | Fuerte] | Secuencia de email de re-engagement] | | Ticket de soporte con escalada] | 14 días antes del churn] | Moderada] | Outreach de CSM dentro de 48 horas] | | Uso de feature cayó >50% WoW] | 10 días antes del churn] | Fuerte] | Nudge in-app con tutorial de caso de uso] |
Compara la cohorte más antigua con la más reciente para evaluar si las mejoras de producto se reflejan en la retención:
| Métrica | Cohorte más antigua — p. ej. Ene 2024] | Cohorte más reciente — p. ej. Ene 2025] | Cambio | |---|---|---|---| | Retención Período 1 | X%] | X%] | ↑/↓ X pp] | | Retención Período 3 | X%] | X%] | ↑/↓ X pp] | | Tasa de activación | X%] | X%] | ↑/↓ X pp] | | Sesiones promedio en primeros 30 días | X] | X] | ↑/↓] |
Veredicto: ¿Las cohortes más recientes rinden mejor o peor? ¿Qué se lanzó en ese período que podría explicar el cambio?]
Prioriza por impacto en la curva de retención:
| # | Recomendación | Segmento objetivo | Impacto esperado | Esfuerzo | Prioridad | |---|---|---|---|---|---| | 1 | p. ej. Rediseñar onboarding para alcanzar hito de activación en día 1, no día 7] | Segmento never-activated] | +X pp retención P1] | Medio] | P1 | | 2 | p. ej. Lanzar secuencia de re-engagement en trigger de inactividad día 7] | Segmento dormant] | +X pp retención P2] | Bajo] | P1 | | 3 | p. ej. Introducir features de power-user más temprano para acelerar formación de hábito] | Casual users] | +X pp LTV P6] | Alto] | P2 |
Proporciona la query de cohorte principal para que equipos de datos puedan replicar o extender el análisis:
sql-- Query de cohorte de retención SELECT DATE_TRUNC('month', u.created_at) AS cohort_month, DATE_TRUNC('month', e.event_date) AS activity_month, DATEDIFF('month', u.created_at, e.event_date) AS period, COUNT(DISTINCT e.user_id) AS retained_users, COUNT(DISTINCT c.user_id) AS cohort_size, ROUND(COUNT(DISTINCT e.user_id) * 100.0 / COUNT(DISTINCT c.user_id), 1) AS retention_rate FROM users u JOIN events e ON u.user_id = e.user_id JOIN ( SELECT user_id, DATE_TRUNC('month', created_at) AS cohort_month FROM users WHERE created_at >= '[start_date]' ) c ON u.user_id = c.user_id AND DATE_TRUNC('month', u.created_at) = c.cohort_month WHERE e.event_type = '[key_retention_event]' GROUP BY 1, 2, 3 ORDER BY 1, 3;
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 28,097 | 21,675 | -23% | 1 | 1 | 0% | 5,767 | 7,738 | +34% | 0 | 0 | — |
case-01 | fail→pass | 27,518 | 22,957 | -17% | 1 | 1 | 0% | 6,134 | 8,389 | +37% | 0 | 0 | — |
case-03 | fail→fail | 23,855 | 26,830 | +12% | 1 | 1 | 0% | 4,865 | 8,619 | +77% | 0 | 0 | — |
case-04 | pass→fail | 22,035 | 22,269 | +1% | 1 | 1 | 0% | 3,841 | 7,634 | +99% | 0 | 0 | — |
case-05 | pass→pass | 12,379 | 13,412 | +8% | 1 | 1 | 0% | 2,549 | 5,979 | +135% | 0 | 0 | — |
case-06 | pass→pass | 13,762 | 16,513 | +20% | 1 | 1 | 0% | 3,140 | 6,909 | +120% | 0 | 0 | — |
case-07 | fail→pass | 20,454 | 22,539 | +10% | 1 | 1 | 0% | 4,062 | 7,931 | +95% | 0 | 0 | — |
case-08 | fail→pass | 17,588 | 19,228 | +9% | 1 | 1 | 0% | 3,315 | 7,127 | +115% | 0 | 0 | — |
case-09 | fail→pass | 20,292 | 20,532 | +1% | 1 | 1 | 0% | 4,115 | 7,731 | +88% | 0 | 0 | — |
case-10 | fail→pass | 16,122 | 15,661 | -3% | 1 | 1 | 0% | 2,799 | 6,097 | +118% | 0 | 0 | — |
case-11 | fail→pass | 13,359 | 22,344 | +67% | 1 | 1 | 0% | 2,467 | 7,334 | +197% | 0 | 0 | — |
case-12 | fail→fail | 13,788 | 21,251 | +54% | 1 | 1 | 0% | 2,311 | 7,184 | +211% | 0 | 0 | — |
case-13 | fail→pass | 15,236 | 16,542 | +9% | 1 | 1 | 0% | 2,937 | 6,595 | +125% | 0 | 0 | — |
case-14 | fail→pass | 12,126 | 17,996 | +48% | 1 | 1 | 0% | 2,372 | 6,865 | +189% | 0 | 0 | — |
case-15 | fail→pass | 16,381 | 21,072 | +29% | 1 | 1 | 0% | 3,333 | 7,478 | +124% | 0 | 0 | — |
case-16 | fail→pass | 15,527 | 20,044 | +29% | 1 | 1 | 0% | 2,939 | 7,213 | +145% | 0 | 0 | — |
case-17 | fail→fail | 12,493 | 24,065 | +93% | 1 | 1 | 0% | 2,140 | 8,051 | +276% | 0 | 0 | — |
case-18 | fail→pass | 16,007 | 19,275 | +20% | 1 | 1 | 0% | 3,055 | 7,243 | +137% | 0 | 0 | — |
case-19 | fail→pass | 16,870 | 21,119 | +25% | 1 | 1 | 0% | 2,977 | 7,070 | +137% | 0 | 0 | — |
case-20 | fail→pass | 11,378 | 18,682 | +64% | 1 | 1 | 0% | 2,032 | 6,982 | +244% | 0 | 0 | — |
case-21 | fail→fail | 18,464 | 27,511 | +49% | 1 | 1 | 0% | 3,268 | 7,959 | +144% | 0 | 0 | — |
case-22 | fail→pass | 20,316 | 23,627 | +16% | 1 | 1 | 0% | 3,612 | 7,669 | +112% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +64 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.