Previsão com python para o Dataset Telecom Churn – Parte 1

Written by:

Vejamos um exemplo ensinado num curso inicial de ML para fixação de conceitos e entendimento do Workflow de resolução de problemas de Ciência de Dados.

Como comentado no post anterior vamos explorar os conceitos abordados em um curso introdutório. Naquele post eu já passei o link para quem estiver disposto a iniciar na carreira. É um ótimo curso inicial!

O problema abordado nesse exercício é fazer a previsão de clientes que estão dispostos a abandonar ou cancelar os serviços de uma empresa: esse problema é chamado Churn. De fato é mais custoso obter novos clientes do que manter os clientes que a empresa já tem. Nesse sentido, as empresas investem em modelos que consigam identificar os clientes propensos a sair, e atuar antecipadamente para que isso não ocorra. No caso de estudo, a empresa oferece serviços de Telecom e os atributos do Dataset se referem às informações que a empresa coleta para saber como cada cliente usa seus serviços. Parece um log de totais de ligações…

ColunaDescrição
intl_planIndica se o cliente possui um plano internacional (0 = Não, 1 = Sim).
voice_mail_planIndica se o cliente possui um plano de correio de voz (0 = Não, 1 = Sim).
number_vmail_messagesNúmero de mensagens de voz recebidas pelo cliente.
total_day_minutesTotal de minutos usados pelo cliente durante o dia.
total_day_callsNúmero total de chamadas feitas pelo cliente durante o dia.
total_day_chargeCusto total das chamadas diurnas do cliente.
total_eve_minutesTotal de minutos usados pelo cliente durante a noite.
total_eve_callsNúmero total de chamadas feitas pelo cliente à noite.
total_eve_chargeCusto total das chamadas noturnas do cliente.
total_night_minutesTotal de minutos usados pelo cliente durante a madrugada.
total_night_callsNúmero total de chamadas feitas pelo cliente durante a madrugada.
total_night_chargeCusto total das chamadas na madrugada do cliente.
total_intl_minutesTotal de minutos gastos em chamadas internacionais.
total_intl_callsNúmero total de chamadas internacionais feitas pelo cliente.
total_intl_chargeCusto total das chamadas internacionais do cliente.
number_customer_service
_calls
Número de chamadas feitas para o serviço de atendimento ao cliente.
churnedIndica se o cliente cancelou o serviço (False = Não, True = Sim).

Modelo de dados do DataSet Telecom Churn

No caso esse é um problema supervisionado de Machine Learning pois usa um conjunto de dados rotulado, e é um problema de classificação com apenas uma classe, a coluna “churned”. Ou seja, cada linha equivale aos dados de um cliente que abandonou ou não a empresa e, temos 16 colunas de atributos e uma coluna de target. A ideia aqui é que o modelo consiga relacionar esses atributos com a coluna de cancelamento dos serviços da empresa. Intuitivamente, um cliente que não usa os serviços tem maiores chances de cancelar o plano, certo? Outro insight seria relacionado à coluna de “reclamações” do cliente: um cliente que liga muito para o setor de atendimento, possivelmente, é um cliente insatisfeito.

Dentro do Workflow, primeiro pensamos no Business do problema. Aqui já temos um dataset pronto, mas analisar o problema é uma etapa bem complexa, e dependendo do assunto do problema, muitas vezes precisamos da ajuda de um especialista no negócio.

É claro que já no primeiro exercício de um curso introdutório, usando um dataset simples, o foco não era aprofundar tanto na análise mas sim pegar a sistemática de um Jupiter Notebook do Load ao Predict. Dessa forma, durante o exercício prático, fizemos apenas alguns passos básicos para chegar ao final do processo. O link para o notebook didático executado durante o curso está no final deste post.

Reparem que os exercícios são simples e a predição do modelo usa o algoritmo KNN (K Nearest Neighbor) usando a biblioteca de Machine Learning Scikit-Learn. O algoritmo dos K vizinhos mais próximos é de fácil entendimento pois classificando um novo registro ao compará-lo com os K registros mais próximos no conjunto de treinamento. Por exemplo, se K vale três e dois vizinhos mais próximos pertencem a classe Churned False, o novo registro de cliente é classificado como propenso a Não Cancelar o plano. Veja a documentação do Sklearn no final do post.

Nesse Dataset, o maior desafio é saber como tratar os valores ausentes. Poderíamos ter removido uma coluna com muitos valores ausentes ou ter removido alguns registros onde as linhas tem muitas colunas com valores ausentes. Para fins didáticos, os valores foram preenchidos com valores médios.

No último exercício é apresentada a ideia de ajuste de parâmetros do algoritmo. Foi sugerido variar o número de vizinhos do KNN em uma tentativa de melhoria na acurácia do modelo de classificação. Esse é um conceito poderoso, onde o conhecimento dos algoritmos pode melhorar bastante o resultado do modelo.

Aqui podemos listar pequenas melhorias consistentes na análise deste conjunto de dados:

1- Identificar possíveis Outliers em cada atributo.

2- Identificar correlações entre as variáveis.

3- Usar um método de seleção de atributos para facilitar o aprendizado do modelo.

4- Usar modelos mais robustos que o KNN.

5- Usar uma métrica mais indicada para problemas de bases desbalanceadas.

Na parte 2 deste post vamos criar esse novo notebook mais avançado, usando essa lista.


Por hoje era isso. Até o próximo post!

Links do post:

Notebook do Colab – https://colab.research.google.com/drive/1wGkqWMvswszdkW6r48Q_zWVkk-GyvQXe#scrollTo=a5qWKHvQswl5

Dataset Telecom Churn – https://drive.google.com/file/d/1zFCBBaPCTsQF-qEojtzWuHhqbRFFDj5D/view

Link para o KNN do Sklean – https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

Leave a comment