Retencion de clientes: Analisis por cohortes

En la estrategia comercial de cualquier emprendimiento uno de los KPI´s que se vuelve imprescindible monitorear es cuántos clientes nos siguen comprando en un período de tiempo dado o cuantos clientes nos han abandonado. En este post voy a mostrar como calcular este indicador mediante el análisis de cohortes.

Hernan Hernandez https://example.com/norajones
2022-09-05

Introducción 🚀

Bienvenidos y bienvenidas a un nuevo post sobre un KPI (Key Performance Indicator) muy importante al momento de analizar la estrategia comercial de cualquier empresa o negocio y que responde a una cuestión central: ¿que proporción de los clientes que nos compraron en algún momento lo siguen haciendo en determinado período? y en este misma línea: ¿que proporción dejó de hacerlo?.

De lo anterior se desprenden tres conceptos importantes:

Para este ejemplo utilizaremos el mismo dataset que trabajamos en el artículo de Análisis RFM , el cual lo habíamos obtenido de Kaggle. Recordemos que se trataba de las ventas e-commerce de una tienda minorista con sede en el Reino Unido y operaciones en varios países.

Show code
##Cargo el dataset y las funciones

df <- read.csv("data/data.csv")

#Cargo las librerias

library(dplyr)
library(lubridate)
library(tidyr)
library(ggplot2)
library(plotly)

Veamos 🧐 las variables del dataset 1:

Show code
glimpse(df)
## Rows: 541,909
## Columns: 8
## $ InvoiceNo   <chr> "536365", "536365", "536365", "536365"~
## $ StockCode   <chr> "85123A", "71053", "84406B", "84029G",~
## $ Description <chr> "WHITE HANGING HEART T-LIGHT HOLDER", ~
## $ Quantity    <int> 6, 6, 8, 6, 6, 2, 6, 6, 6, 32, 6, 6, 8~
## $ InvoiceDate <chr> "12/1/2010 8:26", "12/1/2010 8:26", "1~
## $ UnitPrice   <dbl> 2.55, 3.39, 2.75, 3.39, 3.39, 7.65, 4.~
## $ CustomerID  <int> 17850, 17850, 17850, 17850, 17850, 178~
## $ Country     <chr> "United Kingdom", "United Kingdom", "U~

De todas las variables de dataset, utilizaremos para nuestro análisis la fecha de factura (InvoiceData), la identificación del usuario (CustomerID) y el país (Country).

Comenzamos el procesamiento 🎬

En esta etapa realizaremos dos transformaciones centrales en el análisis de la retención por cohortes:

Algunas observaciones 📣

Podemos explorar a nivel de países 🗺️

Como habíamos dicho el dataset tiene los datos de ventas en UK y en varios países asi que podemos explorar este aspecto.

Para eso seleccionaremos los principales 3 países según la cantidad de clientes, que son: Reino Unido, Francia y Alemania.

Manos a la obra ❗

Show code
paises <- c("United Kingdom","France","Germany")

rate.retention.country <- list()

for(pais in paises){
 
rate.retention.country[[pais]]<-
  df %>%
  filter(Country== pais)%>%
  group_by(cohorte,mes)%>%
  summarise(n = n_distinct(CustomerID))%>%
  mutate(rate= round(n*100/n[mes==0],1),
         cohorte= format(lubridate::my(cohorte),"%b-%Y")) %>%
  arrange(cohorte) %>%
  as.data.frame() %>%
  ggplot(aes(x= mes, y= reorder(cohorte,mes), fill= rate))+
  geom_tile()+
  geom_text(aes(label = rate), color = "white", size = 3) +
  scale_fill_gradient2(low = "#E0F3DB",mid="#A8DDB5",high = "#43A2CA") +
  scale_x_continuous(breaks = seq(0,12))+
  labs(y= "Cohorte", x= "Mes", fill= "Tasa")+
  coord_fixed()
  
  
}
Show code
xaringanExtra::use_panelset()
Show code
for(i in 1:length(rate.retention.country)){
  cat("::: {.panel}\n")             
  cat("##",paises[i], "{.panel-name}\n")
  print(rate.retention.country[[i]])
  cat("\n") 
  cat(":::\n")
}

United Kingdom

France

Germany

Cómo puede verse en los gráficos, a nivel país se obtienen tasas de retención que resultan inestables por lo que los datos deben ser tomados con cautela. Lo que si resulta claro es que el comportamiento de la tasa de retención en general responde casi exclusivamente al comportamiento de los clientes de UK.

Comentarios finales 😏

👀 El análisis de la tasa de retención mediante cohortes representan un aliado a la hora de evaluar la estrategia comercial a la luz del comportamiento de nuestros clientes y cómo estos responden a las diferentes acciones como las campañas, las promociones, el lanzamiento de nuevos productos, etc.

⚓También este tipo de análisis podemos profundizarlos con otros para estimar el Customer Lifetime Value (CLV) y conocer cuanto puede ganar la empresa del cliente promedio en el transcurso de la relación, pero eso será parte de otro post 💪🏼.


  1. Puede encontrar una exploración completa del dataset en el Análisis RFM en el siguiente link.↩︎