top of page
Buscar

Taxa de Cancelamento (Churn) & Análise de Dados com Python.

Foto do escritor: Rafael MarianiRafael Mariani

Atualizado: 21 de out. de 2021

O que pode explicar a taxa de 26% de cancelamento de assinatura de clientes - o tal do churn - ? O que os dados nos dizem?







Contexto

Analisando o histórico dos clientes dos últimos anos de tal empresa, percebemos que 26% dos clientes cancelaram a assinatura. O que pode está acontecendo e o que fazer?



Objetivo

Entender os principais motivos que levam ao cancelamento para assim gerar um plano de ação a partir de insights identificados.



Dataset

Fonte: Curso Hashtag Programação - Análise de Dados com Python

Link: htps://www.kaggle.com/sakshigoyal7/credit-card-customers

File:





Vamos lá!



Vamos importar as bibliotecas necessárias:

import pandas as pd
import numpy as np
import plotly.express as px
import seaborn as sns
import matplotlib.pyplot as plt
import time


Lendo o dataset:

path= r'C:/Users/Rafael Mariani/Análise Exploratória de Dados/AED - Costumer Churn/'
filename = 'telecom_users.csv'
data_path = path + filename #diretório dataset
path_fig = path
df_cost = pd.read_csv(data_path)


Vamos processar os dados:

#análise inicial
df_cost.info()
df_cost.head()
df_cost.isnull().sum() #identicando o total de dados ausentes
df_cost.isnull().mean()*100 #identificando o percentual de dados ausentes
df_cost.drop('Codigo',axis=1,inplace=True) #excluindo coluna inútil 
df_cost.dropna(how='any', inplace=True) #eliminando linhas que tenham ao menos um dado ausente
df_cost.duplicated().sum() #identificando linhas duplicadas


#convertendo a coluna TotalGasto de tipo objeto para numérico 
df_cost.info()
df_cost['TotalGasto'] = pd.to_numeric(df_cost['TotalGasto'],errors='coerce') #coerce, indica que em caso de erro, o valor a ser considerado na transformação será NaN
df_cost.info()

df_cost['Churn'].value_counts(normalize=True)*100 #identificando o percentual de cancelamentos


#Mantendo o padrão Sim ou Não
df_cost['Aposentado']= df_cost['Aposentado'].astype(str)
df_cost['Aposentado'] = df_cost['Aposentado'].str.replace('1','Sim')
df_cost['Aposentado'] = df_cost['Aposentado'].str.replace('0','Não')


#Reduzindo o nome em FormaPagamento 
df_cost['FormaPagamento'] = df_cost['FormaPagamento'].str.replace('CartaoCredito','Credito') df_cost['FormaPagamento'] = df_cost['FormaPagamento'].str.replace('DebitoAutomatico','Deb.Aut.') df_cost['FormaPagamento'] = df_cost['FormaPagamento'].str.replace('BoletoEletronico','Bol.Elet.') df_cost['FormaPagamento'] = df_cost['FormaPagamento'].str.replace('BoletoImpresso','Bol.Impres.')



Vamos analisar a taxa de churn relacionado a cada variável. Para isto, a partir de um loop, vamos fazer um plot com 20 subplots contendo histogramas:


#Plotando histogramas em subplots
fig,ax = plt.subplots(4,5,figsize= (14,7)) #propriedades dos plots serão compartilhadas em todos os subplots
ax = ax.flat  #necessário para o loop do subplot

i=0
for col in df_cost:
    if ((col != 'Unnamed: 0') and (col != 'IDCliente')):
        sns.histplot(data=df_cost,x=col,hue='Churn',multiple="stack", shrink=.8,ax=ax[i],legend=False)
        ax[i].set_xlabel(col,fontweight='bold')
        ax[i].grid(False)
        i = i+1
       
fig.tight_layout()
ax[19].legend(('Canceled','Not Canc.'),fontsize=8)
ax[1].legend(('Canceled','Not Canc.'),fontsize=8)

#salvando figura
plt.savefig(path_fig + '\Churn Analysis - Telecom'+'.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
print('Figura salva em ' + path_fig)


Plot gerado (cor amarela = cancelou e cor azul = não cancelou):


Insights

Existe um maior número de cancelamento de assinaturas associados a:

  • Cliente solteiro

  • Sem dependentes

  • Primeira experiência como cliente - recém chegado

  • Forma de pagamento tipo boleto

  • Tipo de contrato - Mensal

  • Clientes que não possuem serviços adicionais de Suporte Técnico, Proteção a dispositivos e Segurança Online tendem a cancelar mais.


Que tal oferecer benefícios e vantagens para o cliente que optar por:

  • Adicionar 1 ou mais dependentes

  • Utilizar cartão de crédito como forma de pagamento

  • Assinar contrato anual

Além disso, que tal reanalisar e melhorar a experiência do novo cliente? A experiência do novo cliente nos 3 meses iniciais é decisiva para o cancelamento ou continuidade da assinatura.



Podemos plotar os histogramas separadamente:


i=0
for col in df_cost:
    if ((col != 'Unnamed: 0') and (col != 'IDCliente')):
        print(col)
        fig,ax = plt.subplots(figsize= (14,5)) #propriedades dos plots serão compartilhadas em todos os subplots
        sns.set_style("whitegrid")
        sns.histplot(data=df_cost,x=col,hue='Churn',multiple="stack", shrink=.8)
        ax.set_xlabel(col,fontweight='bold',fontsize='large')
        ax.set_title('Churn Analysis',fontweight='bold',fontsize='large')
        ax.grid(False)
        fig.tight_layout()
        
        #salvando
        plt.savefig(path_fig + '\Fig'+str(i)+'.png', dpi = 150, facecolor='w', edgecolor='w', orientation='portrait',)
        print('Figura salva em ' + path_fig)
        time.sleep(3)
        plt.close()
        
        i = i+1





























Fim! Curtiu? :)


















38 visualizações0 comentário

Posts recentes

Ver tudo

Kommentare


logo rm.png

© 2021 por Rafael Mariani. Criado orgulhosamente com Wix.com

bottom of page