1
resposta

[Projeto] 10 Desafio: hora da prática O tema da base de dados é a de churn de clientes. O churn é uma métrica que indica os clientes que cancelam o serviço em determinado período de tempo.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import pickle
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, LabelEncoder, MinMaxScaler
from sklearn.dummy import DummyClassifier
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.neighbors import KNeighborsClassifier

--- AULA 1: OBTENÇÃO E EXPLORAÇÃO ---

1. Leitura e Limpeza

df = pd.read_csv('churn.csv')
print(f"Dados Nulos:\n{df.isnull().sum()}")
df = df.drop(columns=['id_cliente']) # Removendo informação única

2 e 3. Análise Visual (Exemplo de estrutura)

(Omitido gráficos para focar no processamento, mas disponíveis no notebook)

--- AULA 2: PRÉ-PROCESSAMENTO ---

1. Separação X e y[cite: 12]

X = df.drop('churn', axis=1)
y = df['churn']

2. Transformação de Variáveis Categóricas (OneHotEncoder)[cite: 12]

colunas_categoricas = ['pais', 'sexo_biologico', 'tem_cartao_credito', 'membro_ativo']
onehot = OneHotEncoder(drop='if_binary', sparse_output=False)
X_encoded = onehot.fit_transform(X[colunas_categoricas])
X_encoded_df = pd.DataFrame(X_encoded, columns=onehot.get_feature_names_out(colunas_categoricas))

Recombinando com colunas numéricas

colunas_numericas = ['score_credito', 'idade', 'anos_de_cliente', 'saldo', 'servicos_adquiridos', 'salario_estimado']
X_final = pd.concat([X[colunas_numericas].reset_index(drop=True), X_encoded_df], axis=1)

3. Transformação da Variável Alvo (LabelEncoder)[cite: 12]

label_enc = LabelEncoder()
y_final = label_enc.fit_transform(y)

--- AULA 3: MODELAGEM ---

1. Divisão Estratificada[cite: 12]

X_train, X_test, y_train, y_test = train_test_split(X_final, y_final, test_size=0.3, stratify=y_final, random_state=42)

2. Modelo de Base (Dummy)[cite: 12]

dummy = DummyClassifier(strategy='most_frequent')
dummy.fit(X_train, y_train)
print(f"Acurácia Dummy: {dummy.score(X_test, y_test):.4f}")

3. Árvore de Decisão[cite: 12]

arvore = DecisionTreeClassifier(max_depth=4, random_state=42)
arvore.fit(X_train, y_train)
print(f"Acurácia Árvore: {arvore.score(X_test, y_test):.4f}")

--- AULA 4: NORMALIZAÇÃO E KNN ---

1. Normalização[cite: 12]

scaler = MinMaxScaler()
X_train_norm = scaler.fit_transform(X_train)
X_test_norm = scaler.transform(X_test)

2. KNN[cite: 12]

knn = KNeighborsClassifier()
knn.fit(X_train_norm, y_train)
print(f"Acurácia KNN: {knn.score(X_test_norm, y_test):.4f}")

3. Salvando o melhor modelo (Exemplo: Árvore)[cite: 12]

with open('modelo_churn.pkl', 'wb') as f:
pickle.dump(arvore, f)

1 resposta

Oi, Moacir! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Ficicou bem estruturado o seu fluxo de Machine Learning, desde a limpeza dos dados, passando pelo pré-processamento com OneHotEncoder e LabelEncoder, até a comparação entre modelos como Dummy, Árvore de Decisão e KNN.

Uma dica interessante para o futuro é avaliar seus modelos com mais métricas além da acuracia, como classification_report, que ajuda a entender melhor o desempenho em problemas de churn (onde as classes podem estar desbalanceadas):


from sklearn.metrics import classification_report

y_pred = arvore.predict(X_test)
print(classification_report(y_test, y_pred))

Esse codigo mostra metricas como precisao, recall e f1-score, ajudando a analisar melhor como o modelo esta performando para cada classe.

Conteúdo relacionado:

O link está em inglês, mas você poderá utilizar a tradução automática do navegador

Seguindo nessa linha, qual parte do processo de Machine Learning voce achou mais desafiadora ate agora? Compartilhe aqui!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!