Modelo predictivo para la selección de medicamentos anti hipertensivos

Barcelona 2019

Científico de datos: Dr Juan Ignacio barrios Arce.

En este primer bloque vamos a importar todas las librerías que necesitamos para procesar nuestros datos. Destacan la librería "pandas" para de análisis de datos, sklearn para el modelo de regresión y las librerías de diagramación o ploteo

El paso siguiente es importar el set de datos en este caso un archivo tipo .csv . Este set de datos será nuestro dataframe que luego con el comando dataframe.head() nos presentará un primer bloque con 5 casos.

Ahora necesitamos conocer el tipo de atributos que tenemos. En este caso hay tres atributos tipo int (numéricos ) y 4 atributos tipo Objeto. El comando dataframe.dtypes nos muestra todos los atributos con su tipo.

En esta primera vista de los datos, vemos que NO hay campos tipo Object. Esto es porque a la hora de incluir los datos no dejaron espacios. Estos espacios los tenemos que convertir a valores cero y luego convertir el atributo a tipo numerico "o sea tipo int" para poder operar con ellos. Por último el comando dataframe.describe() nos muestra los estadísticos descriptivos de todos los atributos.

No hay que transformar ningun dato , se adjuntan ejemplos en caso necesario de que los hubiesen

El paso siguiente es describir la variable que sera nuestra "etiqueta" o variable predictiva.

En este caso definimos que la variable "Medicamento" será la variable predictiva . El comando dataframe.groupby agrupará las diferentes "clases" de esta variable.

Nuestra variable de salida es el tipo de medicamento que la persona esta tomando , hay cinco posibilidades

(1) enalapril 20

(2) enalapril 20 + hidroclorotizida

(3) amlodipidina 5 mg

(4) ibersartan 150

(5) Ibersaratan 150 + hidroclorotiazida

En esta distribución de pacientes es usual que se presente un desbalance entre las llamadas "clases", el cual no es recomendable y debemos utilizar algún método para RE-balancearlas. Si hubiese alguna desproporción de una clase con respecto a las otra, debemos recordarlo para incluirlo en el modelo mas adelante

Acá sacamos del juego la variable de salida con el comando dataframe.drop

Tambien se pueden hacer otro tipos de gráficos que favorezcan el análisis. En este próximo conjunto de gráficos se realiza un cruce de las variables, "todas contra todas". Nótese que cuando se cruza una variable contra si misma, se produce un pico. El comando utilizado es sb.pairplot(dataframe.dropna(),)

En todo análisis donde se utiliza aprendizaje automático es recomendable comparar el modelo utilizando al menos dos algoritmos.

Tratándose de que estamos usando algoritmos de clasificación usaremos primero el algoritmo de Regresión Logística.

Regresión logística:

En primer término vamos a decirle al algoritmo de RL que nuestra variable predictiva es "Salida", o sea el tipo de antihipertensivo que la persona está tomando. El sistema nos muestra el total de la muestra con los atributos o variables (sin considerar la variable predictiva)

Ahora aplicamos el modelo. Si hubiese desbalance de clases, acá debemos considerarlo y decir que el peso entre clases es de: 1:X

Con el comando model.score obtenemos el Indice de predicción de nuestro modelo. En este caso el modelo tiene un 0.26426 de capacidad predictiva lo que lo hace ser un MAL MODELO. Un buen modelo estaría por arriba del 0.8

La matriz de confusión, es la matriz que identifica los valores predictivos para cada clase y a partir de los valores observados de esta matriz se obtienen los falsos negativos y los falsos positivos.

Los valores de precisión (precision) y exactitud (accuracy) y la sensibilidad ( Recall) se presentan en el siguiente cuadro de clasificación

Opción 2 Algoritmo de Arboles Decisorios

Para este algoritmo es necesario importar alguna librerías adicionales

De igual forma que como hicimos en el algoritmo anterior aca excluiremos la variable predictiva con el comando dataframe.drop

En este tipo de algoritmo conviene conocer de previo la profundidad idónea del arbol

Ahora calculamos la precisión del modelo. logré este valor haciendo overfitting , coloqué en el árbol los mínimos de división y de hojas por rama en 2 y 2 , con 42 niveles de profundidad.

Acá la matriz de confusión, que indica para cada una de las clases que tan bueno es el algoritmo prediciendo

Para concluir presentamos el modelo predictivo propiamente

En este caso se pueden colocar directamente las valores : Por ejemplo paciente de 50 años, masculino, blanco, no obeso , no diabético, sin dislipidemias, con historia famiiar de Hipertensión, con tabaquismo, No alcohólico, con presión inicial de 150/100, y presión actual 130/90, sin IM, y con cambios en el ECG

Se colocan los códigos en la matriz de acuerdo al orden del Indice