Regresión logística usando Statsmodels

Requisito previo: comprensión de
la regresión logística La regresión logística es el tipo de análisis de regresión que se utiliza para encontrar la probabilidad de que ocurra un determinado evento. Es el tipo de regresión más adecuado para los casos en los que tenemos una variable dependiente categórica que solo puede tomar valores discretos. 

Machine-Learning-Course

El conjunto de datos: 
en este artículo, predeciremos si un estudiante será admitido en una universidad en particular, en función de sus puntajes de gmat, gpa y experiencia laboral. La variable dependiente aquí es una variable logística binaria , que se espera que tome estrictamente una de dos formas, es decir, admitida o no admitida

Construcción del modelo de regresión logística:

Statsmodels es un módulo de Python que proporciona varias funciones para estimar diferentes modelos estadísticos y realizar pruebas estadísticas.  

  • Primero, definimos el conjunto de variables dependientes ( y ) e independientes ( X ). Si la variable dependiente está en formato no numérico, primero se convierte a numérico utilizando dummies. El archivo utilizado en el ejemplo para entrenar el modelo se puede descargar aquí .
  • Statsmodels proporciona una función Logit() para realizar una regresión logística. La función Logit() acepta y y X como parámetros y devuelve el objeto Logit . Luego se ajusta el modelo a los datos.

Python3

# importing libraries
import statsmodels.api as sm
import pandas as pd 
  
# loading the training dataset 
df = pd.read_csv('logit_train1.csv', index_col = 0)
  
# defining the dependent and independent variables
Xtrain = df[['gmat', 'gpa', 'work_experience']]
ytrain = df[['admitted']]
   
# building the model and fitting the data
log_reg = sm.Logit(ytrain, Xtrain).fit()

Producción : 

Optimization terminated successfully.
         Current function value: 0.352707
         Iterations 8

En el resultado, ‘ Iteraciones ‘ se refiere a la cantidad de veces que el modelo itera sobre los datos, tratando de optimizar el modelo. De forma predeterminada, el número máximo de iteraciones realizadas es 35, después de lo cual falla la optimización.

La tabla resumen:

La siguiente tabla de resumen nos brinda un resumen descriptivo sobre los resultados de la regresión.  

Python3

# printing the summary table
print(log_reg.summary())

Producción : 

                           Logit Regression Results                           
==============================================================================
Dep. Variable:               admitted   No. Observations:                   30
Model:                          Logit   Df Residuals:                       27
Method:                           MLE   Df Model:                            2
Date:                Wed, 15 Jul 2020   Pseudo R-squ.:                  0.4912
Time:                        16:09:17   Log-Likelihood:                -10.581
converged:                       True   LL-Null:                       -20.794
Covariance Type:            nonrobust   LLR p-value:                 3.668e-05
===================================================================================
                      coef    std err          z      P>|z|      [0.025      0.975]
-----------------------------------------------------------------------------------
gmat               -0.0262      0.011     -2.383      0.017      -0.048      -0.005
gpa                 3.9422      1.964      2.007      0.045       0.092       7.792
work_experience     1.1983      0.482      2.487      0.013       0.254       2.143
===================================================================================

Explicación de algunos de los términos de la tabla resumen:

  • coef : los coeficientes de las variables independientes en la ecuación de regresión.
  • Log-Verosimilitud: el logaritmo natural de la función Estimación de máxima verosimilitud (MLE). MLE es el proceso de optimización de encontrar el conjunto de parámetros que dan como resultado el mejor ajuste.
  • LL-Null: el valor de log-verosimilitud del modelo cuando no se incluye ninguna variable independiente (solo se incluye una intersección).
  • Pseudo R-squ. : un sustituto del valor R-cuadrado en la regresión lineal de mínimos cuadrados. Es la relación entre la verosimilitud logarítmica del modelo nulo y la del modelo completo.

Predicción sobre nuevos datos:

Ahora probaremos nuestro modelo con nuevos datos de prueba. Los datos de prueba se cargan desde este archivo csv.
La función predict() es útil para realizar predicciones. Las predicciones obtenidas son valores fraccionarios (entre 0 y 1) que denotan la probabilidad de ser admitido. Por lo tanto, estos valores se redondean para obtener los valores discretos de 1 o 0. 

Python3

# loading the testing dataset  
df = pd.read_csv('logit_test1.csv', index_col = 0)
  
# defining the dependent and independent variables
Xtest = df[['gmat', 'gpa', 'work_experience']]
ytest = df['admitted']
  
# performing predictions on the test datdaset
yhat = log_reg.predict(Xtest)
prediction = list(map(round, yhat))
  
# comparing original and predicted values of y
print('Actual values', list(ytest.values))
print('Predictions :', prediction)

Producción : 

Optimization terminated successfully.
         Current function value: 0.352707
         Iterations 8
Actual values [0, 0, 0, 0, 0, 1, 1, 0, 1, 1]
Predictions : [0, 0, 0, 0, 0, 0, 0, 0, 1, 1]

Prueba de la precisión del modelo: 

Python3

from sklearn.metrics import (confusion_matrix, 
                           accuracy_score)
  
# confusion matrix
cm = confusion_matrix(ytest, prediction) 
print ("Confusion Matrix : \n", cm) 
  
# accuracy score of the model
print('Test accuracy = ', accuracy_score(ytest, prediction))

Producción : 

Confusion Matrix : 
 [[6 0]
 [2 2]]
Test accuracy =  0.8

Publicación traducida automáticamente

Artículo escrito por cosine1509 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *