Projeto em Python sobre Análise de Cancelamento de Clientes

 Oi Pessoal!

Mais uma vez estamos aqui e vamos fazer a análise numa base de dados, para verificar as informações dos clientes e verificar o percentual de cancelamento desses clientes.

Como é um projeto de análise, o objetivo vai ser fazer análises para ver onde temos os maiores cancelamentos e os motivos. Com isso vamos poder propor uma solução para diminuir essa quantidade de cancelamentos.

Isso é basicamente o que uma empresa vai fazer em um projeto, por isso é muito importante a análise de dados, pois você vai conseguir informações importantes e vai verificar possíveis soluções para os problemas que tem.

Você vai notar que esse tipo de análise te dar um entendimento muito maior dos dados que tem, então "achar" que algo  acontece por um motivo não é a melhor solução.

É importante fazer de fato uma análise de dados para que você possa tirar suas próprias conclusões utilizando os números. Principalmente dentro de uma empresa é muito importante essa análise.

Nesse exemplo você vai ver que começamos com um percentual x de cancelamentos, mas ao longo da análise e tratamento dos dados, vai notar que vamos conseguir reduzir drasticamente esse número só com essas análises.

Então é uma solução que a empresa pode seguir para diminuir a quantidade de cancelamentos que está lendo. Lembre-se de que a base de dados já foi fornecida, basta realizar o desenvolvimento desta solução para entender como tudo está funcionando!

Vamos passar por várias etapas utilizando a linguagem Python para chegar ao nosso resultado.

Mas antes de começar, é importante informar com quais ferramentas iremos trabalhar.

  • VSCode (Visual Studio Code) - Popular editor de código-fonte desenvolvido pela Microsoft. É conhecido por sua natureza leve, extensibilidade e suporte para diversas linguagens de programação e fluxos de trabalho de desenvolvimento.
  • Notebook Jupyter (Extensão do VSCode) - Permite criar e compartilhar documentos que contêm código ativo, equações, visualizações e texto narrativo. Esses documentos, chamados de notebooks, podem ser usados ​​para limpeza e transformação de dados, simulação numérica, modelagem estatística, visualização de dados, aprendizado de máquina e muito mais.
  • Biblioteca Pandas - Ferramenta poderosa e popular para análise de dados em Python. Ela fornece estruturas de dados e funções para manipulação e análise eficientes de conjuntos de dados tabulares e séries temporais.
  • Biblioteca Plotly - Ferramenta poderosa para criação de visualizações interativas em Python. Ela permite a criação de uma ampla variedade de gráficos e visualizações de dados, incluindo gráficos de dispersão, linhas, barras, histogramas, box plots, mapas, gráficos 3D e muito mais. 
Além das ferramentas que serão utilizadas, é interessante que você compreenda a base de dados que vai ser usada no projeto. O arquivo está no formato CSV. Essa é uma base de dados de cancelamento de clientes em uma empresa fictícia. Mas lembre-se de que isso se reflete ao que encontramos no mundo real. Então é bem possível que se depare com conjunto de dados similares a esse. Aqui estão as informações de cada coluna encontrada no conjunto de dados.


O objetivo é tratar essa base de dados, para que possamos analisar de forma eficiente  e fazer algumas análises úteis para a empresa. Sendo uma delas, verificar o motivo dos cancelamentos e tentar diminuir esse impacto. Você vai notar que um dos principais motivos de cancelamento são as pessoas que possuem contratos mensais. Só que essa não é a única análise que pode ser feita na base de dados. Como temos muitas informações, podemos fazer diversas outras análises também!

Vamos para prática!

Vamos iniciar o desenvolvimento desse projeto, importando a biblioteca Pandas e carregando nossa base dados.


Perceba que utilizamos a instrução "display(tabela)" para visualizar os dados. Atribuímos a essa tabela, uma variável chamada de tabela e utilizamos a instrução "tabela = tabela.drop("CustomerID", axis=1)" para remover a coluna customerID da nossa base de dados, pois essa informação não é útil e não adiciona em nada nossa análise. É apenas o número do cliente, por esse motivo podemos remover essas informações logo no inicio. 
Antes de começar com as análises é essencial que você faça o tratamento de dados, assim evita trazer erro por conta de dados desnecessários ou até inexistentes.


Você deve ter visto na visualização do conjunto de dados que nós temos 881.666 registros. Só que como você deve saber, nem toda base de dados é completa, então nós vamos ter informações em branco, e essas informações podem atrapalhar nossas análises.


Após atribuir a instrução "tabela.dropna()" na variável tabela, foram removidas as informações vazias da nossa tabela, agora totalizando 881.659 registros em nosso conjunto de dados.

Nesse momento a base de dados foi tratada, iremos dar prosseguimento a análise de dados propriamente dita. Vamos começar analisando a taxa de cancelamento da empresa, pois o objetivo é diminuir essa taxa. Então vamos ter que verificar qual é essa taxa e descobrir de onde ela vem.


Podemos utilizar a instrução "display(tabela["cancelou"].value_counts())" para mostrar a quantidade de registros que temos na coluna cancelou, bem como a execução da instrução "display(tabela["cancelou"].value_counts(normalize=True).map("{:.1%}".format))" para mostrar o percentual de representatividade dos registros da coluna cancelou. Você deve ter notado que nas duas visualizações apresenta o atributo 1, classificado como cancelou e 0, classificado como não cancelou.
Veja que temos um total de 56,7% de cancelamento das assinaturas, então mais da metade dos clientes estão cancelando o serviço. Concorda que nenhuma empresa quer algo similar, não é mesmo? Então vamos descobrir de onde vem esse número tão alto!


Importante observar que na parte de análise de dados, não tem uma informação correta para ser analisada logo de cara. Esse é um processo que vai tomar tempo, pois você de fato precisa analisar os dados e entender o que está acontecendo na sua base de dados. Pode ser que demore mais em alguns casos para encontrar o que procura antes de propor uma solução.

Podemos dar uma olhada como está a duração do contrato desses clientes. Lembrando que temos 3 tipos de contrato: mensal, trimestral e anual. É interessante ver como está essa proporção para verificar se isso pode ser um fator que afeta diretamente o cancelamento do serviço.



Com essa simples análise você já nota que temos a seguinte proporção na duração dos contratos:
  • Anual: 40,19%
  • Trimestral: 40,00%
  • Mensal: 19,75%
Veja que temos uma divisão quase igual entre os planos anual e trimestral, mas o plano mensal já fica atrás com quase 20%. O que podemos fazer é analisar as informações dos contratos para verificar como estão distribuídas e verificar se algum deles tem um percentual maior de cancelamento.

Aqui nós vamos utilizar o groupby para agrupar as informações da coluna duracao_contrato e depois calcular a média das informações que temos na tabela. Isso vai nos dar uma informação mais geral de cada um desses planos, e podemos verificar se tem alguma informação importante.



Com as informações agrupadas, é possível notar que os clientes do plano Mensal, possuem uma média de cancelamento igual a 1, ou seja, praticamente todos os clientes que utilizam esse plano fizeram o cancelamento do serviço. 
Esse já é um ponto importante dentro da nossa análise, pois existe um plano dessa empresa, onde praticamente todos os clientes fazem o cancelamento do serviço.

Sabendo que o contrato mensal é ruim para a empresa, nós podemos remover as informações desse contrato específico e continuar analisando.
Aqui vale lembrar que nem sempre que encontrar algo que seja ruim na sua análise de dados, você retira para por ali. A ideia é ir analisando até que chegue em valor aceitável dentro do seu projeto. Então é importante definir esse "valor aceitável" ou seu objetivo para não ficar trabalhando sem ter um ponto de parada.


Veja que a proporção de cancelamentos já caiu para 46,1% nessa análise, mas esse número ainda é muito alto. Vamos continuar analisando para chegar em valor aceitável de cancelamentos que não esteja perto de 50%.



Como ainda temos um número bem alto de cancelamentos, vamos agora fazer uma análise nas assinaturas para verificar se podemos tirar alguma conclusão para melhorar esse índice de cancelamentos. Primeiro vamos fazer a contagem dos valores na coluna de assinaturas para saber quantas assinaturas temos em cada um dos planos. Em seguida vamos agrupar as informações por assinatura e obter a média das linhas para cada uma das colunas.



Na primeira análise podemos verificar que temos praticamente a mesma quantidade em cada uma das assinaturas, ou seja, temos praticamente 1/3 em cada assinatura. E na segunda análise temos que os valores de cancelamento também são muito parecidos.

O que fazer agora?

Não podemos excluir nenhuma informação, pois os dados são praticamente iguais. Isso quer dizer que vamos ter que ir mais fundo na nossa análise de dados. Foi o que eu comentei anteriormente, nem sempre vamos achar algo logo de cara do que precisamos.

Como a última análise não foi muito boa para poder verificar quais informações poderiam ser removidas, vamos criar alguns gráficos, pois dessa forma fica muito mais fácil de visualizar os dados e obter as informações que de fato estão aumentando o número de cancelamentos desta empresa.


Para criação do gráfico foi utilizado a biblioteca Plotly.express. Feito isso, utilizamos a estrutura de repetição for, para percorrer cada uma das colunas de nossa tabela. Com isso vamos criar um gráfico de Histrograma com cada uma das colunas, assim podemos analisar cada uma das informações e verificar como elas se comportam em relação aos cancelamentos.
No conjunto de dados temos 211 colunas, isso quer dizer que vamos ter 11 gráficos para analisar. Aqui vamos focar em 2 desses gráficos. Vamos analisar o gráfico de Dias de Atraso e Ligações ao Call Center.


Nesse gráfico é possível notar que clientes com mais de 20 dias de atraso cancelam suas assinaturas.


Já nesse outro gráfico é possível notar que clientes com mais de 5 ligações ao Call Center cancelam suas assinaturas.

Analisando apenas os dois gráficos indicados, nós podemos manter na tabela as ligações ao Call Center que são menores do que 5. E podemos manter as informações onde os dias de atraso são menores do que 20. Com isso podemos visualizar a base de dados e fazer o cálculo novamente para verificar o percentual de cancelamento.


Veja que só removendo as informações dessas duas colunas passamos de um percentual de quase 50% de cancelamento para 18,4%.
Conseguiu perceber que tivemos que fazer várias etapas do processo até chegar um valor "aceitável"?
Não é apenas fazer um único tratamento que vamos ter esse resultado.

Conclusão 🙌

Nós começamos o problema com uma taxa de cancelamento de 56,7%. Após o primeiro tratamento conseguimos diminuir um pouco e atingimos 46,1%.
No final, com ajuda dos gráficos conseguimos ajustar nossa base de dados e chegamos ao percentual de 18,4% em cancelamentos.
Consegue ver que cada parte da nossa análise é fundamental para chegar ao resultado que queremos atingir?
Nessa empresa, já seria um avanço muito grande sair de 56% de cancelamentos para 18%, não é mesmo?
E fazendo todas essas análises e tratamentos nós temos como mostrar para empresa, onde estão os problemas e o que pode ser feito para minimizar os cancelamentos. 
Claro que você pode se aprofundar ainda mais e diminuir esse percentual, mas por motivos óbvios, nunca vamos chegar em 0% de cancelamentos. Mas podemos verificar o que é necessário para reduzir esse número ao máximo.

Ficamos por aqui, e espero vê-los em breve em mais uma publicação! Abraços a todos e até lá!


Postagens mais visitadas deste blog

Projeto BI de Chamados TIC

Projeto BI Financeiro