Como empresas preveem o cancelamento de um cliente?



Original Source Here

Como empresas preveem o cancelamento de um cliente?

Você já pensou o que seria da Netflix, Spotify, TV’s por assinatura ou até mesmo sua operadora de telefone, caso todos os clientes resolverem cancelar seus serviços? Elas simplesmente deixariam de existir. Gosta de tecnologia, programação e Data Science me chama la no linkedin vai ser um honra conversar sobre esses assuntos.

Todos os dias milhares de clientes cancelam, ou fazem o chamado Downgrade para um serviço mais barato. Agora imagine se sua empresa fosse capaz de prever quando isso fosse ocorrer, e pudesse tomar uma atitude, por exemplo oferecer um mês gratuito, disponibilizar um serviço premium ou qualquer coisa que consiga reter esse clientes.

Pois é hoje isso já é possível e milhares de empresas no mundo inteiro estão investido pesado nesse tipo de solução.

Com base no comportamento de cada cliente e uma serie de dado correlacionados, é possível prever com uma boa taxa de precisão quais clientes estão mais propensos a cancelar.

Isso é possível graças aos Cientista de dados e a um conjunto de técnicas e modelos de Machine learning.

Para entender como isso é possível precisamos discorrer sobre uma métrica muito importante, o Churn Rate, que de maneira sucinta o quanto de receita ou cliente a empresa perdeu. Seu resultado é a divisão do número de cliente atual / número de clientes ativos do ultimo mês. Esse valor é expresso em porcentagem. Ou seja quanto menor, melhor para os negócios, pois há uma maior retensão de clientes/receita. Outro motivo pela qual é bom manter um Churn baixo é que o CAC (custo de aquisição de cliente), é em geral maior do que o de manter os clientes já existentes.

Com isso em mente o objetivo da equipe de dados das empresas é trabalhar modelos machine learning que sejam capazes calcular a probabilidade de evasão. Lembrando que o notebook completo do projeto está aqui.

Para o projeto que será apresentado a seguir tem base de dados de uma empresa de telecomunicações disponibilizado na plataforma de ensino da IBM Developer, com a ajuda do Google colab.

Todos os códigos usados para essa analise e modelos foram escritos em Python.

Bibliotecas utilizadas para analise.

O ultimo comando mostra as 5 primeiras lindas do dataframe.

Dataframe sem modelagem.

Esse é o ponto de partida. A seguir o dicionários das variáveis.

  • SeniorCitizen = Idoso
  • Partner = Casado
  • Dependents = Dependentes
  • tenure = Tempo de uso dos serviços
  • PhoneService = Serviço de telefone
  • MultipleLines = Multiplas linhas
  • InternetService = Tipo de Internet
  • OnlineSecurity = Seguro Online
  • OnlineBackup = Backup Online
  • DeviceProtection = Dispositivo de segurança
  • TechSupport = Suporte técnico
  • StreamingTV = TV streaming
  • StreamingMovies = Filmes streaming
  • Contract = Tipo de contrato
  • PaperlessBilling = Cobrança sem papel
  • PaymentMethod = Método de pagamento
  • MonthlyCharges = Mensalidade
  • TotalCharges = Custos Totais
  • Churn = Cancelamento (variável alvo)

Ultilizando o método dtypes podemos observar os tipos de entradas do dataset.

O dataset to é formado prioritariamente de objetos mas a frente sera necessário converter-los a números. Também vimos que temos 7034 e 21 colunas no total.

Foi verificado se há valores ausentes e quantos valores diferentes existem em cada variável.

Aparentemente não há valores ausentes.

Números ausentes
Quantidades de valores diferentes

A coluna “TotalCharges” se apresenta como um valor, no entanto quando observamos df.dtypes podemos notar que se trata de um objeto, a diante vamos converter-lo em um numero decimal.

Erro.

Na ultima linha ValueError diz que não é possível converter um texto em número decimal, isso pode ser um indicativo que haja valores ausentes. Adotamos outra abordagem na resolução.

Aproveitamos nesse ponto para eliminar o customerID visto que ele não relevante.

Descobrimos que há 11 valores ausentes na lable trabalhada, por se tratar de um número ínfimo podemos inferir valores, estes serão a própria mediana da coluna.

Primeiros insights

Analisando brevemente podemos observar que:

  • 70% dos clientes não possuem dependentes;
  • 90% tem linha telefônica;
  • 21,97% não possuem serviço de internet;
  • Existem 3 tipos de contrato mensal 55,02%, anual 20,91%, e bianual 24,07%.
  • Grande parte das variáveis são categóricas, porém alguns contém por exemplo No e No Phone service, com isso sabemos que podemos transformar variável binaria;
  • O dataset apresenta não haver outliers.

Aqui também é possível notar a variável Churn que será nosso alvo no decorrer do projeto, Nele vemos que 26,54% dos clientes se evadiram.

Podemos reforçar que não há outliers por meio de um boxplot das colunas MonthlyCharges e TotalCharges

O thershold padrão não acusou nenhum plot fora dos limites superior e inferior.

A variável tenure é o tempo que o cliente permanece com o serviço, pode ser um indicativo de fidelidade.

Por falta de informação vamos assumir que o tempo adotado é “mês”.

Grande parte das entradas no dataset são de variáveis categóricas binárias, com isso para melhores resultados na construção de um modelo preditivo vamos converter para numéricas, onde No e No service serão atribuídas 0 e yes será 1.

Nesta parte do projeto fizemos um pré-processamento afim de começar a construir um modelo base.

Para as variáveis com mais de 3 categorias utilizamos um método de transformação conhecida por variável Dummy. Para as com apenas duas foi utilizando o LabelEncoder. Salientando que nessa etapa utilizaremos também a variável alvo Churn. Com isso feito vamos a seguir, separar nossos dados de treino e teste para dar início a construção do nosso modelo de Machine Learning.

Com os dados devidamente separados vamos partir para a construção do modelo, nessa etapa não vamos feito nenhum ajuste de hiperparâmetro nem balanceamento, o intuito é avaliar pelo método de cross-validation. Por motivo de praticidade criaremos uma função val_model, e a métrica usada para avaliação será o recall.

A métrica Recall é utilizada para indicar a relação entre as previsões positivas realizadas corretamente e todas as previsões que realmente são positivas (True Positives e False Negatives). Como o principal objetivo do projeto é prever possíveis perdas de receita proveniente de evasão de clientes. Sendo assim ela é um bom indicativo para avaliar o modelo.

A priori vamos usar o modelo de regressão logística apenas como um ponto de partida.

A partir do nosso baseline acima podemos avaliar se os ajustes melhoram o pioram nosso modelo.

A primeira alteração que será feita é um balanceamento dos dados, seguido da padronização dos dados. A técnica utilizada é o Under Sampling, após o teste de desempenho das outras.

Aplicando Cross-validation, vamos selecionar o modelo que obteve o melhor desempenho e otimizar seus hiperparâmentros. Os modelos usados serão os seguintes:

  • Random Forest
  • Decision Tree
  • Stochastic Gradient Descent
  • SVC
  • Logistic Regression
  • XGB Classifier
  • LightGBM

Acima observamos que o LogisticRegression e XGBClassifier tem praticamente um empate, no entanto para seguir com o projeto dada as maiores possibilidade de tuning nos hiperparâmetros adotaremos o XGBoost como nosso modelo.

O objetivo será encontrar os melhores tuning de parâmetros, a seguir vamos definir uma taxa de aprendizado e números de estimadores. Utilizando a técnica Grid Search vamos procura os melhore parâmetros para otimização. Iniciaremos com o learning_rate=0.1

Com o número de estimadores igual a 50, realizarei a busca dos parâmetros max_depth e min_child_weight

Fato é que com uma taxa de aprendizado menor o desempenho do modelo melhorou, se for levado em conta apenas o recall.

Agora com os parâmetros ajustados vamos treinar o modelo final e plotar a matriz de confusão.

Conclusão.

Essa uma uma maneira simples porem eficiente de se prever a evasão de um cliente com base em dados, observando a matriz de confusão vemos que nosso modelo acertar qual cliente vai cancelar em 86% das vezes, isso pode significar uma economia gigantesca, e é justamente por esse motivo que empresas como a netflix e spotify investem tanto dinheiro nessa tecnologia.

Você já conhecia esse tipo de tecnologia? responda nos comentários se gostou.

AI/ML

Trending AI/ML Article Identified & Digested via Granola by Ramsey Elbasheer; a Machine-Driven RSS Bot

%d bloggers like this: