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