Análise de Cohort (Coorte): O que é e como aplicar em Python

CohortBanner
0

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

Clique aqui e acesse o artigo completo

@Author: Dai

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

Greg Reda – Cohort Analysis with Python

Quora – What is a cohort Anaysis?

Escolha a sua Reação!
Deixe um comentário