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)