Previsão de rotatividade de clientes baseada em dados com Python
- #Python
Olá queridos devs!
Você está pronto para descobrir como prever a rotatividade de clientes utilizando dados e Python?
Neste artigo, vamos explorar uma abordagem de ciência de dados que permitirá identificar quais clientes têm maior probabilidade de cancelar seus produtos ou serviços.
Você aprenderá a utilizar técnicas de machine learning para descobrir como reter seus clientes de forma eficaz, abordando desde a coleta e preparação dos dados até a construção e avaliação do modelo de previsão.
A ideia básica do churn prediction, chamado de previsão de rotatividade, reflete na ideia de usar machine learning, consistindo primeiramente no pré-processamento dos dados, sua divisão em conjuntos de teste e treinamento e então desenvolver modelos para obter ideias sobre o problema em questão.
Neste artigo, será abordado a avaliação dos modelos utilizando métodos estatísticos como accuracy, precision, recall e F1-score que levam em consideração os falso positivos, verdadeiro positivos, falso negativos e verdadeiro negativos para assim definir qual é o melhor modelo a ser escolhido.
O que você vai ver nesse artigo:
- Introdução à previsão de rotatividade de clientes
- Coleta e preparação dos dados
- Análise exploratória dos dados
- Construção do modelo de previsão de rotatividade de clientes
- Avaliação do desempenho do modelo
- Considerações finais
- Referências
Introdução à previsão de rotatividade de clientes
Atualmente, os mercados globais estão passando por um crescimento significativo no ambiente digital. Estima-se que até 2026 haverá um aumento de aproximadamente 56% em comparação a 2021.
Esse cenário evidencia a crescente modernização e digitalização dos serviços e comércios, o que também intensifica a concorrência em diversos setores.
Em virtude desse avanço, temos também a intensificação do Customer churn, em português ‘rotatividade dos clientes’, é o termo usado para definir o movimento dos clientes de um concorrente para outro (Hung et al., 2006).
Independentemente do setor em que atuam, a maioria das empresas ao redor do mundo enfrentam o mesmo desafio da rotatividade de clientes.
Ao entender quais fatores influenciam a rotatividade, as empresas podem agir preventivamente, reduzindo a perda de receita e fortalecendo o relacionamento com os clientes.
Coleta e preparação dos dados
Para realizar posterior análise e construção do modelo, essa etapa desempenha papel fundamental para prevenir erros de processamento e também durante a aplicação nos algoritmos de machine learning.
Preparar os dados é uma das tarefas mais importantes no processo da mineração de dados, sendo trabalhosa e crucial para o sucesso do modelo [1]. O data understanding passa por 4 passos: a recolha, a descrição, a exploração e a verificação da qualidade dos dados.
Além disso, para realizar esse preparo, nos últimos anos, o suporte aprimorado do Python e suas bibliotecas (por exemplo o pandas) tornou a linguagem uma forte opção para a análise e manipulação de dados. (MCKINNEY, 2012).
Dentre as bibliotecas mais famosas do Python, predominam para a área da Ciência de Dados: pandas; numpy; scipy; matplotlib e sklearn;
Aqui estão algumas etapas importantes nesse processo:
- Identificação e seleção das variáveis relevantes;
- Tratamento de dados ausentes, negativos, duplicatas ou discrepantes;
- Transformação de variáveis categóricas em binárias;
- Normalização dos dados;
Identificação e seleção das variáveis relevantes
Antes de selecionar as variáveis, é importante entender o problema de rotatividade em seu contexto específico de negócio. Isso pode incluir informações demográficas, comportamentais, histórico de compras, interações com a empresa, entre outros.
Torna-se necessário analisar quais informações podem estar relacionadas à decisão dos clientes de cancelar ou abandonar os serviços e identificar as variáveis potenciais para prever esse comportamento.
Depois de identificar um conjunto de variáveis potenciais, você precisa selecionar as mais relevantes para o seu modelo. Isso pode ser feito usando métodos estatísticos, como análise de correlação e algoritmos de seleção de recursos.
Tratamento de dados ausentes, negativos, duplicatas ou discrepantes
Dados Ausentes
Para tratar dados ausentes, pode-se utilizar a biblioteca Pandas para:
- Detectar valores ausentes no conjunto de dados: por exemplo, usar os métodos isnull() ou isna() para identificar tais valores em um DataFrame.
- Eliminar valores ausentes: caso os valores forem relativamente pequenos em relação ao número, pode-se optar por descartar as linhas ou colunas com valores ausentes usando o método dropna().
- Preencher valores ausentes: se não for possível descartar valores ausentes, existe a opção de preenchê-los usando técnicas como média, mediana, moda ou interpolação. O Pandas fornece o método fillna() para preencher os valores ausentes com base na estratégia escolhida.
Dados Negativos
Já para os dados negativos, o NumPy e o Pandas são as bibliotecas mais utilizadas, podendo serem usadas para:
- Converter valores negativos: se os valores negativos não fizerem sentido em seu contexto de dados, você poderá convertê-los em valores positivos. Você pode usar as bibliotecas para aplicar funções como abs() para converter valores negativos em positivos.
- Remover valores negativos: se valores negativos forem discrepantes ou erros, você pode optar por removê-los de seu conjunto de dados usando filtragem condicional com indexação booleana.
Dados Duplicados
Seguindo na mesma lógica, há a possibilidade de:
- Identificar duplicatas: use o método doubled() do Pandas para identificar linhas duplicadas.
- Remover duplicatas: remova linhas duplicadas usando o método drop_duplicates() em Pandas. Você pode optar por manter a primeira ocorrência da duplicata ou remover todas as ocorrências.
Dados Discrepantes
Caso haja ocorrências de dados discrepantes, podemos tratar dessas formas:
- Identificar discrepâncias: examine os dados usando técnicas de visualização ou métodos estatísticos. Diagramas de caixa, gráficos de dispersão ou estatísticas sumarizadas podem ajudar a identificar discrepâncias.
- Lidar com discrepâncias: dependendo da natureza da discrepância, você pode optar por remover valores discrepantes, substituí-los por valores mais razoáveis ou analisá-los separadamente.
Transformação de variáveis categóricas em binárias
A grande parte dos algoritmos de machine learning utilizam dados numéricos, porém a maioria dos conjuntos de dados muitas vezes utilizam variáveis categóricas. Como podemos, então, construir um modelo que utiliza variáveis qualitativas?
Existem várias técnicas para realizar essa transformação em Python. A escolha da técnica dependerá do tipo de variável e do contexto do problema.
Com isso, é importante lembrar de aplicar a transformação nas variáveis categóricas tanto nos dados de treinamento quanto nos dados de teste para garantir consistência nos resultados.
A codificação one-hot é usada quando a variável categórica não tem uma ordem específica. Ela cria uma nova coluna binária para cada categoria presente na variável, atribuindo o valor 1 para a categoria presente e 0 para as demais.
Exemplo:
import pandas as pd
# Criação de variáveis fictícias
data = {'cores': ['vermelho', 'azul', 'verde', 'vermelho', 'azul']}
df = pd.DataFrame(data)
# Aplicação da codificação one-hot
df_encoded = pd.get_dummies(df['cores'])
print(df_encoded)
Já a codificação de rótulos é usada quando a variável categórica possui uma ordem natural, desta forma, essa codificação atribui um valor numérico único para cada categoria.
Exemplo:
from sklearn.preprocessing import LabelEncoder
# Criação de variáveis fictícias
data = {'tamanho': ['pequeno', 'médio', 'grande', 'pequeno']}
df = pd.DataFrame(data)
# Aplicação da codificação de rótulos
label_encoder = LabelEncoder()
df['tamanho_encoded'] = label_encoder.fit_transform(df['tamanho'])
print(df)
Normalização dos dados
A normalização dos dados é uma etapa importante no pré-processamento dos dados antes de construir um modelo de previsão.
Ela tem como objetivo colocar as variáveis em uma escala comum, geralmente entre 0 e 1, para evitar que uma variável com valores grandes atrapalhe o processo de modelagem em relação às variáveis com valores menores.
A técnica chamada de Min-Max Scaling, também conhecido como normalização por intervalo, dimensiona os dados para que fiquem entre um intervalo específico, como 0 e 1. Essa técnica preserva a relação linear entre os dados originais.
Exemplo:
from sklearn.preprocessing import MinMaxScaler
# Criação de um objeto MinMaxScaler
scaler = MinMaxScaler()
# Normalização dos dados
normalized_data = scaler.fit_transform(df)
Esta segunda técnica também muito utilizada, denominada de normalização Z-Score, transforma os dados para que eles tenham média zero e desvio padrão igual a um. Essa técnica é útil quando se deseja padronizar os dados em torno de uma distribuição normal.
Exemplo:
from sklearn.preprocessing import StandardScaler
# Criação de um objeto StandardScaler
scaler = StandardScaler()
# Normalização ou Standardização dos dados
normalized_data = scaler.fit_transform(df)
Análise exploratória dos dados
Depois de concluir as etapas de preparação dos dados e garantir que estejam prontos e formatados corretamente, o analista de dados pode avançar para a fase de exploração dos dados.
Nessa etapa, ele pode gerar gráficos, histogramas e estatísticas que ajudarão a obter uma compreensão mais profunda dos dados, identificar padrões e extrair resultados e insights relevantes do conjunto de dados.
Conforme mencionado por Faceli et al. (2011), ao analisar as características encontradas em um conjunto de dados, é possível identificar padrões e tendências que oferecem informações valiosas para compreender o processo responsável pela geração desses dados.
Os tipos de análise mais usados são:
Análise univariada: envolve a análise de variáveis individuais no conjunto de dados. Isso pode ser feito observando a distribuição da variável, a média, a mediana, o desvio padrão e outras medidas estatísticas.
Por exemplo, pode-se usar o Pandas para traçar a distribuição de uma variável e ver se ela é normalmente distribuída.
Análise bivariada: envolve a análise da relação entre duas variáveis no conjunto de dados. Isso pode ser feito plotando as variáveis umas contra as outras, calculando o coeficiente de correlação e realizando outros testes estatísticos.
Por exemplo, usando o Pandas para explorar a relação entre duas variáveis, como o número de compras e o valor gasto pelos clientes, plotar essas duas variáveis uma contra a outra e ver se há uma correlação entre elas.
Análise multivariada: envolve a análise da relação entre várias variáveis no conjunto de dados. Isso pode ser feito usando métodos estatísticos multivariados, como análise de componentes principais e análise de cluster.
Por exemplo, podemos utilizar do Pandas e Seaborn para criar um mapa de calor que mostre a correlação entre um conjunto de variáveis para explorar as relações entre diversas variáveis, como idade, sexo e histórico de compras dos clientes.
Os métodos mais comuns para realizar essa análise com Python incluem as estatísticas descritivas, que no Python possui bibliotecas como NumPy e Pandas que oferecem funções para calcular medidas estatísticas descritivas, como média, mediana, desvio padrão, entre outros.
Essas estatísticas fornecem uma visão geral dos dados e ajudam a identificar padrões e tendências.
Como os algoritmos de machine learning são bem sensíveis ao alcance e distribuição de dados, data outliers, também conhecidos como valores atípicos ou anomalias, podem enganar o processo de treinamento do modelo, resultando em um processo mais longo
e modelos menos precisos.
Para lidar com esses outliers, é necessário detectá-los a partir métodos estatísticos ou técnicas de visualização como diagramas de caixa.
Por exemplo:
# Identifique outliers usando o escore z
from scipy import stats
z_scores = stats.zscore(data['column_name'])
threshold = 3
outliers = data[abs(z_scores) > threshold]
Outro método amplamente utilizado é a visualização de dados, aonde no Python, a biblioteca Seaborn e a Matplotlib, juntamente com suas interfaces como o Pyplot, são as principais responsáveis para criar gráficos e visualizações.
Histogramas, gráficos de dispersão, box plots (diagrama de caixas) e gráficos de barras são exemplos de visualizações úteis para entender a distribuição dos dados, relações entre variáveis e identificar possíveis anomalias.
Por exemplo:
import matplotlib.pyplot as plt
import seaborn as sns
# Plotar um histograma
plt.hist(data['column_name'])
plt.show()
# Criar um gráfico de dispersão
plt.scatter(data['column1'], data['column2'])
plt.show()
# Criar um diagrama de caixa
sns.boxplot(x='column_name', y='target_column', data=data)
plt.show()
A correlação também pode ser utilizada com o Python como método da análise exploratória, o Pandas oferece a função corr() para calcular a matriz de correlação entre as variáveis.
Essa matriz fornece informações sobre a associação entre as variáveis, indicando se elas têm uma relação positiva, negativa ou nenhuma correlação. Os resultados podem ser visualizados usando mapas de calor ou gráficos de dispersão.
Por exemplo:
# Calcular matriz de correlação
correlation_matrix = data.corr()
# Visualize a matriz de correlação como um mapa de calor
sns.heatmap(correlation_matrix, annot=True)
plt.show()
Construção do modelo de previsão de rotatividade de clientes
Nesta etapa, utilizaremos técnicas de aprendizado de máquina (Machine Learning) para criar um modelo capaz de identificar os clientes com maior probabilidade de cancelar ou abandonar os serviços oferecidos pela empresa.
O aumento do volume de dados coletados em várias atividades diárias e a complexidade associada a essa vasta quantidade de informações geradas levam à busca por técnicas capazes de lidar com essa situação e extrair conhecimento valioso por meio dessas experiências.
Como resultado, surge a necessidade de aplicar o machine learning, no qual, de acordo com Taulli (2019), um computador pode aprender sem a necessidade de ser programado explicitamente. Em vez disso, ele é capaz de processar e analisar dados usando técnicas estatísticas avançadas.
Depois de limpar e projetar os dados, você precisa dividi-los em 2 conjuntos: um conjunto de treinamento e um conjunto de teste. O conjunto de treinamento será utilizado para treinar o modelo, enquanto o de teste será utilizado para avaliar o desempenho do modelo em dados não vistos anteriormente.
É comum usar uma proporção de 70-80% para treinamento e 20-30% para teste.
Durante o treinamento, o modelo aprenderá os padrões e relacionamentos presentes nos dados, ajustando seus parâmetros para fazer previsões cada vez mais precisas.
Quando se trata de machine learning, o algoritmo difere tipicamente de um algoritmo tradicional. Isso ocorre porque o primeiro passo envolve o processamento dos dados, antes que o computador comece a aprender, como afirmado por Taulli (2019).
Existem diversos algoritmos de aprendizado de máquina que podem ser utilizados para prever a rotatividade de clientes, como Random Forest (RF), Regressão Logística (RL), Support Vector Machines, Redes Neurais, Árvore de Decisão, Regressão de Cox, Naive Bayes, entre outros.
A escolha do algoritmo dependerá das características dos dados e do problema em questão.
Na figura abaixo temos como um exemplo o código Python de uma Aplicação do Algoritmo RL
Na figura abaixo temos um exemplo de aplicação com Redes Neurais
Avaliação do desempenho do modelo
Após o treinamento, é importante avaliar o desempenho do modelo usando o conjunto de testes. Métricas comuns para avaliar modelos de previsão de classificação incluem accuracy, precision, recall e F1-score.
Essas métricas fornecerão insights sobre o quão bem o modelo está generalizando e fazendo previsões corretas.
Onde, TP, TN, FP e FN significam “Verdadeiro Positivo”, “Verdadeiro Negativo”, “Falso Positivo” e “Falso Negativo”, respetivamente (Bhatnagar & Srivastava, 2019).
Na figura abaixo, podemos observar um exemplo de avaliação que indica a preferência pelo algoritmo RL (Regressão Logística).
De acordo com o gráfico e utilizando a métrica AUC, constatou-se que o modelo mais eficiente é obtido através do uso da Regressão Logística, uma vez que apresenta a maior área sob a curva, o que indica melhor qualidade (Kuhn & Johnson, 2013).
Caso o desempenho do modelo não atenda às expectativas, pode ser necessário realizar ajustes nos hiperparâmetros do algoritmo selecionado. Os hiperparâmetros são configurações específicas do modelo que podem ser modificadas com o objetivo de otimizar seu desempenho.
Para isso, podem ser empregadas técnicas como validação cruzada ou busca em grade. Essas abordagens permitem explorar diferentes combinações de hiperparâmetros e selecionar aquelas que resultam em um melhor desempenho do modelo.
Uma vez que o modelo esteja treinado e ajustado, é possível utilizá-lo para fazer previsões em novos dados.
Com base nas previsões de rotatividade de clientes, a empresa pode tomar medidas proativas para reter clientes em risco, seja oferecendo incentivos, personalizando o atendimento ou melhorando a experiência do cliente.
Conclusão
Neste artigo, exploramos uma abordagem de ciência de dados para prever a rotatividade de clientes utilizando dados e Python. O churn prediction é uma estratégia essencial para empresas que desejam entender e reduzir a perda de clientes, fortalecendo o relacionamento com eles.
Concluímos que a previsão de rotatividade de clientes é uma poderosa ferramenta para auxiliar empresas a agir preventivamente, reduzindo a perda de receita e fortalecendo o relacionamento com os clientes.
Com o conhecimento adquirido neste artigo, os leitores estão prontos para aplicar essa abordagem em seus próprios projetos de ciência de dados, proporcionando benefícios significativos para suas organizações.
Espero que este artigo tenha sido útil e inspirador para você se aprofundar ainda mais no mundo da ciência de dados e machine learning. Lembre-se de consultar as referências listadas para obter mais informações sobre os conceitos abordados. Boas análises e previsões!
Referências
[1] Chapman, Pete, Randy Kerber, Tom Khabaza, Thomas Reinartz, Colin Shearer e
Rüdiger Wirth: CRISP-DM 1.0 step-by-step data mining guide. janeiro 1999. x, 5,
6, 31
MCKINNEY, Wes. Python for data analysis: data wrangling with pandas, NumPy, and IPython. Second edition. Sebastopol, California: O’Reilly Media, Inc, 2018.
MARTINS, Mafalda Alexandra Joaquim. Criação de modelo de previsão do Churn na aplicação MBWAY. masterThesis, Instituto Superior de Economia e Gestão, 2021. Disponível em: <https://www.repository.utl.pt/handle/10400.5/23665>. Acesso em: 30 jun. 2023.
CARVALHO DE ALBUQUERQUE, Italo Giullian; BERTUCI, Matheus Henrique; ARAUJO CANDEIA, Bruna; et al. CHURN RATE: como reduzir em empresas de telecomunicações utilizando aprendizado de máquina. Revista Interface Tecnológica, v. 18, n. 2, p. 40–52, 2022. Disponível em: <https://revista.fatectq.edu.br/interfacetecnologica/article/view/1183>. Acesso em: 30 jun. 2023.
SOUZA, Alex Nascimento. Estudo de comportamento de usuários de um app : transição de Freemium para Premium. 2021. Disponível em: <https://bdm.unb.br/handle/10483/31232>. Acesso em: 30 jun. 2023.
VIEIRA, Fernanda Cristina. Análise exploratória de dados: limpeza, manipulação e pré-processamento aplicado a dataset de perfil de atendimento nas unidades de saúde da cidade de Curitiba. 2021. Disponível em: <http://repositorio.utfpr.edu.br:8080/jspui/handle/1/28046>. Acesso em: 30 jun. 2023.
Global retail e-commerce sales 2026. Statista. Disponível em: <https://www.statista.com/statistics/379046/worldwide-retail-e-commerce-sales/>. Acesso em: 30 jun. 2023.
ARAÚJO, Jose Maria Amorim. Análise de sobrevivência e previsão de Churn de clientes de seguros de vida do banco do Brasil. 2022. Disponível em: <https://repositorio.unb.br/handle/10482/44013>. Acesso em: 30 jun. 2023.
SERGUE, Marie. Customer Churn Analysis and Prediction using Machine Learning for a B2B SaaS company. [s.l.: s.n.], 2020. Disponível em: <https://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-269540>. Acesso em: 30 jun. 2023.
MLMCE, INDIA; ANDREWS, RoshinReji. CHURN PREDICTION IN TELECOM SECTOR USING MACHINE LEARNING. International Journal of Information Systems and Computer Sciences, v. 8, n. 2, p. 132–134, 2019. Disponível em: <http://www.warse.org/IJISCS/static/pdf/file/ijiscs31822019.pdf>. Acesso em: 30 jun. 2023.