domingo, 14 de enero de 2024

Aplicación Práctica: Regresión Logística (Aprendizaje Supervisado)

 

Definicion.-  La regresión logística es un método estadístico utilizado para modelar la probabilidad de que una variable dependiente binaria (dicotómica) tenga un valor particular (por lo general, 0 o 1) en función de una o más variables independientes. Aunque su nombre incluye la palabra "regresión", la regresión logística se utiliza comúnmente para problemas de clasificación binaria en lugar de predicciones continuas.

La regresión logística es una herramienta poderosa para problemas de clasificación binaria y se utiliza en una variedad de campos para tomar decisiones basadas en la probabilidad de ocurrencia de un evento.

 Implementacion de un caso de estudio

 Se realiza una descripción paso a paso de cómo funciona y dónde se utiliza la regresión logística:

 1. Definición del Problema:

La regresión logística se aplica cuando se quiere predecir la probabilidad de que una variable dependiente binaria tenga un valor específico.

2. Recopilación de Datos:

Se recopilan datos que contienen información sobre la variable dependiente binaria y una o más variables independientes.

3. Exploración de Datos:

Se realiza un análisis exploratorio de los datos para comprender la relación entre las variables y para identificar posibles patrones.

4. Preprocesamiento de Datos:

Se realizan tareas como el manejo de valores atípicos, la imputación de datos faltantes y la normalización de variables para preparar los datos para el modelo.

5. División de Datos:

Los datos se dividen en conjuntos de entrenamiento y prueba para evaluar la capacidad del modelo para generalizar a nuevos datos.

6. Construcción del Modelo:

Se ajusta un modelo de regresión logística utilizando el conjunto de entrenamiento, donde se estima la relación entre las variables independientes y la probabilidad logarítmica de que la variable dependiente sea igual a 1.

7. Entrenamiento del Modelo:

El modelo se entrena utilizando técnicas de optimización, como el descenso de gradiente, para ajustar los parámetros y minimizar la función de pérdida.

8. Evaluación del Modelo:

Se evalúa el rendimiento del modelo utilizando el conjunto de prueba, utilizando métricas como la precisión, la sensibilidad y la especificidad.

9. Interpretación de Coeficientes:

Los coeficientes del modelo se interpretan para entender la influencia de cada variable independiente en la probabilidad de que la variable dependiente sea 1.

10. Aplicaciones de la Regresión Logística:

La regresión logística se utiliza en diversas áreas, como:

Predicción de riesgos crediticios.

Diagnóstico médico (por ejemplo, predicción de enfermedades).

Marketing (para prever la probabilidad de compra).

Análisis de sentiment en análisis de texto.

Modelado de respuesta binaria en encuestas.

11. Ajuste del Umbral:

Dependiendo de la aplicación, se puede ajustar el umbral de clasificación para equilibrar la sensibilidad y la especificidad del modelo.

12. Despliegue del Modelo:

Una vez satisfechos con el rendimiento del modelo, se puede implementar para hacer predicciones en nuevos datos.

  Ejemplo 1

 Crea una clasificación binaria con diagnostico medicos para predecir si un paciente tiene una enfermedad específica (1) o no (0) en función de las características médicas con datos ficticios creados, utilizando el codigo de python,  realiza una tabla y graficas. Para crear un modelo de clasificación binaria en Python con datos ficticios y predecir si un paciente tiene una enfermedad específica o no, podemos utilizar bibliotecas como numpy, pandas, sklearn y matplotlib. 

# Importar las bibliotecas necesarias
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns

# Configuración para reproducibilidad
np.random.seed(42)

# Crear datos ficticios
data = {
    'Edad': np.random.randint(18, 65, 100),
    'Presion_Sistolica': np.random.randint(90, 160, 100),
    'Presion_Diastolica': np.random.randint(60, 100, 100),
    'Colesterol': np.random.randint(120, 240, 100),
    'Nivel_Glucosa': np.random.randint(70, 150, 100),
    'Enfermedad': np.random.choice([0, 1], size=100)
}

# Crear un DataFrame
df = pd.DataFrame(data)

# Dividir el conjunto de datos en características (X) y etiquetas (y)
X = df.drop('Enfermedad', axis=1)
y = df['Enfermedad']

# Dividir el conjunto de datos en 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 regresión logística
model = LogisticRegression()
model.fit(X_train, y_train)

# Realizar predicciones en el conjunto de prueba
y_pred = model.predict(X_test)

# Evaluar el modelo
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

# Mostrar la matriz de confusión y el informe de clasificación
print("Matriz de Confusión:")
print(conf_matrix)
print("\nInforme de Clasificación:")
print(class_report)

# Visualizar la matriz de confusión con seaborn
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['No Enfermo', 'Enfermo'], yticklabels=['No Enfermo', 'Enfermo'])
plt.xlabel('Predicciones')
plt.ylabel('Valores Reales')
plt.title('Matriz de Confusión')
plt.show()



Ejemplo 2

En función al ejemplo 1 expandir el código para incluir más exploración de datos, preprocesamiento y evaluación del modelo. que muestren gráficos y tablas, agregar visualizaciones adicionales como la biblioteca seaborn para algunas de las visualizaciones y yellowbrick para visualizar la curva ROC. 

# Importar las bibliotecas necesarias
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report, roc_curve, roc_auc_score, precision_recall_curve, auc
from yellowbrick.classifier import ROCAUC, PrecisionRecallCurve
import matplotlib.pyplot as plt

# Configuración para reproducibilidad
np.random.seed(42)

# Crear datos ficticios
data = {
    'Edad': np.random.randint(18, 65, 100),
    'Presion_Sistolica': np.random.randint(90, 160, 100),
    'Presion_Diastolica': np.random.randint(60, 100, 100),
    'Colesterol': np.random.randint(120, 240, 100),
    'Nivel_Glucosa': np.random.randint(70, 150, 100),
    'Enfermedad': np.random.choice([0, 1], size=100)
}

# Crear un DataFrame
df = pd.DataFrame(data)

# Exploración de datos
sns.pairplot(df, hue='Enfermedad', diag_kind='kde')
plt.show()

# Dividir el conjunto de datos en características (X) y etiquetas (y)
X = df.drop('Enfermedad', axis=1)
y = df['Enfermedad']

# Dividir el conjunto de datos en 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 regresión logística
model = LogisticRegression()
model.fit(X_train, y_train)

# Visualizar la importancia de las características
coef_df = pd.DataFrame({'Feature': X.columns, 'Coefficient': model.coef_[0]})
coef_df = coef_df.sort_values(by='Coefficient', ascending=False)
sns.barplot(x='Coefficient', y='Feature', data=coef_df)
plt.title('Importancia de las Características')
plt.show()

# Realizar predicciones en el conjunto de prueba
y_pred = model.predict(X_test)

# Evaluar el modelo
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)

# Mostrar la matriz de confusión y el informe de clasificación
print("Matriz de Confusión:")
print(conf_matrix)
print("\nInforme de Clasificación:")
print(class_report)

# Visualizar la matriz de confusión con seaborn
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['No Enfermo', 'Enfermo'], yticklabels=['No Enfermo', 'Enfermo'])
plt.xlabel('Predicciones')
plt.ylabel('Valores Reales')
plt.title('Matriz de Confusión')
plt.show()

# Visualizar la curva ROC y el área bajo la curva (AUC)
visualizer = ROCAUC(model)
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.show()

# Visualizar la curva Precisión-Recuperación y el área bajo la curva (AUC)
visualizer = PrecisionRecallCurve(model)
visualizer.fit(X_train, y_train)
visualizer.score(X_test, y_test)
visualizer.show()

# Calcular y mostrar el AUC-ROC manualmente
y_probs = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_probs)
roc_auc = auc(fpr, tpr)

plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'AUC = {roc_auc:.2f}')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlabel('Tasa de Falsos Positivos')
plt.ylabel('Tasa de Verdaderos Positivos')
plt.title('Curva ROC')
plt.legend(loc='lower right')
plt.show()







 







No hay comentarios:

Publicar un comentario

Aplicación Práctica: Regresión Logística (Aprendizaje Supervisado)

  Definicion.-   La regresión logística es un método estadístico utilizado para modelar la probabilidad de que una variable dependiente bina...