O que é Análise de Cohort (coorte) e como aplicá-la em Python

Este é o segundo post da série de artigos referente ao livro Lean Analytics.
Você pode conferir o primeiro post aqui: https://spacedata.com.br/indicadores-de-desempenho/
Se você quiser conferir o livro no site da Amazon, só clicar aqui: Lean Analytics: Use Data to Build a Better Startup Faster
O que é Análise de Cohort ou Coorte?
O conceito não é nada complicado: é a análise onde se compara grupos com características semelhantes e os monitora durante um período específico.
Pode ser idade, data da compra, região, data de cadastro, etc. Geralmente, é considerado o primeiro “contato” deste cliente, como primeira compra, primeiro uso (imagine um serviço de carro por aplicativo ou de comida delivery) e então, você monitora:
- Desde a primeira compra, este grupo de clientes voltou a comprar?
- Desde o primeiro pedido de comida delivery, este grupo de clientes voltou a pedir?
- O grupo de clientes que tiveram sua primeira corrida no mês 08/2020 utilizou novamente o serviço nos meses subsequentes? E os que fizeram a primeira corrida em 09/2020, 10/2020, etc?
Outro exemplo é a taxa de engajamento:
- Seus usuários estão utilizando sua plataforma todos os dias?
- Qual o percentual de usuários que voltam no dia seguinte ao cadastro? E na semana seguinte? E no mês seguinte?
A análise de Cohort ou também conhecida como Coorte é muito importante para medir o quanto seus clientes/usuários/consumidores são leais a sua marca e a sua empresa. Ao invés de olha-los todos da mesma forma, você os separa conforme suas características.
Para ficar mais claro, vamos a um exemplo mais visual.
Vamos imaginar que estamos medindo o engajamento dos usuários em uma página, perfil, canal, etc. No gráfico de linha abaixo, fica claro para nós que, mesmo com algumas “subidas e descidas”, o nosso engajamento está aumentando ao longo do tempo, mas…

- Quantos usuários são novos?
- Quantos usuários engajados no mês 12/2011 são usuários cadastrados no início do mês?
- Quantos estão engajados há 2 meses? e há 3 meses? 6 meses?
Olhando somente para este gráfico, fica bastante difícil (para não dizer impossível) responder a estas perguntas.
Agora, veja como fica muito mais simples se tivermos uma análise de Cohort:

Com esta segmentação, o entendimento do que está acontecendo fica muito mais fácil.
No eixo X, temos a quantidade de períodos analisados. No eixo Y, os meses e os percentuais de engajamento ao longo dos períodos (se você ainda está confuso(a), calma, ficará mais claro ao longo deste artigo).
Tomando como exemplo o mês 01/2011 (o primeiro do nosso gráfico), de 100% de usuários que engajaram no primeiro período, apenas 37% continuaram engajados no segundo período.
Neste contexto, um número interessante é o mês 10/2011. Por que somente 7% se manteve engajado?
Com este exemplo, acredito (e espero) que tenha conseguido deixar bem claro como a análise de Cohort é útil.
E como fazer a análise de Cohort ou Coorte em Python?
Não é difícil, mas pode um pouco chato de entender a lógica. Então, vamos fazer com dois dataset’s bem simples, passo-a-passo e depois aplicamos os métodos em um dataset do Kaggle.

Conheça mais sobre métricas de negócios. Leia o artigo Métricas e indicadores de desempenho
Análise de Cohort - Dataset I
Agora, vamos usar a função em nosso Anscombe’s dataset, armazenar cada um dos resultados e compará-los:
Para ficar bem claro cada uma das etapas até chegar no heatmap final, vamos utilizar dados bem simples.
Nele, há somente três colunas:
- ID do cliente
- Data da compra
- Quantidade comprada
Vamos importar o dataset e para ficar mais fácil a manipulação dos dados, vamos renomear as colunas:

Para os próximos passos, vamos precisar que a coluna “Data da compra” esteja no formato correto, no caso, datatetime.
Esta nova coluna será nomeada com “mes_ano”. Veja que ela deriva da coluna “data_compra”:

A nossa análise Cohort será feita por mês, então, com a função lambda, vamos extrair o mês e ano da coluna “data_compra”:

Agora, para cada cliente, vamos buscar a data da sua primeira compra. Esta informação ficará na coluna nomeada “cohort”.
Para ficar mais claro: O cliente de ID 01 fez compras em 08/2014, 09/2014 e 12/2014. Para este cliente, a data na coluna cohort será a menor, no caso, 08/2014 (será repetida em todas as linhas do cliente ID 01).
Para facilitar a visualização, ordenei os dados por ID:

Agora, fica um pouco chato para entender a lógica ( ), mas é fácil, juro.
Lembra que a coluna “cohort” contém a menor data de cada cliente, certo? No caso, a data da primeira compra de cada cliente.
A coluna “mes_ano” contém os mês e ano que os clientes fizeram compra (independente se foi a primeira, segunda, terceira, etc., compra).
A coluna “total_usuarios” irá armazenar a quantidade de clientes.
Considere o primeiro grupo, de 2014-02: Há dois clientes que realizaram a primeira compra em 02/2014 (coluna cohort) e destes 2 clientes, 1 comprou também em 08/2014.

Vamos criar uma função que irá contar a quantidade de períodos em cada grupo “cohort”.
Olhe a coluna cohort 2014-02. Temos 2 compras em em fev/2014 + 1 compra em 08/2014. A primeira data será 01. E a segunda (08/2014) será número 02.
Outro exemplo seria a cohort 05-2014. A linha número 01 será ela mesma, ou seja, 05-2014. A linha 02 será a segunda compra e a linha 03, a terceira compra.
Este dataset é bem pequeno, mas em dados maiores, este contador será também maior. Se sua análise for por 12 meses, por exemplo, pode haver 12 contadores para cada grupo.

Agora, vamos agrupar o total de usuários pela coluna “cohort:

Com a função “unstack”, vamos “pivotar” (este verbo existe? ) nosso DataFrame.
Note que os meses viraram colunas e a coluna “cohort_period” se transformaram em índices:

Por fim (e o mais esperado ), vamos plotar o heatmap – e interpretá-lo.
Veja que os índices estão, agora, no nosso eixo X. O primeiro período,no caso, o 1 será 100% pois estamos considerando o total de clientes que fizeram sua primeira compra no mês em questão, ou seja, o mês que se encontra no eixo Y.
Ao longo dos demais períodos, notamos queda:

Se você não entendeu 100% nossa lógica, vamos visualizar novamente aquela etapa que agrupamos pelas datas (se não lembra de quando fizemos isso, volte três prints ).
Veja que tivemos duas vendas ocorridas pela primeira vez em 02-2014 e uma delas (50%) comprou também em 08-2014.
Agora compare com o Heatmap que fizemos. É exatamente isso que nos mostra.
O mesmo acontece com o mês 05-2014. Foram quatro vendas feitas, cuja primeira data foi no mês de maio/14 ( 2+ 1 + 1 na coluna “total_usuarios”), sendo que houve recorrência de 1 em 07-2014 e outra em 10-2014 (50% e 50%).

Análise de Cohort - Dataset II
Caso ainda não tenha ficado tão claro, vamos fazer novamente esta segmentação com o dataset um pouco maior.
Não vou copiar cada um dos snippets aqui porque os métodos são os mesmos, mudei apenas o dataset.
Se você quiser conferir o notebook inteiro, dê uma olhada no Github:
Cohort Analysis
Clique aqui para acessar o notebook no GitHub
Veja que é bem parecido com o dataset anterior, a diferença é que este contém um pouco mais de dados, mais especificamente, mais linhas.
Sugiro comparar os dados e o Heatmap. O entendimento ficará muito mais claro

O Cohort ou Coorte destes dados, resulta nesse gráfico aqui abaixo
Veja que temos 6 vendas em 05/2014 dos clientes com ID 04 e 05. Este é um cohort.
Olhando somente este grupo, houve, portanto, compras em 05/2014, 07/2014, 10/2014 e 11/2014.
Com isso em mente, olhe nosso Heatmap. No mês 05/2014, temos
- 100% no período 01.
- 50% no período 02 = Compra da linha 07.
- 50% no período 03 = Compra da linha 10 e 11 (note que estamos falando do mesmo cliente, logo, temos 50%)
- 50% no período 4 = Compra na linha 12.

Análise de Cohort - Dataset III
Com o passo a passo feito em dois dataset’s, vamos utilizar outros dados: Vendas de uma loja de varejo.
Este dataset está disponível no Kaggle: Super Store Data
Os métodos utilizados são exatamente os que fizemos acima, então, não, irei repeti-los aqui.
Lembrando novamente que o notebook, na íntegra, está disponível no GitHUb: GitHub – Cohort Analysis
Vamos considerar, nesta análise, somente a data de compra e o ID do cliente:

O resultado será o seguinte Heatmap:

E o que podemos tirar desta visualização?
Como falamos ao longo deste artigo, temos a abertura por mês de cada um dos grupos, ou de cada cohort, e com isso, imaginando que esta fosse uma situação real em nossas empresas:
- Vemos que o percentual, na maioria dos meses, cai entre 75% – 80% do primeiro mês ao segundo, com exceção do grupo de 10/2011. O que ocorreu para que o percentual ficasse tão abaixo dos demais grupos?
- Esta mesma situação ocorre em 08/2011, quando a terceira interação (pode ser venda, engajamento, uso do seu APP / serviço, etc.). Vemos que caiu praticamente metade em relação aos demais meses.
- Ainda há números não tão discrepantes, mas ainda assim para ficarmos atentos: Começamos o ano com uma taxa de 41% de interação. Vemos que esta taxa foi caindo ao longo dos meses.
Vemos que caso os números estivessem agrupados, seria impossível termos este tipo de visão.
A análise de Cohort nos permite visualizar padrões durante o ciclo de vida de nossos clientes. Lembrando que esta visualização pode ser feita para receita, churn, custos e muitas outras métricas do seu negócio.
Espero que possa te ajudar em suas análises.
Qualquer comentário, pode deixar aqui abaixo
Referências
Entender esta análise, além da sua aplicação em Python, levou alguns dias estudando
Vou deixar alguns links que me ajudaram muito no entendimento deste conceito (em inglês):
Youtube
Retention and Cohort Analysis with Bei Lu (Youtube)
Cohort Analysis: An introduction Whiteboard Wednesday
Artigos
You must be logged in to post a comment.