Árbol de decisión
ÁRBOL DE DECISIÓN (Aprendizaje supervisado)
Los árboles de decisión son un algoritmo de aprendizaje automático que se utiliza en la ciencia de datos para procesar grandes volúmenes datos y solventar problemas.
Un diagrama de árbol de decisiones te permite evaluar mediante una representación gráfica los posibles resultados, costos y consecuencias de una decisión compleja. Este método es muy útil para analizar datos cuantitativos y tomar una decisión basada en números
EJEMPLO
# Importar las bibliotecas necesarias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from sklearn.tree import export_text
# Crear un conjunto de datos de ejemplo
data = {
'Años_Experiencia': np.random.randint(1, 20, 100),
'Nivel_Educativo': np.random.randint(10, 20, 100),
'Edad': np.random.randint(20, 60, 100),
'Abandono': np.random.choice([0, 1], size=100)
}
df = pd.DataFrame(data)
# Dividir los datos en conjuntos de entrenamiento y prueba
X = df[['Años_Experiencia', 'Nivel_Educativo', 'Edad']]
y = df['Abandono']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Crear un modelo de árbol de decisión
modelo_arbol = DecisionTreeClassifier()
# Entrenar el modelo con los datos de entrenamiento
modelo_arbol.fit(X_train, y_train)
# Realizar predicciones en el conjunto de prueba
predicciones = modelo_arbol.predict(X_test)
# Evaluar el rendimiento del modelo
accuracy = accuracy_score(y_test, predicciones)
conf_matrix = confusion_matrix(y_test, predicciones)
class_report = classification_report(y_test, predicciones)
print(f'Accuracy: {accuracy}')
print(f'Confusion Matrix:\n{conf_matrix}')
print(f'Classification Report:\n{class_report}')
# Visualizar el árbol de decisión (opcional)
tree_rules = export_text(modelo_arbol, feature_names=list(X.columns))
print(f'\nÁrbol de Decisión:\n{tree_rules}')
# Visualizar los resultados
plt.scatter(X_test['Años_Experiencia'], y_test, color='black', label='Actual')
plt.scatter(X_test['Años_Experiencia'], predicciones, color='red', label='Predicción')
plt.title('Predicción de Abandono con Árbol de Decisión')
plt.xlabel('Años de Experiencia')
plt.ylabel('Abandono (0: No, 1: Sí)')
plt.legend()
plt.show()
Árbol de Decisión:
|--- Edad <= 57.50
| |--- Años_Experiencia <= 3.50
| | |--- Edad <= 40.00
| | | |--- class: 1
| | |--- Edad > 40.00
| | | |--- Edad <= 50.50
| | | | |--- class: 0
| | | |--- Edad > 50.50
| | | | |--- class: 1
| |--- Años_Experiencia > 3.50
| | |--- Años_Experiencia <= 4.50
| | | |--- class: 0
| | |--- Años_Experiencia > 4.50
| | | |--- Nivel_Educativo <= 14.50
| | | | |--- Años_Experiencia <= 6.00
| | | | | |--- class: 1
| | | | |--- Años_Experiencia > 6.00
| | | | | |--- Edad <= 26.50
| | | | | | |--- class: 0
| | | | | |--- Edad > 26.50
| | | | | | |--- Edad <= 30.50
| | | | | | | |--- class: 1
| | | | | | |--- Edad > 30.50
| | | | | | | |--- Edad <= 47.00
| | | | | | | | |--- Nivel_Educativo <= 10.50
| | | | | | | | | |--- Edad <= 36.50
| | | | | | | | | | |--- class: 1
| | | | | | | | | |--- Edad > 36.50
| | | | | | | | | | |--- Años_Experiencia <= 10.50
| | | | | | | | | | | |--- class: 0
| | | | | | | | | | |--- Años_Experiencia > 10.50
| | | | | | | | | | | |--- truncated branch of depth 2
| | | | | | | | |--- Nivel_Educativo > 10.50
| | | | | | | | | |--- Nivel_Educativo <= 12.50
| | | | | | | | | | |--- class: 0
| | | | | | | | | |--- Nivel_Educativo > 12.50
| | | | | | | | | | |--- Edad <= 40.00
| | | | | | | | | | | |--- class: 1
| | | | | | | | | | |--- Edad > 40.00
| | | | | | | | | | | |--- class: 0
| | | | | | | |--- Edad > 47.00
| | | | | | | | |--- Nivel_Educativo <= 13.50
| | | | | | | | | |--- class: 1
| | | | | | | | |--- Nivel_Educativo > 13.50
| | | | | | | | | |--- class: 0
| | | |--- Nivel_Educativo > 14.50
| | | | |--- Edad <= 47.00
| | | | | |--- Edad <= 31.50
| | | | | | |--- Edad <= 22.50
| | | | | | | |--- class: 1
| | | | | | |--- Edad > 22.50
| | | | | | | |--- Años_Experiencia <= 11.50
| | | | | | | | |--- Edad <= 26.50
| | | | | | | | | |--- class: 0
| | | | | | | | |--- Edad > 26.50
| | | | | | | | | |--- Edad <= 30.50
| | | | | | | | | | |--- class: 1
| | | | | | | | | |--- Edad > 30.50
| | | | | | | | | | |--- class: 0
| | | | | | | |--- Años_Experiencia > 11.50
| | | | | | | | |--- class: 0
| | | | | |--- Edad > 31.50
| | | | | | |--- Años_Experiencia <= 6.50
| | | | | | | |--- class: 0
| | | | | | |--- Años_Experiencia > 6.50
| | | | | | | |--- Años_Experiencia <= 9.50
| | | | | | | | |--- Edad <= 37.00
| | | | | | | | | |--- class: 0
| | | | | | | | |--- Edad > 37.00
| | | | | | | | | |--- Edad <= 45.50
| | | | | | | | | | |--- class: 1
| | | | | | | | | |--- Edad > 45.50
| | | | | | | | | | |--- Nivel_Educativo <= 17.50
| | | | | | | | | | | |--- class: 0
| | | | | | | | | | |--- Nivel_Educativo > 17.50
| | | | | | | | | | | |--- class: 1
| | | | | | | |--- Años_Experiencia > 9.50
| | | | | | | | |--- class: 1
| | | | |--- Edad > 47.00
| | | | | |--- Nivel_Educativo <= 18.50
| | | | | | |--- Años_Experiencia <= 15.00
| | | | | | | |--- Años_Experiencia <= 10.00
| | | | | | | | |--- class: 0
| | | | | | | |--- Años_Experiencia > 10.00
| | | | | | | | |--- Años_Experiencia <= 13.50
| | | | | | | | | |--- class: 1
| | | | | | | | |--- Años_Experiencia > 13.50
| | | | | | | | | |--- class: 0
| | | | | | |--- Años_Experiencia > 15.00
| | | | | | | |--- class: 1
| | | | | |--- Nivel_Educativo > 18.50
| | | | | | |--- class: 0
|--- Edad > 57.50
| |--- class: 1
Este código utiliza un Árbol de Decisión para predecir la probabilidad de abandono (1) o no abandono (0) de empleados en función de características como años de experiencia, nivel educativo y edad. La visualización compara las etiquetas reales con las predicciones. Ten en cuenta que este es un ejemplo básico y, en la práctica, se deben considerar conjuntos de datos más grandes y funciones más relevantes. Además, la visualización del árbol de decisión es opcional y puede no ser práctica para conjuntos de datos más grandes.
Comentarios
Publicar un comentario