previsão de Churn

Foto por Mantas Hesthaven no Unsplash

rotatividade de Clientes, também conhecido como o atrito com o cliente, ocorre quando os clientes a parar de fazer negócios com uma empresa. As empresas estão interessadas em identificar segmentos desses clientes, porque o preço para a aquisição de um novo cliente é geralmente maior do que manter o antigo. Por exemplo, se a Netflix conhecesse um segmento de clientes que estavam em risco de agitá-los, eles poderiam engajá-los proativamente com ofertas especiais, em vez de simplesmente perdê-los.

neste post, vamos criar um modelo de previsão de churn do cliente simples usando o conjunto de dados do cliente Telco Churn. Escolhemos uma árvore de decisão para modelar clientes churned, pandas para o crunching de dados e matplotlib para visualizações. Faremos tudo isso em Python.
o código pode ser usado com outro conjunto de dados com alguns pequenos ajustes para treinar o modelo de base. Também fornecemos algumas referências e damos ideias para novas funcionalidades e melhorias.

Você pode executar este código baixando este caderno Jupyter.

Aqui estão alguns links que podem interessar a você:

- Labeling and Data Engineering for Conversational AI and Analytics- Data Science for Business Leaders - Intro to Machine Learning with PyTorch - Become a Growth Product Manager - Deep Learning (Adaptive Computation and ML series) - Free skill tests for Data Scientists & Machine Learning Engineers

Alguns dos links acima estão links de afiliado e se você passar por eles para fazer uma compra, eu vou ganhar uma comissão. Tenha em mente que eu ligo os cursos por causa da sua qualidade e não por causa da Comissão que eu recebo de suas compras.

usamos pandas para ler o conjunto de dados e pré-processá-lo. Telco dataset tem um cliente por linha com muitas colunas (características). Não existem quaisquer linhas com todos os valores em falta ou duplicados (isto raramente acontece com conjuntos de dados do mundo real). Há 11 amostras que têm custos totais definidos para””, o que parece um erro nos dados. Nós removemos essas amostras e ajustamos o tipo para numérico (float).

df = pd.read_csv('data/WA_Fn-UseC_-Telco-Customer-Churn.csv')df = df.dropna(how=”all”) # remove samples with all missing values
df = df # remove duplicatestotal_charges_filter = df.TotalCharges == " "
df = df
df.TotalCharges = pd.to_numeric(df.TotalCharges)

Primeiras amostras na Telco, a Rotatividade de Clientes conjunto de dados

Análise Exploratória de Dados

temos 2 tipos de recursos no conjunto de dados: categóricas (dois ou mais valores, e sem qualquer ordem) e de forma numérica. A maioria dos nomes dos recursos são auto-explicativos, exceto para:

  • parceiro: se o cliente tem um parceiro ou não (Sim, Não),
  • dependentes: se o cliente tem dependentes ou não (Sim, Não),
  • OnlineBackup: Se o cliente tem um backup on-line ou não (Sim, não, Não, de serviço de internet),
  • posse: número de meses em que o cliente tiver permanecido com a empresa,
  • MonthlyCharges: o valor cobrado para o cliente mensal,
  • TotalCharges: o valor total cobrado ao cliente.

existem 7032 clientes no conjunto de dados e 19 Características Sem customerID (não informativo) e Coluna de Churn (variável alvo). A maioria das características categóricas tem 4 ou menos valores únicos.

conjunto de dados Resumo

Podemos combinar recursos em duas listas, de modo que possamos analisá-las conjuntamente.

características numéricas distribuição

técnicas de síntese numérica (média, desvio-padrão, etc.) não nos mostre espigões, formas de distribuições e é difícil observar anómalos com ele. É por isso que usamos histogramas.

df.describe()

Resumo das características numéricas

À primeira vista, não há qualquer outliers nos dados. Nenhum ponto de dados é desconectado da distribuição ou muito longe do valor médio. Para confirmar que precisaríamos calcular o intervalo interquartil (IQR) e mostrar que os valores de cada característica numérica estão dentro do 1,5 IQR do primeiro e terceiro quartil.

Podemos Converter características numéricas para intervalos ordinais. Por exemplo, a posse é numérica, mas muitas vezes não nos importamos com pequenas diferenças numéricas e, em vez disso, a posse em grupo para clientes com curto, médio e longo prazo. Uma razão para convertê-lo seria para reduzir o ruído, muitas vezes pequenas flutuações são apenas ruído.

df.hist(bins=30, figsize=(10, 7))

Histogramas das características numéricas

Nós olhamos para a distribuição de características numéricas em relação à variável-alvo. Podemos observar que quanto maiores forem os custos totais e o tempo de permanência, menor será a probabilidade de churn.

fig, ax = plt.subplots(1, 3, figsize=(14, 4))
df.hist(bins=30, color="blue", alpha=0.5, ax=ax)
df.hist(bins=30, color="red", alpha=0.5, ax=ax)

características Numéricas em relação à variável-alvo

Categórica recurso de distribuição

Para analisar categórica recursos, utilizamos gráficos de barras. Observamos que os idosos e os clientes sem serviço telefônico estão menos representados nos dados.

ROWS, COLS = 4, 4
fig, ax = plt.subplots(ROWS, COLS, figsize=(18, 18))
row, col = 0, 0
for i, categorical_feature in enumerate(categorical_features):
if col == COLS - 1:
row += 1
col = i % COLS
df.value_counts().plot('bar', ax=ax).set_title(categorical_feature)

Distribuição categórica características

O próximo passo é olhar para categórica recursos em relação à variável-alvo. Nós fazemos isso apenas para o recurso de contrato. Os usuários que têm um contrato de mês para mês são mais propensos a churn do que os usuários com contratos de longo prazo.

feature = ‘Contract’
fig, ax = plt.subplots(1, 2, figsize=(14, 4))
df.value_counts().plot(‘bar’, ax=ax).set_title(‘not churned’)
df.value_counts().plot(‘bar’, ax=ax).set_title(‘churned’)

Contrato de recurso em relação à variável-alvo

variável Alvo de distribuição

variável Alvo de distribuição mostra que estamos lidando com um desequilibrado problema, pois há muitos mais não batido como batido usuários. O modelo alcançaria alta precisão, uma vez que predizeria a maioria dos usuários de classe que não produziam churn em nosso exemplo.

poucas coisas podemos fazer para minimizar a influência do conjunto de dados desequilibrado:
-resample data (desequilibrado – aprender),
– coletar mais amostras,
– Usar precisão e recall como métricas de precisão.

df.value_counts().plot('bar').set_title('churned')

variável Alvo de distribuição

Características

Telco conjunto de dados já está agrupados por customerID por isso, é difícil adicionar novas funcionalidades. Ao trabalhar na predição do churn geralmente recebemos um conjunto de dados que tem uma entrada por sessão do cliente (atividade do cliente em um determinado tempo). Então, nós poderíamos adicionar recursos como:

  • número de sessões antes de comprar algo,
  • tempo médio por sessão
  • diferença de tempo entre as sessões (freqüente ou menos freqüentes do cliente),
  • é um cliente apenas em um país.

por vezes até temos dados de eventos do cliente, o que nos permite encontrar padrões de comportamento do cliente em relação ao resultado (churn).

características de codificação

para preparar o conjunto de dados para modelagem de churn, precisamos codificar características categóricas para números. Isto significa codificação “sim”, ” não ” para 0 e 1 para que o algoritmo possa trabalhar com os dados. Este processo é chamado de codificação onehot.

Um quente codificado categórica características

Classificador

Nós usamos sklearn, um Aprendizado de Máquina biblioteca em Python para criar um classificador.a maneira sklearn é usar pipelines que definem o processamento de recursos e o classificador. No nosso exemplo, o gasoduto toma um conjunto de dados na entrada, pré-processa recursos e treina o classificador.quando treinado, ele leva a mesma entrada e retorna previsões na saída.

no pipeline, processamos separadamente características categóricas e numéricas. Nós unehot codificamos características categóricas e escalamos características numéricas, removendo a média e escalando-as para variância de unidade.
Nós escolhemos um modelo de árvore de decisão por causa de sua interpretação e definir a profundidade máxima para 3 (arbitrariamente).

pipeline leva um conjunto de dados de entrada, ele preprocesses recursos e treina o classificador

a Formação do modelo

Podemos dividir o conjunto de dados para treinar (75% amostras) e de teste (25% de amostras).
treinamos (fit) o gasoduto e fazemos previsões. Com classification_report calculamos precisão e recall com valores reais e previstos.

from sklearn.model_selection import train_test_splitdf_train, df_test = train_test_split(df, test_size=0.25, random_state=42)pipeline.fit(df_train, df_train)
pred = pipeline.predict(df_test)

testando o modelo

com classification_report calculamos a precisão e a recolha com valores reais e previstos.

para a classe 1 (utilizadores churned), o modelo alcança uma precisão de 0,67 e uma recolha de 0,37. A precisão diz – nos quantos utilizadores agitados o nosso classificador previu correctamente. Do outro lado, lembre-se de nos dizer quantos usuários churned ele perdeu.

em termos leigos, o classificador não é muito preciso para usuários churned.

from sklearn.metrics import classification_reportprint(classification_report(df_test, pred))

relatório de Classificação para o modelo de Árvore de Decisão

Modelo de interpretabilidade

modelo de Árvore de Decisão utiliza Contrato, MonthlyCharges, InternetService, TotalCharges, e a posse de recursos para tomar uma decisão se um cliente vai churn ou não. Estas características distinguem os clientes churned de outros bem com base nos critérios de divisão na árvore de decisão.cada amostra de cliente atravessa a árvore e o nó final dá a previsão. por exemplo, se Contract_Month-to-month for:

  • igual a 0, continue a percorrer a árvore com verdadeiro ramo,
  • igual a 1, continue a percorrer a árvore com falso ramo,
  • Não definido, ele sai da classe 0.

esta é uma grande abordagem para ver como o modelo está tomando uma decisão ou se quaisquer características sorrateiramente em nosso modelo que não deveria estar lá.

Interpretação do modelo de árvore de Decisão

ler Mais

  1. Tratamento de classe desequilíbrio na rotatividade de clientes de previsão — como podemos lidar melhor com a classe de desequilíbrio na rotatividade de previsão.
  2. A Survey on Customer Churn Prediction using Machine Learning Techniques — – This paper reviews the most popular machine learning algorithms used by researchers for churn predicting.Telco customer churn on Kaggle-Churn analysis on Kaggle.
  3. wtte-RNN-Hackless-churn-modeling — Event based churn prediction.

Antes de você ir

Siga-me no Twitter, onde eu tweet regularmente sobre ciência de dados e aprendizagem de máquinas.

Foto por Courtney Hedger no Unsplash

Deixe uma resposta

O seu endereço de email não será publicado.