Ejercicio: Clasificando clientes de un banco

Problema: Queremos predecir si un cliente de un banco va a solicitar un préstamo. Tenemos datos sobre la edad, el ingreso y el historial de crédito de los clientes.

Código Python

Ver en Colab ➜

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt

# Crear un conjunto de datos ficticio
data = {
    "edad": np.random.randint(20, 70, 100),  # Edades entre 20 y 70 años
    "ingreso": np.random.randint(20000, 100000, 100),  # Ingreso entre 20k y 100k
    "historial_credito": np.random.choice(["bueno", "regular", "malo"], 100),  # Historial crediticio
    "solicita_prestamo": np.random.choice([0, 1], 100, p=[0.6, 0.4])  # 0 = No solicita, 1 = Sí solicita
}

# Convertir los datos en un DataFrame
df = pd.DataFrame(data)

# Convertir la columna de historial_credito a valores numéricos
df["historial_credito"] = df["historial_credito"].map({"bueno": 2, "regular": 1, "malo": 0})

# Separar características (X) y etiquetas (y)
X = df[["edad", "ingreso", "historial_credito"]]
y = df["solicita_prestamo"]

# Dividir los datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Crear y entrenar el modelo de árbol de decisión
clf = DecisionTreeClassifier(criterion="entropy", max_depth=5, random_state=42)
clf.fit(X_train, y_train)

# Evaluar el modelo
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"Precisión del modelo: {accuracy * 100:.2f}%")

# Visualizar el árbol de decisión
plt.figure(figsize=(15, 10))
plot_tree(clf, feature_names=["edad", "ingreso", "historial_credito"], class_names=["No", "Sí"], filled=True)
plt.title("Árbol de Decisión para Clasificar Clientes")
plt.show()

# Hacer una predicción con nuevos datos
nueva_persona = np.array([[30, 50000, 2]])  # Edad: 30, Ingreso: 50k, Historial: Bueno (2)
prediccion = clf.predict(nueva_persona)
print(f"¿Solicitará un préstamo? {'Sí' if prediccion[0] == 1 else 'No'}")