Aprendizado de máquina evitando evasão de clientes
Como o uso de modelos de aprendizado de máquinas podem identificar potenciais evasões de clientes de uma empresa?
A retenção de clientes é uma das questões mais importantes em que as companhias devem lidar. Prevenção da evasão de clientes (customer churn prevention) faz parte das estratégias do gerenciamento do relacionamento do cliente (CRM). Grandes empresas implementam modelos de previsão de churn para serem capazes de detectar possibilidade/probabilidade de evasões, antes mesmo da efetiva saída desse cliente.
Churn Rate ou apenas Churn é uma métrica de extrema importância para os tomadores de decisões. Com ela visualiza a quantidade de clientes que a empresa perdeu (a), em comparação com a quantidade total de clientes (b), em uma espaço de tempo ©, ou seja, ao longo de © períodos a taxa de evasão se dá por (a)/(b). Portanto, quanto menor essa proporção melhor para a empresa. Sua análise ao longo do tempo pode revelar problemas que deverão ser solucinados.
Com churn como pano de fundo, juntamente com (i) ciência computacional, (ii) matemática, (iii) estatística e (iv) um bom histórico de dados com clientes que evadiram-se e os que ainda estão na empresa, podemos prever/identificar potenciais cancelamentos, e o que é melhor de forma antecipada, o que permitirá promover ações direcionadas para tentar reter tais clientes.
O que se justifica o uso desses modelos que a propósito, usam aprendizado de máquina, é o fato de que o Custo de Aquisição de Cliente (CAC) é normalmente mais alto que o custo para mantê-los. Ou seja, o que queremos é menores custos e maiores receitas!!
Nesse contexto usaremos Inteligência Artificial para tal detecção. Usando (a) uma base histórica, (b) um algoritmo de machine learning e © as compreensão das técnicas e as boas práticas da Ciência de Dados, construiremos uma ferramenta que seja capaz de prever a probabilidade de uma pessoa cancelar seus produtos junto a uma empresa.
Neste script, disponível em meu portifólio do gitHub, usamos uma utilizaremos uma coleção de informações catalogadas e disponibilizados na plataforma de ensino da IBM Developer.
A propósito usei como estratégia os seguintes passos:
A análise exploratória dos dados, observou-se que os mesmos são potencialmente categóricos e que não havia dados faltantes.
A feature TotalCharges
deveria representar informações do tipo numérico, pois trata-se do total de gastos. Uma hipótese seria, na carga dos dados o interpretador considerou o tipo de dados string
por conter dados nulos, os quais foram interpretados como string e toda feature herdou essa característica. Ao conveter observou-se dados faltantes, que imputamos com a média da coluna.
Visulizar os colunas, através de gráficos permite dar uma conciência situacional dos dados.
Algumas features e alguns problemas de negócios poderam sofrer com algum tipo de bias, viés nos dados. Poderá gerar algum prejuízo relevante ao modelo. Notamos que a feature gender
possui a informação do gênero Female
e Male
. Seria prudente verificar como está a contagem de cada grupo nesse atributo, com a finalidade de não incorrer em um enviesamento por gênero. Notamos que para a feature InternetService
, os que possuíam Fiber optic
possuem mais apontamento para churn
.
Na feature Tenure
("cliente desde") os que deixam a empresa (Churn = sim) tendem a ser clientes relativamente novos. Além de os clientes que saem tendem a pagar taxas mensais mais altas do que os que permanecem, conforme podemos verificar na feature MonthlyCharges
.
A análise exploratória dos dados é riquíssima de insights!!
O grande propósito de projeto foi usar a (a) Validação Cruzada como foma de mitigar o overfitting, além de comparar modelos de uma forma mais célere e (b) fazer uma otimização dos parâemtros do melhor modelo para aumentar sua performance.
A validação cruzada (cross validation) é usada para testar a generalização do modelo. Como treinamos qualquer modelo no conjunto de treinamento, ele tende a se ajustar demais na maioria das vezes e para evitar essa situação, usamos técnicas de regularização.
Cross Validation é uma técnica que pode ser utilizada para avaliar a performance de um modelo com menos variância em comparação com a técnica de dividir os dados em treino/teste. Com esta técnica dividimos os dados em partes normalmente chamadas de k-folds (por exemplo k = 5, k = 10). Cada parte é chamada fold. O algoritmo é treinado em k-1 folds. Cada fold é usado no treinamento de forma repetida e um fold por vez. Após executar o processo em k-1 folds, podemos sumarizar a performance em cada fold usando a média e o desvio padrão. O resultado é normalmente mais confiável e oferece maior acurácia ao modelo.
Todos os algoritmos de Machine Learning são parametrizados, o que significa que podemos ajustar a performance do modelo preditivo, através do tunning (ajuste fino) dos hyperparâmetros. Nosso trabalho é encontrar a melhor combinação entre os esses hyperparâmetros em cada algoritmo de Machine Learning.
Podemos constatar que no cerne de Machine Learning a etapa de otimização é onde podemos conseguir os melhores resultados. Nesta etapa são algoritmos de Machine Learning iteragindo com modelos de Machine Learning.
Podemos afirmar que um taxa de aprendizado menor, conseguimos melhorar o desempenho do modelo XGBoost, considerando, neste jupyter e neste contexto apenas recall como métrica de performance do modelo.
Tínhamos uma taxa de Recall de 0,8046 e ao otimizar o modelo atingimos 0,888. Um ganho de performance… que saberemos ao aplicar aos dados de teste!!
Modelo final foi treinado, usando algoritmo XGBoost (com melhores valores de hyperparametros) nos dados de treino processados e (ii) o desempenho final em nos dados de teste, que é o primeiro contato do modelo com esse sub-conjunto que havíamos preservado, foi satisfatório.
A confusion matrix permite identificar quais dos 2 tipos de erros o modelo incorreu.
Erros do tipo 1 são os conhecidos como falso Positivo (FP), para nosso caso esse erro é quando o modelo preveu que haveria uma evansão (Churn) no entanto cliente permaneceu na empresa, ou seja, para esse erro a empresa poderia ofertar um desconto ou uma oferta a um cliente que não sairia da empresa, aqui esse cliente fica super contente!!! 😄😄😄.
Erros do tipo 2 são os falso Negativo (FN), ou seja, foi previsto que o cliente não sairia da empresa no entanto o cliente saiu!! Esse cara poderia até ter ficado se fosse ofertado para ele um desconto no seu 5g!!!!
De fato o modelo final manteve sua generalização nos dados de testes!!
O uso da cross validation permite redizir riscos de overfitting no modelo, ao passo que separa os dados de treino em mais amostras. Além de permitir comparar mais de um algortimo de ML, dando celeridade ao processo.
A otimização dos hyperparâmetros usando outros algoritmos de ML entregou ao modelo um aumento no Recall de 0,08 (de 0,80 para 0,88) ganho considerável de performance, levando em consideração que apenas ajustamos os hyperparâmetros.
Manteve ainda uma boa generalização nos dados de teste. Mantendo um Recal de 0,87.
Ainda há espaço para se tentar outras técnicas de balanceamento de dados, feature engineering, feature selection, enfim, podemos trabalhar os dados.
Encerro por aqui!! Espero que tenho gostado!!
Até o próximo projeto!!
Caso queiram entrar em contato: Angelo Buso!!