Churn rate, ou simplesmente churn, representa a taxa de evasão da sua base de clientes. Em serviços como Spotify ou Netflix, ela representaria a taxa de cancelamento de assinaturas.
Ela é de extrema importância para a administração e sua análise ao longo do tempo pode mostrar que existe algum problema que deve ser atacado.
Churn também pode ser usado para identificar potenciais cancelamentos, com um tempo de antecedência, e promover ações direcionadas para tentar reter tais clientes. Essa métrica deve receber atenção pelo fato de que o Custo de Aquisição de Cliente (CAC) é normalmente mais alto que o custo para os manter. Ou seja, um alto valor para o churn rate é o que não desejamos.
Neste artigo irei apresentar uma solução para este tipo de problema. Irei apresentar passo-a-passo para você ver que inteligência artificial, aprendizado de máquina pode ser útil para qualquer empresa, inclusive as menores… basta ter a matéria prima necessária, os dados.
Aquisição dos Dados
Os dados utilizados neste projeto foram originalmente disponibilizados na plataforma de ensino da IBM Developer, e tratam de um problema típico de uma companhia de telecomunicações. O dataset completo pode ser encontrado neste link. Apesar de não haver informações explícitas disponíveis, os nomes das colunas permitem um entendimento a respeito do problema.
Porém para facilitar o entendimento eu montei um dicionário das variáveis utilizando apenas os nomes de forma intuitiva.
Dicionário de Variáveis
customerID : ID do cliente
gender: Gênero do cliente
SeniorCitizen: Indicador da “melhor idade”
Partner: Possui algum parceiro
Dependents: Possui algum dependente
tenure: Tempo de permanência na empresa
PhoneService: Possui serviço de telefone
MultipleLines: Possui múltiplas linhas de telefone
InternetService: Qual tipo de serviço de internet possui
OnlineSecurity: Possui serviço de antivírus
OnlineBackup: Possui serviço de backup online
DeviceProtection: Possui serviço de proteção
TechSupport: Possui serviço de suporte
StreamingTV: Possui serviço de streaming de TV
StreamingMovies: Possui serviço de streaming de Filmes
Contract: Tipo do contrato
PaperlessBilling: Fatura impressa em casa
PaymentMethod: Forma de pagamento
MonthlyCharges: Valor da mensalidade
TotalCharges: Mensalidades totais pagas(Mensalidade * Tempo de Permanência)
Churn -> Status se ocliente cancelou o serviço no final de seu contrato (YES) ou ainda está na empresa (NO)
Análise Exploratória
Antes de mais nada, vamos conhecer um pouco do conjunto de dados. Saber a quantidade de entradas (linhas) e a quantidade de variáveis (Colunas) do conjunto de dados analisado é muito importante para planejar os próximos passos.
Agora, outra parte importante é verificar se o conjunto está completo ou se possui muitos dados faltantes. Abaixo podemos verificar que não temos nenhuma coluna sem dados… será mesmo?
Para ter certeza verifiquei o tipo de dado de cada coluna. Vejam que a maioria dos dados é do tipo “object”. Porém, se olharmos com mais detalhe e compararmos os dados abaixo com os dados do dicionário no início deste artigo podemos ver que a coluna “TotalCharges” possui dados numéricos do tipo float e não object.
Ao invés de tentar transformar essa coluna em float logo de primeira, vou fazer uma verificação para tentar descobrir o motivo dessa coluna não ser um float.
Agora sim podemos ver acima que o menor valor é simplesmente um espaço em branco entre aspas. Para corrigir isso eu criei uma função que facilita a transformação de outas colunas com situações semelhantes.
Antes de aplicar a função na coluna TotalCharges, achei melhor criar um dataset “df_clean” para fazer todos os tratamentos necessários e preservar o conjunto de dados original.
Agora sim podemos ver a quantidade de entradas NaN encontradas na coluna TotalCharges.
Agora iremos verificar a distribuição da variável alvo (Churn). Abaixo podemos observar que temos um certo desbalanceamento, onde valores “no” são significativamente maiores do que “yes”. Isso também precisa ser tratado pois futuramente pode prejudicar o modelo.
O mesmo processo iremos fazer para a variável “gender”. Neste caso é possível verificar que os dados estão bem distribuídos.
Para visualizar melhor as outras variáveis numéricas do dataset é muito útil plotar alguns gráficos de distribuição (Histogramas).Com eles é possível observar que o TotalCharges (MonthlyCharges * Tenure) diminui com o tempo devido à baixa retenção dos clientes.
Outra variável interessante de ser analisada é a “tenure” que significa o tempo que os clientes ficam com o serviço contratado.
Logo de cara podemos ver que a quantidade de clientes com 1 mês de serviço é bem significativa, porém essa quantidade cai drasticamente ao longo do tempo. Ou seja, realmente os novos clientes não estão ficando.
Preparação dos Dados
Após uma breve análise exploratória para conseguirmos entender um pouco dos dados, o que precisa ser tratado e tudo mais, chegou a hora de começar a preparação do conjunto de dados para receber o modelo e fazer algumas previsões posteriormente. Como vimos no início deste artigo, o conjunto de dados usado possui muitas variáveis categóricas inclusive a variável alvo (Churn). A maioria dos modelos para classificação aceitam somente dados numéricos, por isso se faz necessário fazer essa transformação para que o modelo escolhido possa receber os dados corretamente.
Abaixo fiz primeiro a transformação da variável alvo, Churn, de No e Yes para 0 e 1.
Se repararmos bem nas descrições das variáveis é possível identificar que a maioria delas são binarias (no e yes ou 0 e 1). Porém temos algumas dessas variáveis com valores redundantes. Por exemplo a coluna MultipleLines que possui 3 valores sendo um deles “No internet service” que pode ser agrupado com o valor “no”, tendo como resultado final 2 classes apenas,”yes” e “no”.
Outro detalhe legal para ser considerado é a variável tenure. Se ela representa o tempo que cada cliente está consumindo o serviço da empresa, os clientes com tenure 0 significa que eles não passaram nem 30 dias com o serviço e cancelaram. Neste caso irei remover esses clientes para que o modelo possa considerar somente aqueles que passaram mais de 30 dias com o serviço.
Agora iremos separar as variáveis numéricas e as categóricas. Além disso iremos remover algumas outras variáveis que não fazem sentido e não agregam para a análise.
Nesta etapa irei tratar as variáveis categóricas através do ecoding e fazer uma padronização nas variáveis numéricas.
Modelos de Machine Learning
Após fazer todas as preparações dos dados chegou a hora de dividir nosso conjunto de dados entre treino e teste para assim fazer a aplicação dos modelos.
No começo do artigo, na análise exploratória, vimos que a nossa variável alvo estava bem desbalanceada e aqui iremos aplicar o processo de balanceamento.
Dados Balanceados!! Vamos partir para a próxima etapa que é a definição dos parâmetros. Essa fase melhora consideravelmente a performance dos modelos… e falando em modelos o primeiro que irei testar será o DecisionTree.
DecisionTree — Arvore de Decisão
E para avaliar, abaixo temos o resultado da performance que foi de 0,81 com os seguintes parâmetros:
classifier__criterion’: ‘entropy’
classifier__max_depth’: 4
XGBoost
Agora iremos aplicar o mesmo processo só que usando o modelo XGBoost
Agora tivemos um resultado bem melhor, 0,87. Os melhores parâmetros encontrados foram:
classifier__gamma’: 0
classifier__learning_rate’: 0.005
classifier__max_depth’: 2
classifier__n_estimators’: 100
classifier__subsample’: 0.5
LogisticRegression
E por último o modelo de regressão hehe.
Que teve um resultado de 0,80 com os seguintes parâmetros:
‘classifier__C’: 1.0
Conclusão
O que podemos concluir desse pequeno estudo?
De 3 modelos que utilizamos para prever o Churn o melhor em termos de performance foi o XGBoost com 87%. Isso significa que a cada 100 clientes com pretensões de cancelar o contrato o modelo previu 87 corretamente.
Antes disso vimos também que outros processos são necessários e fundamentais em projetos de Machine Learning que é a limpeza e preparação da base de dados antes de receber qualquer tipo de algoritmo/modelo.
E o mais importante, viu como não é nada monstruoso utilizar a inteligência artificial para solucionar um problema de negócio? Obviamente que cada empresa possui um cenário diferente da outra, alguns cenários mais simples, como este projeto e outros mais complexos, porém o principal toda empresa tem que são os dados.
Espero que este artigo tenha te ajudado de alguma forma. Se gostou curte a publicação e deixa um comentário :)