Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

09 Desafío: hora de la práctica

  1. La separación de los datos entre conjunto de entrenamiento y prueba es esencial para comprender si un modelo está logrando aprender los patrones y generalizar a nuevos datos. En esta tarea, realiza la división de la base de datos entre entrenamiento y prueba de forma estratificada.

  2. Un modelo base es muy importante para definir un criterio de comparación para modelos más complejos. En esta etapa, crea un modelo base con el DummyClassifier y encuentra la tasa de acierto con el método score.

  3. El árbol de decisión es un algoritmo que realiza las clasificaciones a partir de decisiones simples tomadas a partir de los datos. Debemos tener cierto cuidado de no utilizar una profundidad muy grande, porque esto puede provocar un sobreajuste del modelo a los datos de entrenamiento. En este desafío, crea un modelo de árbol de decisión con el parámetro max_depth=4, evalúa el desempeño del modelo en los datos de prueba y visualiza las decisiones del árbol usando el método plot_tree.

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn.dummy import DummyClassifier
from sklearn.tree import DecisionTreeClassifier, plot_tree

df = pd.read_csv('/content/churn.csv')
if 'id_cliente' in df.columns:
    df = df.drop(columns=['id_cliente'])

X = df.drop(columns=['churn'])
y = df['churn']

# Transformación de variables categóricas explicativas
cat_cols = ['pais', 'sexo_biologico']
ohe = OneHotEncoder(drop='if_binary', sparse_output=False)
X_cat = ohe.fit_transform(X[cat_cols])
X_cat_df = pd.DataFrame(X_cat, columns=ohe.get_feature_names_out(cat_cols))
X_final = pd.concat([X.drop(columns=cat_cols).reset_index(drop=True), X_cat_df], axis=1)

# Transformación de variable objetivo
le = LabelEncoder()
y_final = le.fit_transform(y)

# División Estratificada
# Usamos stratify=y_final para mantener la proporción de Churn en ambos conjuntos
X_train, X_test, y_train, y_test = train_test_split(
    X_final, y_final, test_size=0.25, random_state=42, stratify=y_final
)

# Modelo Dummy (Base)
dummy = DummyClassifier(strategy='most_frequent')
dummy.fit(X_train, y_train)
dummy_score = dummy.score(X_test, y_test)

# Árbol de Decisión
# Limitamos la profundidad a 4 para evitar el sobreajuste (overfitting)
dt = DecisionTreeClassifier(max_depth=4, random_state=42)
dt.fit(X_train, y_train)
dt_score = dt.score(X_test, y_test)

# RESULTADOS
print(f"Exactitud del Modelo Dummy: {dummy_score:.4f}")
print(f"Exactitud del Árbol de Decisión: {dt_score:.4f}")

# Visualización del Árbol
plt.figure(figsize=(20, 10))
plot_tree(dt, 
          feature_names=X_final.columns.tolist(), 
          class_names=['No Churn', 'Churn'], 
          filled=True, 
          rounded=True, 
          fontsize=10)
plt.title("Visualización del Árbol de Decisión (max_depth=4)")
plt.show()

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

¡Hola César, espero que estés bien!

Parece que estás siguiendo bien las instrucciones del desafío. Vamos a revisar cada uno de los pasos para asegurarnos de que todo esté correcto:

  1. División Estratificada: Estás utilizando train_test_split con stratify=y_final, lo cual es correcto para mantener la proporción de clases en ambos conjuntos de entrenamiento y prueba.

  2. Modelo Base con DummyClassifier: Has creado un DummyClassifier con la estrategia most_frequent, que es una buena elección para establecer una línea base. También calculaste correctamente la tasa de acierto con el método score.

  3. Árbol de Decisión: Creaste un DecisionTreeClassifier con max_depth=4, lo cual ayuda a prevenir el sobreajuste. Evaluaste el desempeño del modelo en el conjunto de prueba y visualizaste el árbol de decisiones con plot_tree, lo cual es excelente para entender cómo el modelo toma decisiones.

Los resultados impresos muestran las tasas de acierto de ambos modelos, lo cual te permite comparar la efectividad del árbol de decisión frente al modelo base.

Si tienes alguna pregunta específica sobre los resultados o algún paso en particular, no dudes en preguntar. ¡Espero que esta explicación te haya sido útil y que continúes disfrutando del aprendizaje!

Espero haber ayudado y buenos estudios!