Práctica 1

Desarrollado por Sara Pérez y Cristian Fernández

06 de Octubre de 2017

Aprendizaje automático, EPS, UAM (Madrid)

Introducción

La siguiente práctica muestra el estudio previo a una operación de machine learning de los datos relacionados. Para ello se aplican distíntas técnicas que intentan simplificar la tarea de aprendizaje, bien sea simplificando los datos o preprocesandolos.

Para ello, se ha desarrollado en Jupyter Notebook, una herramienta que permite la generación de resultados a través del lenguaje de programación python en un formato documento, que es el que se presenta.

Esta práctica emula la memoria de una auditoría cuyo cliente final es una empresa que nos ha encargado la realización de dicho estudio de datos.

Objetivo

El objetivo de este documento es el estudio, simplificación y preprocesamiento de un conjunto de datos de cara al uso de un algoritmo de machine learning.

Trabajo Desarrollado

En este apartado se describe el procesamiento realizado a los datos así como una breve explicación de los métodos aplicados.

Cargando librerias


In [2]:
#Libraries

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt# Read Dataset

%matplotlib inline

Obteniendo los datos del csv

Descripcion de las variables

Tenemos una base de datos médica con los resultados de análisis sanguineos de varios pacientes y una clasificación de su estado de salud, 1 para los enfermos y 2 para los sanos. En primer lugar tenemos los datos del paciente, su edad y su género. A continuación se nos dan los resultados del total de bilirrubina y bilirrubina directa, la bilirrubina es un pigmento amarillo que se encuentra en la bilis (liquido generado por el hígado), la bilirrubina total es la suma de la bilirrubina directa o conjugada y la bilirrubina indirecta.
Despues se proporciona los valores de la fosfatasa alcalina, que es una enzima que se desplaza a través de el sistema sanguíneo, pero que se acumula más que nada en el hígado, la bilis, riñones y el sistema intestinal, es útil para detectar enfermedades óseas o hepáticas.

Después están las transaminasas, la alaninoamino transferasa (ALT o GPT) y la aspartato aminotransferasa (AST o GOT), que son enzimas que se encuentran en el interior de las células de órganos como el hígado, el corazón, los riñones o los músculos, y desempeñan una importante función en el metabolismo. Cuando un análisis de sangre detecta niveles elevados de estas moléculas puede indicar que existe una lesión de las células hepáticas.

Las últimas tres variables son las proteinas totales, la albumina y el ratio de albumina y globulina. El examen de proteína total mide la cantidad total de dos clases de proteínas encontradas en la porción líquida de la sangre: albúmina y globulina.
La albúmina es una proteína plasmática cuya función más importante es el mantenimiento de la presión oncótica, es decir ayuda a impedir que se escape líquido fuera de los vasos sanguíneos, y la capacidad de transporte de hormonas, medicamentos,etc.
Las globulinas son útiles en la lucha contra las infecciones y mejorar el proceso de coagulación de la sangre. También sirven como portadora de la hormona y el transporte de las hormonas a diferentes partes del cuerpo.

Por los componentes analizados podemos concluir que es un perfil hepático para detectar problemas en el hígado.


In [3]:
#Path para linux
path = '../Recursos/indian_liver_patient.csv'

#Path para Windows
#path = '..\Recursos\indian_liver_patient.csv'
dataset = pd.read_csv('../Recursos/indian_liver_patient.csv',delimiter=',',header=0)
dataset


Out[3]:
Age Gender Total_Bilirubin Direct_Bilirubin Alkaline_Phosphotase Alamine_Aminotransferase Aspartate_Aminotransferase Total_Protiens Albumin Albumin_and_Globulin_Ratio Dataset
0 65 Female 0.7 0.1 187 16 18 6.8 3.3 0.90 1
1 62 Male 10.9 5.5 699 64 100 7.5 3.2 0.74 1
2 62 Male 7.3 4.1 490 60 68 7.0 3.3 0.89 1
3 58 Male 1.0 0.4 182 14 20 6.8 3.4 1.00 1
4 72 Male 3.9 2.0 195 27 59 7.3 2.4 0.40 1
5 46 Male 1.8 0.7 208 19 14 7.6 4.4 1.30 1
6 26 Female 0.9 0.2 154 16 12 7.0 3.5 1.00 1
7 29 Female 0.9 0.3 202 14 11 6.7 3.6 1.10 1
8 17 Male 0.9 0.3 202 22 19 7.4 4.1 1.20 2
9 55 Male 0.7 0.2 290 53 58 6.8 3.4 1.00 1
10 57 Male 0.6 0.1 210 51 59 5.9 2.7 0.80 1
11 72 Male 2.7 1.3 260 31 56 7.4 3.0 0.60 1
12 64 Male 0.9 0.3 310 61 58 7.0 3.4 0.90 2
13 74 Female 1.1 0.4 214 22 30 8.1 4.1 1.00 1
14 61 Male 0.7 0.2 145 53 41 5.8 2.7 0.87 1
15 25 Male 0.6 0.1 183 91 53 5.5 2.3 0.70 2
16 38 Male 1.8 0.8 342 168 441 7.6 4.4 1.30 1
17 33 Male 1.6 0.5 165 15 23 7.3 3.5 0.92 2
18 40 Female 0.9 0.3 293 232 245 6.8 3.1 0.80 1
19 40 Female 0.9 0.3 293 232 245 6.8 3.1 0.80 1
20 51 Male 2.2 1.0 610 17 28 7.3 2.6 0.55 1
21 51 Male 2.9 1.3 482 22 34 7.0 2.4 0.50 1
22 62 Male 6.8 3.0 542 116 66 6.4 3.1 0.90 1
23 40 Male 1.9 1.0 231 16 55 4.3 1.6 0.60 1
24 63 Male 0.9 0.2 194 52 45 6.0 3.9 1.85 2
25 34 Male 4.1 2.0 289 875 731 5.0 2.7 1.10 1
26 34 Male 4.1 2.0 289 875 731 5.0 2.7 1.10 1
27 34 Male 6.2 3.0 240 1680 850 7.2 4.0 1.20 1
28 20 Male 1.1 0.5 128 20 30 3.9 1.9 0.95 2
29 84 Female 0.7 0.2 188 13 21 6.0 3.2 1.10 2
... ... ... ... ... ... ... ... ... ... ... ...
553 46 Male 10.2 4.2 232 58 140 7.0 2.7 0.60 1
554 73 Male 1.8 0.9 220 20 43 6.5 3.0 0.80 1
555 55 Male 0.8 0.2 290 139 87 7.0 3.0 0.70 1
556 51 Male 0.7 0.1 180 25 27 6.1 3.1 1.00 1
557 51 Male 2.9 1.2 189 80 125 6.2 3.1 1.00 1
558 51 Male 4.0 2.5 275 382 330 7.5 4.0 1.10 1
559 26 Male 42.8 19.7 390 75 138 7.5 2.6 0.50 1
560 66 Male 15.2 7.7 356 321 562 6.5 2.2 0.40 1
561 66 Male 16.6 7.6 315 233 384 6.9 2.0 0.40 1
562 66 Male 17.3 8.5 388 173 367 7.8 2.6 0.50 1
563 64 Male 1.4 0.5 298 31 83 7.2 2.6 0.50 1
564 38 Female 0.6 0.1 165 22 34 5.9 2.9 0.90 2
565 43 Male 22.5 11.8 143 22 143 6.6 2.1 0.46 1
566 50 Female 1.0 0.3 191 22 31 7.8 4.0 1.00 2
567 52 Male 2.7 1.4 251 20 40 6.0 1.7 0.39 1
568 20 Female 16.7 8.4 200 91 101 6.9 3.5 1.02 1
569 16 Male 7.7 4.1 268 213 168 7.1 4.0 1.20 1
570 16 Male 2.6 1.2 236 131 90 5.4 2.6 0.90 1
571 90 Male 1.1 0.3 215 46 134 6.9 3.0 0.70 1
572 32 Male 15.6 9.5 134 54 125 5.6 4.0 2.50 1
573 32 Male 3.7 1.6 612 50 88 6.2 1.9 0.40 1
574 32 Male 12.1 6.0 515 48 92 6.6 2.4 0.50 1
575 32 Male 25.0 13.7 560 41 88 7.9 2.5 2.50 1
576 32 Male 15.0 8.2 289 58 80 5.3 2.2 0.70 1
577 32 Male 12.7 8.4 190 28 47 5.4 2.6 0.90 1
578 60 Male 0.5 0.1 500 20 34 5.9 1.6 0.37 2
579 40 Male 0.6 0.1 98 35 31 6.0 3.2 1.10 1
580 52 Male 0.8 0.2 245 48 49 6.4 3.2 1.00 1
581 31 Male 1.3 0.5 184 29 32 6.8 3.4 1.00 1
582 38 Male 1.0 0.3 216 21 24 7.3 4.4 1.50 2

583 rows × 11 columns

Listamos cabeceras de los datos


In [4]:
# Header
header = []
for row in dataset:
    header.append(row)
header


Out[4]:
['Age',
 'Gender',
 'Total_Bilirubin',
 'Direct_Bilirubin',
 'Alkaline_Phosphotase',
 'Alamine_Aminotransferase',
 'Aspartate_Aminotransferase',
 'Total_Protiens',
 'Albumin',
 'Albumin_and_Globulin_Ratio',
 'Dataset']

Cambiando valores nominales

Como se puede observar desde un primer momento, existe una variable nominal denominada Gender relacionada con el sexo. Para facilitar los cálculos posteriores, vamos a reemplazarla cambiando:

  • Male: 0
  • Female: 1

In [5]:
dataset.replace("Male",0, True)
dataset.replace("Female",1,True)
dataset


Out[5]:
Age Gender Total_Bilirubin Direct_Bilirubin Alkaline_Phosphotase Alamine_Aminotransferase Aspartate_Aminotransferase Total_Protiens Albumin Albumin_and_Globulin_Ratio Dataset
0 65 1 0.7 0.1 187 16 18 6.8 3.3 0.90 1
1 62 0 10.9 5.5 699 64 100 7.5 3.2 0.74 1
2 62 0 7.3 4.1 490 60 68 7.0 3.3 0.89 1
3 58 0 1.0 0.4 182 14 20 6.8 3.4 1.00 1
4 72 0 3.9 2.0 195 27 59 7.3 2.4 0.40 1
5 46 0 1.8 0.7 208 19 14 7.6 4.4 1.30 1
6 26 1 0.9 0.2 154 16 12 7.0 3.5 1.00 1
7 29 1 0.9 0.3 202 14 11 6.7 3.6 1.10 1
8 17 0 0.9 0.3 202 22 19 7.4 4.1 1.20 2
9 55 0 0.7 0.2 290 53 58 6.8 3.4 1.00 1
10 57 0 0.6 0.1 210 51 59 5.9 2.7 0.80 1
11 72 0 2.7 1.3 260 31 56 7.4 3.0 0.60 1
12 64 0 0.9 0.3 310 61 58 7.0 3.4 0.90 2
13 74 1 1.1 0.4 214 22 30 8.1 4.1 1.00 1
14 61 0 0.7 0.2 145 53 41 5.8 2.7 0.87 1
15 25 0 0.6 0.1 183 91 53 5.5 2.3 0.70 2
16 38 0 1.8 0.8 342 168 441 7.6 4.4 1.30 1
17 33 0 1.6 0.5 165 15 23 7.3 3.5 0.92 2
18 40 1 0.9 0.3 293 232 245 6.8 3.1 0.80 1
19 40 1 0.9 0.3 293 232 245 6.8 3.1 0.80 1
20 51 0 2.2 1.0 610 17 28 7.3 2.6 0.55 1
21 51 0 2.9 1.3 482 22 34 7.0 2.4 0.50 1
22 62 0 6.8 3.0 542 116 66 6.4 3.1 0.90 1
23 40 0 1.9 1.0 231 16 55 4.3 1.6 0.60 1
24 63 0 0.9 0.2 194 52 45 6.0 3.9 1.85 2
25 34 0 4.1 2.0 289 875 731 5.0 2.7 1.10 1
26 34 0 4.1 2.0 289 875 731 5.0 2.7 1.10 1
27 34 0 6.2 3.0 240 1680 850 7.2 4.0 1.20 1
28 20 0 1.1 0.5 128 20 30 3.9 1.9 0.95 2
29 84 1 0.7 0.2 188 13 21 6.0 3.2 1.10 2
... ... ... ... ... ... ... ... ... ... ... ...
553 46 0 10.2 4.2 232 58 140 7.0 2.7 0.60 1
554 73 0 1.8 0.9 220 20 43 6.5 3.0 0.80 1
555 55 0 0.8 0.2 290 139 87 7.0 3.0 0.70 1
556 51 0 0.7 0.1 180 25 27 6.1 3.1 1.00 1
557 51 0 2.9 1.2 189 80 125 6.2 3.1 1.00 1
558 51 0 4.0 2.5 275 382 330 7.5 4.0 1.10 1
559 26 0 42.8 19.7 390 75 138 7.5 2.6 0.50 1
560 66 0 15.2 7.7 356 321 562 6.5 2.2 0.40 1
561 66 0 16.6 7.6 315 233 384 6.9 2.0 0.40 1
562 66 0 17.3 8.5 388 173 367 7.8 2.6 0.50 1
563 64 0 1.4 0.5 298 31 83 7.2 2.6 0.50 1
564 38 1 0.6 0.1 165 22 34 5.9 2.9 0.90 2
565 43 0 22.5 11.8 143 22 143 6.6 2.1 0.46 1
566 50 1 1.0 0.3 191 22 31 7.8 4.0 1.00 2
567 52 0 2.7 1.4 251 20 40 6.0 1.7 0.39 1
568 20 1 16.7 8.4 200 91 101 6.9 3.5 1.02 1
569 16 0 7.7 4.1 268 213 168 7.1 4.0 1.20 1
570 16 0 2.6 1.2 236 131 90 5.4 2.6 0.90 1
571 90 0 1.1 0.3 215 46 134 6.9 3.0 0.70 1
572 32 0 15.6 9.5 134 54 125 5.6 4.0 2.50 1
573 32 0 3.7 1.6 612 50 88 6.2 1.9 0.40 1
574 32 0 12.1 6.0 515 48 92 6.6 2.4 0.50 1
575 32 0 25.0 13.7 560 41 88 7.9 2.5 2.50 1
576 32 0 15.0 8.2 289 58 80 5.3 2.2 0.70 1
577 32 0 12.7 8.4 190 28 47 5.4 2.6 0.90 1
578 60 0 0.5 0.1 500 20 34 5.9 1.6 0.37 2
579 40 0 0.6 0.1 98 35 31 6.0 3.2 1.10 1
580 52 0 0.8 0.2 245 48 49 6.4 3.2 1.00 1
581 31 0 1.3 0.5 184 29 32 6.8 3.4 1.00 1
582 38 0 1.0 0.3 216 21 24 7.3 4.4 1.50 2

583 rows × 11 columns

Datos de estadisticos de las variables

En este apartado vamos a desarrollar un breve estudio estadístico para los datos proporcionados. Para ello utilizaremos el método describe del objeto DataSet de la librería panda. Este método genéra un cálculo estadístico básico en el que nos describe por cada variable valores tales como la media, la desviación estandar y los percentiles 25%, 50% y 75% respecto al valor máximo.


In [8]:
print(dataset.describe()) #Descripción de los datos

#### Obtenemos contéo de sexo
print('\nPacientes masculinos (0) y femeninos (1):')
print(pd.value_counts(dataset['Gender'].values))
#### Obtenemos contéo de la clase
print('\nPacientes enfermos (1) y sanos (2):')
print(pd.value_counts(dataset['Dataset'].values))


              Age      Gender  Total_Bilirubin  Direct_Bilirubin  \
count  583.000000  583.000000       583.000000        583.000000   
mean    44.746141    0.243568         3.298799          1.486106   
std     16.189833    0.429603         6.209522          2.808498   
min      4.000000    0.000000         0.400000          0.100000   
25%     33.000000    0.000000         0.800000          0.200000   
50%     45.000000    0.000000         1.000000          0.300000   
75%     58.000000    0.000000         2.600000          1.300000   
max     90.000000    1.000000        75.000000         19.700000   

       Alkaline_Phosphotase  Alamine_Aminotransferase  \
count            583.000000                583.000000   
mean             290.576329                 80.713551   
std              242.937989                182.620356   
min               63.000000                 10.000000   
25%              175.500000                 23.000000   
50%              208.000000                 35.000000   
75%              298.000000                 60.500000   
max             2110.000000               2000.000000   

       Aspartate_Aminotransferase  Total_Protiens     Albumin  \
count                  583.000000      583.000000  583.000000   
mean                   109.910806        6.483190    3.141852   
std                    288.918529        1.085451    0.795519   
min                     10.000000        2.700000    0.900000   
25%                     25.000000        5.800000    2.600000   
50%                     42.000000        6.600000    3.100000   
75%                     87.000000        7.200000    3.800000   
max                   4929.000000        9.600000    5.500000   

       Albumin_and_Globulin_Ratio     Dataset  
count                  579.000000  583.000000  
mean                     0.947064    1.286449  
std                      0.319592    0.452490  
min                      0.300000    1.000000  
25%                      0.700000    1.000000  
50%                      0.930000    1.000000  
75%                      1.100000    2.000000  
max                      2.800000    2.000000  

Pacientes masculinos (0) y femeninos (1):
0    441
1    142
dtype: int64

Pacientes enfermos (1) y sanos (2):
1    416
2    167
dtype: int64

Observando estos datos podemos sacar conclusiones tales como:

  • Tratamos con un conjunto de 583 pacientes
  • Referente a la edad de los pacientes:
    • La edad media de los pacientes es de 44 ± 16 años
    • El paciente más joven tiene la edad de 4 años.
    • El paciente más anciano tiene 90 años.
    • El grueso de los pacientes están entre el percentíl 50 y 75, lo que indica que están por encima de los 45 años.
  • Referente al sexo de los pacientes:
    • Tenemos un total de 441 hombres
    • Tenemos un total de 142 mujeres
  • De estos pacientes:
    • 416 están enfermos
    • 167 están sanos

Normalizando variables

Para saber si debemos normalizar algúna variable, debemos ver la distribución que estas siguen. Para ello, podemos realizar un histograma de cada una de las variables y ver gráficamente las variables que parezcan seguir una distribución normal.


In [6]:
#### Histogram Matrix Plot

plt.figure()
dataset.hist(xlabelsize=0.5, ylabelsize=0.2,figsize=(10,10))
plt.xlabel("Data")
plt.show()


<matplotlib.figure.Figure at 0x7fd0b3e17ac8>

La variables que más o menos siguen está distribución (Albumin,Total_Protiens) las vamos a normalizar con la normalizacion Z-Score: $$x'=\frac{x-\mu}{\sigma}$$ Aunque la variable Age también parece seguir una distribución normal, por simplicidad y semántica de la variable, no se va a normalizar. Pasa lo mismo con las variables Genre y Dataset.

Para el resto de variables vamos a usar la normalización min-max en un intervalo [0-1]:$$x'=\frac{x-min}{max-min}$$


In [7]:
#Definición de funciones auxiliares 

def zScore(var):
    return (var-var.mean())/var.std()
def minMax(var):
    return (var-var.min())/(var.max()-var.min())

dataNorm=dataset.copy()

dataNorm['Albumin']=zScore(dataNorm['Albumin'])
dataNorm['Total_Protiens']=zScore(dataNorm['Total_Protiens'])

dataNorm['Total_Bilirubin']=minMax(dataNorm['Total_Bilirubin'])
dataNorm['Direct_Bilirubin']=minMax(dataNorm['Direct_Bilirubin'])
dataNorm['Alkaline_Phosphotase']=minMax(dataNorm['Alkaline_Phosphotase'])
dataNorm['Alamine_Aminotransferase']=minMax(dataNorm['Alamine_Aminotransferase'])
dataNorm['Aspartate_Aminotransferase']=minMax(dataNorm['Aspartate_Aminotransferase'])
dataNorm['Albumin_and_Globulin_Ratio']=minMax(dataNorm['Albumin_and_Globulin_Ratio'])
dataNorm


Out[7]:
Age Gender Total_Bilirubin Direct_Bilirubin Alkaline_Phosphotase Alamine_Aminotransferase Aspartate_Aminotransferase Total_Protiens Albumin Albumin_and_Globulin_Ratio Dataset
0 65 1 0.004021 0.000000 0.060576 0.003015 0.001626 0.291869 0.198798 0.240 1
1 62 0 0.140751 0.275510 0.310699 0.027136 0.018296 0.936762 0.073094 0.176 1
2 62 0 0.092493 0.204082 0.208598 0.025126 0.011791 0.476124 0.198798 0.236 1
3 58 0 0.008043 0.015306 0.058134 0.002010 0.002033 0.291869 0.324502 0.280 1
4 72 0 0.046917 0.096939 0.064485 0.008543 0.009961 0.752507 -0.932539 0.040 1
5 46 0 0.018767 0.030612 0.070835 0.004523 0.000813 1.028889 1.581543 0.400 1
6 26 1 0.006702 0.005102 0.044455 0.003015 0.000407 0.476124 0.450206 0.280 1
7 29 1 0.006702 0.010204 0.067904 0.002010 0.000203 0.199741 0.575910 0.320 1
8 17 0 0.006702 0.010204 0.067904 0.006030 0.001830 0.844634 1.204431 0.360 2
9 55 0 0.004021 0.005102 0.110894 0.021608 0.009758 0.291869 0.324502 0.280 1
10 57 0 0.002681 0.000000 0.071812 0.020603 0.009961 -0.537279 -0.555427 0.200 1
11 72 0 0.030831 0.061224 0.096238 0.010553 0.009351 0.844634 -0.178314 0.120 1
12 64 0 0.006702 0.010204 0.120664 0.025628 0.009758 0.476124 0.324502 0.240 2
13 74 1 0.009383 0.015306 0.073766 0.006030 0.004066 1.489527 1.204431 0.280 1
14 61 0 0.004021 0.005102 0.040059 0.021608 0.006302 -0.629407 -0.555427 0.228 1
15 25 0 0.002681 0.000000 0.058622 0.040704 0.008742 -0.905789 -1.058243 0.160 2
16 38 0 0.018767 0.035714 0.136297 0.079397 0.087619 1.028889 1.581543 0.400 1
17 33 0 0.016086 0.020408 0.049829 0.002513 0.002643 0.752507 0.450206 0.248 2
18 40 1 0.006702 0.010204 0.112360 0.111558 0.047774 0.291869 -0.052610 0.200 1
19 40 1 0.006702 0.010204 0.112360 0.111558 0.047774 0.291869 -0.052610 0.200 1
20 51 0 0.024129 0.045918 0.267220 0.003518 0.003659 0.752507 -0.681131 0.100 1
21 51 0 0.033512 0.061224 0.204690 0.006030 0.004879 0.476124 -0.932539 0.080 1
22 62 0 0.085791 0.147959 0.234001 0.053266 0.011384 -0.076641 -0.052610 0.240 1
23 40 0 0.020107 0.045918 0.082071 0.003015 0.009148 -2.011320 -1.938172 0.120 1
24 63 0 0.006702 0.005102 0.063996 0.021106 0.007115 -0.445152 0.953023 0.620 2
25 34 0 0.049598 0.096939 0.110405 0.434673 0.146575 -1.366427 -0.555427 0.320 1
26 34 0 0.049598 0.096939 0.110405 0.434673 0.146575 -1.366427 -0.555427 0.320 1
27 34 0 0.077748 0.147959 0.086468 0.839196 0.170766 0.660379 1.078727 0.360 1
28 20 0 0.009383 0.020408 0.031754 0.005025 0.004066 -2.379830 -1.561060 0.260 2
29 84 1 0.004021 0.005102 0.061065 0.001508 0.002236 -0.445152 0.073094 0.320 2
... ... ... ... ... ... ... ... ... ... ... ...
553 46 0 0.131367 0.209184 0.082560 0.024121 0.026428 0.476124 -0.555427 0.120 1
554 73 0 0.018767 0.040816 0.076698 0.005025 0.006709 0.015486 -0.178314 0.200 1
555 55 0 0.005362 0.005102 0.110894 0.064824 0.015654 0.476124 -0.178314 0.160 1
556 51 0 0.004021 0.000000 0.057157 0.007538 0.003456 -0.353024 -0.052610 0.280 1
557 51 0 0.033512 0.056122 0.061553 0.035176 0.023379 -0.260896 -0.052610 0.280 1
558 51 0 0.048257 0.122449 0.103566 0.186935 0.065054 0.936762 1.078727 0.320 1
559 26 0 0.568365 1.000000 0.159746 0.032663 0.026022 0.936762 -0.681131 0.080 1
560 66 0 0.198391 0.387755 0.143136 0.156281 0.112218 0.015486 -1.183947 0.040 1
561 66 0 0.217158 0.382653 0.123107 0.112060 0.076032 0.383997 -1.435356 0.040 1
562 66 0 0.226542 0.428571 0.158769 0.081910 0.072576 1.213145 -0.681131 0.080 1
563 64 0 0.013405 0.020408 0.114802 0.010553 0.014840 0.660379 -0.681131 0.080 1
564 38 1 0.002681 0.000000 0.049829 0.006030 0.004879 -0.537279 -0.304019 0.240 2
565 43 0 0.296247 0.596939 0.039082 0.006030 0.027038 0.107614 -1.309652 0.064 1
566 50 1 0.008043 0.010204 0.062531 0.006030 0.004269 1.213145 1.078727 0.280 2
567 52 0 0.030831 0.066327 0.091842 0.005025 0.006099 -0.445152 -1.812468 0.036 1
568 20 1 0.218499 0.423469 0.066927 0.040704 0.018500 0.383997 0.450206 0.288 1
569 16 0 0.097855 0.204082 0.100147 0.102010 0.032120 0.568252 1.078727 0.360 1
570 16 0 0.029491 0.056122 0.084514 0.060804 0.016263 -0.997917 -0.681131 0.240 1
571 90 0 0.009383 0.010204 0.074255 0.018090 0.025208 0.383997 -0.178314 0.160 1
572 32 0 0.203753 0.479592 0.034685 0.022111 0.023379 -0.813662 1.078727 0.880 1
573 32 0 0.044236 0.076531 0.268197 0.020101 0.015857 -0.260896 -1.561060 0.040 1
574 32 0 0.156836 0.301020 0.220811 0.019095 0.016670 0.107614 -0.932539 0.080 1
575 32 0 0.329759 0.693878 0.242794 0.015578 0.015857 1.305272 -0.806835 0.880 1
576 32 0 0.195710 0.413265 0.110405 0.024121 0.014231 -1.090044 -1.183947 0.160 1
577 32 0 0.164879 0.423469 0.062042 0.009045 0.007522 -0.997917 -0.681131 0.240 1
578 60 0 0.001340 0.000000 0.213483 0.005025 0.004879 -0.537279 -1.938172 0.028 2
579 40 0 0.002681 0.000000 0.017098 0.012563 0.004269 -0.445152 0.073094 0.320 1
580 52 0 0.005362 0.005102 0.088911 0.019095 0.007928 -0.076641 0.073094 0.280 1
581 31 0 0.012064 0.020408 0.059111 0.009548 0.004472 0.291869 0.324502 0.280 1
582 38 0 0.008043 0.010204 0.074744 0.005528 0.002846 0.752507 1.581543 0.480 2

583 rows × 11 columns

A partir de este punto ya tenemos un conjunto de datos normalizado con el que operar.

Deteccion de outliers

A la hora de tratar cualquier conjunto de datos es común observar valores que parecen que rompen la norma y que se salen de la distribución. En los algoritmos de machine learninng, este tipo de valores pueden desfavorecedores pues a tenerlos en cuenta pueden generar problemas y llegar a estados espúreos.

Por ello, debemos intentar localizarlos y tratarlos. No debemos olvidar nunca la semántica de los datos que tratamos. Para poder identificar outliers, una buena herramienta son las gráficas de caja:


In [8]:
dataset.boxplot(column='Age')


Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0b3e237b8>

In [9]:
dataset.boxplot(column='Total_Bilirubin')


Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab9eeef0>

In [10]:
dataset.boxplot(column='Direct_Bilirubin')


Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab7ead30>

In [11]:
dataset.boxplot(column='Alkaline_Phosphotase')


Out[11]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab7034a8>

In [12]:
dataset.boxplot(column='Alamine_Aminotransferase')


Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab6abb00>

In [13]:
dataset.boxplot(column='Aspartate_Aminotransferase')


Out[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab2cd208>

In [14]:
dataset.boxplot(column='Total_Protiens')


Out[14]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab288630>

In [15]:
dataset.boxplot(column='Albumin')


Out[15]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab235a20>

In [16]:
dataset.boxplot(column='Albumin_and_Globulin_Ratio')


Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x7fd0ab14d160>

Como vemos en los boxplot hay varios outliers en las variables, en concreto algunos muy marcados en la total bilirubin, direct bilirubin, alkaline phosphotase, alamine aminotransferase, aspartate aminotransferase y albumin and globulin ratio. Pero al tratarse de datos médicos para detectar si alguien está enfermo o no, esos outliers pueden ser útiles para el estudio, por lo que hemos decidido conservarlos.

Missing values

Cuando trabajamos con un conjunto amplio de datos, es común que no dispongamos de todos las variables para cada entrada. Debemos localizar estos puntos donde no hay valores (missing values) y tratarlos. En ocasiones, el tratar estos datos implica inicializarlos a un valor que no afecte o inclusive eliminar las entradas conflictivas, dependiendo de los datos.


In [17]:
dataset.notnull().all()


Out[17]:
Age                            True
Gender                         True
Total_Bilirubin                True
Direct_Bilirubin               True
Alkaline_Phosphotase           True
Alamine_Aminotransferase       True
Aspartate_Aminotransferase     True
Total_Protiens                 True
Albumin                        True
Albumin_and_Globulin_Ratio    False
Dataset                        True
dtype: bool

In [18]:
dataset.loc[dataset['Albumin_and_Globulin_Ratio'].isnull()]


Out[18]:
Age Gender Total_Bilirubin Direct_Bilirubin Alkaline_Phosphotase Alamine_Aminotransferase Aspartate_Aminotransferase Total_Protiens Albumin Albumin_and_Globulin_Ratio Dataset
209 45 1 0.9 0.3 189 23 33 6.6 3.9 NaN 1
241 51 0 0.8 0.2 230 24 46 6.5 3.1 NaN 1
253 35 1 0.6 0.2 180 12 15 5.2 2.7 NaN 2
312 27 0 1.3 0.6 106 25 54 8.5 4.8 NaN 2

Solo hay una variable con missing values: Albumin and globulin ratio, y solo en cuatro filas. Al tener una base de datos grande y pocos missing values hemos decido eliminarlos.


In [19]:
dataset.dropna()


Out[19]:
Age Gender Total_Bilirubin Direct_Bilirubin Alkaline_Phosphotase Alamine_Aminotransferase Aspartate_Aminotransferase Total_Protiens Albumin Albumin_and_Globulin_Ratio Dataset
0 65 1 0.7 0.1 187 16 18 6.8 3.3 0.90 1
1 62 0 10.9 5.5 699 64 100 7.5 3.2 0.74 1
2 62 0 7.3 4.1 490 60 68 7.0 3.3 0.89 1
3 58 0 1.0 0.4 182 14 20 6.8 3.4 1.00 1
4 72 0 3.9 2.0 195 27 59 7.3 2.4 0.40 1
5 46 0 1.8 0.7 208 19 14 7.6 4.4 1.30 1
6 26 1 0.9 0.2 154 16 12 7.0 3.5 1.00 1
7 29 1 0.9 0.3 202 14 11 6.7 3.6 1.10 1
8 17 0 0.9 0.3 202 22 19 7.4 4.1 1.20 2
9 55 0 0.7 0.2 290 53 58 6.8 3.4 1.00 1
10 57 0 0.6 0.1 210 51 59 5.9 2.7 0.80 1
11 72 0 2.7 1.3 260 31 56 7.4 3.0 0.60 1
12 64 0 0.9 0.3 310 61 58 7.0 3.4 0.90 2
13 74 1 1.1 0.4 214 22 30 8.1 4.1 1.00 1
14 61 0 0.7 0.2 145 53 41 5.8 2.7 0.87 1
15 25 0 0.6 0.1 183 91 53 5.5 2.3 0.70 2
16 38 0 1.8 0.8 342 168 441 7.6 4.4 1.30 1
17 33 0 1.6 0.5 165 15 23 7.3 3.5 0.92 2
18 40 1 0.9 0.3 293 232 245 6.8 3.1 0.80 1
19 40 1 0.9 0.3 293 232 245 6.8 3.1 0.80 1
20 51 0 2.2 1.0 610 17 28 7.3 2.6 0.55 1
21 51 0 2.9 1.3 482 22 34 7.0 2.4 0.50 1
22 62 0 6.8 3.0 542 116 66 6.4 3.1 0.90 1
23 40 0 1.9 1.0 231 16 55 4.3 1.6 0.60 1
24 63 0 0.9 0.2 194 52 45 6.0 3.9 1.85 2
25 34 0 4.1 2.0 289 875 731 5.0 2.7 1.10 1
26 34 0 4.1 2.0 289 875 731 5.0 2.7 1.10 1
27 34 0 6.2 3.0 240 1680 850 7.2 4.0 1.20 1
28 20 0 1.1 0.5 128 20 30 3.9 1.9 0.95 2
29 84 1 0.7 0.2 188 13 21 6.0 3.2 1.10 2
... ... ... ... ... ... ... ... ... ... ... ...
553 46 0 10.2 4.2 232 58 140 7.0 2.7 0.60 1
554 73 0 1.8 0.9 220 20 43 6.5 3.0 0.80 1
555 55 0 0.8 0.2 290 139 87 7.0 3.0 0.70 1
556 51 0 0.7 0.1 180 25 27 6.1 3.1 1.00 1
557 51 0 2.9 1.2 189 80 125 6.2 3.1 1.00 1
558 51 0 4.0 2.5 275 382 330 7.5 4.0 1.10 1
559 26 0 42.8 19.7 390 75 138 7.5 2.6 0.50 1
560 66 0 15.2 7.7 356 321 562 6.5 2.2 0.40 1
561 66 0 16.6 7.6 315 233 384 6.9 2.0 0.40 1
562 66 0 17.3 8.5 388 173 367 7.8 2.6 0.50 1
563 64 0 1.4 0.5 298 31 83 7.2 2.6 0.50 1
564 38 1 0.6 0.1 165 22 34 5.9 2.9 0.90 2
565 43 0 22.5 11.8 143 22 143 6.6 2.1 0.46 1
566 50 1 1.0 0.3 191 22 31 7.8 4.0 1.00 2
567 52 0 2.7 1.4 251 20 40 6.0 1.7 0.39 1
568 20 1 16.7 8.4 200 91 101 6.9 3.5 1.02 1
569 16 0 7.7 4.1 268 213 168 7.1 4.0 1.20 1
570 16 0 2.6 1.2 236 131 90 5.4 2.6 0.90 1
571 90 0 1.1 0.3 215 46 134 6.9 3.0 0.70 1
572 32 0 15.6 9.5 134 54 125 5.6 4.0 2.50 1
573 32 0 3.7 1.6 612 50 88 6.2 1.9 0.40 1
574 32 0 12.1 6.0 515 48 92 6.6 2.4 0.50 1
575 32 0 25.0 13.7 560 41 88 7.9 2.5 2.50 1
576 32 0 15.0 8.2 289 58 80 5.3 2.2 0.70 1
577 32 0 12.7 8.4 190 28 47 5.4 2.6 0.90 1
578 60 0 0.5 0.1 500 20 34 5.9 1.6 0.37 2
579 40 0 0.6 0.1 98 35 31 6.0 3.2 1.10 1
580 52 0 0.8 0.2 245 48 49 6.4 3.2 1.00 1
581 31 0 1.3 0.5 184 29 32 6.8 3.4 1.00 1
582 38 0 1.0 0.3 216 21 24 7.3 4.4 1.50 2

579 rows × 11 columns

A partir de este punto tenemos los datos listos para empezar hacer un estudio semántico de los mismos sin que las anomalías de los mismos nos puedan interferir.

Correlación entre las variables

El primer estudio que vamos a hacer con los datos va a ser evaluar como de relacionados están unos con otros. Esto nos permitirá evaluar cuales de los atributos pueden ser determinantes para el problema que plantea estos datos.

Para ello, generaremos la matriz de correlación lineal gracias a la función corr() del objeto dataset de panda:


In [20]:
correlation=dataset.corr() #Correlation Matrix
correlation


Out[20]:
Age Gender Total_Bilirubin Direct_Bilirubin Alkaline_Phosphotase Alamine_Aminotransferase Aspartate_Aminotransferase Total_Protiens Albumin Albumin_and_Globulin_Ratio Dataset
Age 1.000000 -0.056560 0.011763 0.007529 0.080425 -0.086883 -0.019910 -0.187461 -0.265924 -0.216408 -0.137351
Gender -0.056560 1.000000 -0.089291 -0.100436 0.027496 -0.082332 -0.080336 0.089121 0.093799 0.003424 0.082416
Total_Bilirubin 0.011763 -0.089291 1.000000 0.874618 0.206669 0.214065 0.237831 -0.008099 -0.222250 -0.206267 -0.220208
Direct_Bilirubin 0.007529 -0.100436 0.874618 1.000000 0.234939 0.233894 0.257544 -0.000139 -0.228531 -0.200125 -0.246046
Alkaline_Phosphotase 0.080425 0.027496 0.206669 0.234939 1.000000 0.125680 0.167196 -0.028514 -0.165453 -0.234166 -0.184866
Alamine_Aminotransferase -0.086883 -0.082332 0.214065 0.233894 0.125680 1.000000 0.791966 -0.042518 -0.029742 -0.002375 -0.163416
Aspartate_Aminotransferase -0.019910 -0.080336 0.237831 0.257544 0.167196 0.791966 1.000000 -0.025645 -0.085290 -0.070040 -0.151934
Total_Protiens -0.187461 0.089121 -0.008099 -0.000139 -0.028514 -0.042518 -0.025645 1.000000 0.784053 0.234887 0.035008
Albumin -0.265924 0.093799 -0.222250 -0.228531 -0.165453 -0.029742 -0.085290 0.784053 1.000000 0.689632 0.161388
Albumin_and_Globulin_Ratio -0.216408 0.003424 -0.206267 -0.200125 -0.234166 -0.002375 -0.070040 0.234887 0.689632 1.000000 0.163131
Dataset -0.137351 0.082416 -0.220208 -0.246046 -0.184866 -0.163416 -0.151934 0.035008 0.161388 0.163131 1.000000

Si representamos esta matriz como un grafico donde podamos verlo más visualmente:


In [21]:
# Display the correlation matrix with a specified figure number and a bluescale
# colormap
plt.figure()
plt.matshow(correlation, fignum=1, cmap=plt.cm.Blues)
plt.ylabel("Attribute Index")
plt.show()



In [22]:
#### Scatter Matrix Plot

plt.figure()
from pandas.tools.plotting import scatter_matrix
scatter_matrix(dataset, alpha=0.3, figsize=(20, 20), diagonal='kde')
plt.show()


/home/cristian/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:5: FutureWarning: 'pandas.tools.plotting.scatter_matrix' is deprecated, import 'pandas.plotting.scatter_matrix' instead.
  """
<matplotlib.figure.Figure at 0x7fd0ab9764e0>

Como conclusión a los datos obtenidos previamnte, podemos sacar las siguientes conclusiones:

  • Hay alta correlación entre la bilirrubina total y la bilirrubina directa, cosa que esperamos porque bilirrubina total=bilirrubina directa + bilirrubina indirecta, tal y como se explicó previamente.

  • Hay alta correlación entre albumina y el total proteinas ya que el total proteinas es la suma de la albumina y la gobulina.

  • Hay alta correlación entre la albumina y el ratio de albumina y gobulina

  • Hay alta correlación entre las dos transaminasas, la alaninoamino transferasa y la aspartato aminotransferasa

  • Aun a pesar de los datos previos, no hay una gran correlación entre las variables y la clase. La correlación más alta con la clase es la que hay con la bilirrubina directa. Con lo cual tampoco pareciera que tuviéramos falsos predictores.

Separación de variables

Dado el conjunto de datos y que parece que están detectando un fallo hepático, sería planteable pensar en que las diferencias entre hombres y mujeres pudieran ser determinantes y por tanto pudiera estar justificado la separacion de los datos por sexo, dejando los datos en dos subconjuntos preparados para el siguiente paso que sería el algoritmo de aprendizaje.


In [23]:
for df_gender in dataset.groupby('Gender'):
    print(df_gender)


(0,      Age  Gender  Total_Bilirubin  Direct_Bilirubin  Alkaline_Phosphotase  \
1     62       0             10.9               5.5                   699   
2     62       0              7.3               4.1                   490   
3     58       0              1.0               0.4                   182   
4     72       0              3.9               2.0                   195   
5     46       0              1.8               0.7                   208   
8     17       0              0.9               0.3                   202   
9     55       0              0.7               0.2                   290   
10    57       0              0.6               0.1                   210   
11    72       0              2.7               1.3                   260   
12    64       0              0.9               0.3                   310   
14    61       0              0.7               0.2                   145   
15    25       0              0.6               0.1                   183   
16    38       0              1.8               0.8                   342   
17    33       0              1.6               0.5                   165   
20    51       0              2.2               1.0                   610   
21    51       0              2.9               1.3                   482   
22    62       0              6.8               3.0                   542   
23    40       0              1.9               1.0                   231   
24    63       0              0.9               0.2                   194   
25    34       0              4.1               2.0                   289   
26    34       0              4.1               2.0                   289   
27    34       0              6.2               3.0                   240   
28    20       0              1.1               0.5                   128   
30    57       0              4.0               1.9                   190   
31    52       0              0.9               0.2                   156   
32    57       0              1.0               0.3                   187   
35    30       0              1.3               0.4                   482   
38    48       0              1.4               0.6                   263   
39    47       0              2.7               1.3                   275   
40    45       0              2.4               1.1                   168   
..   ...     ...              ...               ...                   ...   
550   46       0              3.3               1.5                   172   
551   29       0              1.2               0.4                   160   
552   45       0              0.6               0.1                   196   
553   46       0             10.2               4.2                   232   
554   73       0              1.8               0.9                   220   
555   55       0              0.8               0.2                   290   
556   51       0              0.7               0.1                   180   
557   51       0              2.9               1.2                   189   
558   51       0              4.0               2.5                   275   
559   26       0             42.8              19.7                   390   
560   66       0             15.2               7.7                   356   
561   66       0             16.6               7.6                   315   
562   66       0             17.3               8.5                   388   
563   64       0              1.4               0.5                   298   
565   43       0             22.5              11.8                   143   
567   52       0              2.7               1.4                   251   
569   16       0              7.7               4.1                   268   
570   16       0              2.6               1.2                   236   
571   90       0              1.1               0.3                   215   
572   32       0             15.6               9.5                   134   
573   32       0              3.7               1.6                   612   
574   32       0             12.1               6.0                   515   
575   32       0             25.0              13.7                   560   
576   32       0             15.0               8.2                   289   
577   32       0             12.7               8.4                   190   
578   60       0              0.5               0.1                   500   
579   40       0              0.6               0.1                    98   
580   52       0              0.8               0.2                   245   
581   31       0              1.3               0.5                   184   
582   38       0              1.0               0.3                   216   

     Alamine_Aminotransferase  Aspartate_Aminotransferase  Total_Protiens  \
1                          64                         100             7.5   
2                          60                          68             7.0   
3                          14                          20             6.8   
4                          27                          59             7.3   
5                          19                          14             7.6   
8                          22                          19             7.4   
9                          53                          58             6.8   
10                         51                          59             5.9   
11                         31                          56             7.4   
12                         61                          58             7.0   
14                         53                          41             5.8   
15                         91                          53             5.5   
16                        168                         441             7.6   
17                         15                          23             7.3   
20                         17                          28             7.3   
21                         22                          34             7.0   
22                        116                          66             6.4   
23                         16                          55             4.3   
24                         52                          45             6.0   
25                        875                         731             5.0   
26                        875                         731             5.0   
27                       1680                         850             7.2   
28                         20                          30             3.9   
30                         45                         111             5.2   
31                         35                          44             4.9   
32                         19                          23             5.2   
35                        102                          80             6.9   
38                         38                          66             5.8   
39                        123                          73             6.2   
40                         33                          50             5.1   
..                        ...                         ...             ...   
550                        25                          41             5.6   
551                        20                          22             6.2   
552                        29                          30             5.8   
553                        58                         140             7.0   
554                        20                          43             6.5   
555                       139                          87             7.0   
556                        25                          27             6.1   
557                        80                         125             6.2   
558                       382                         330             7.5   
559                        75                         138             7.5   
560                       321                         562             6.5   
561                       233                         384             6.9   
562                       173                         367             7.8   
563                        31                          83             7.2   
565                        22                         143             6.6   
567                        20                          40             6.0   
569                       213                         168             7.1   
570                       131                          90             5.4   
571                        46                         134             6.9   
572                        54                         125             5.6   
573                        50                          88             6.2   
574                        48                          92             6.6   
575                        41                          88             7.9   
576                        58                          80             5.3   
577                        28                          47             5.4   
578                        20                          34             5.9   
579                        35                          31             6.0   
580                        48                          49             6.4   
581                        29                          32             6.8   
582                        21                          24             7.3   

     Albumin  Albumin_and_Globulin_Ratio  Dataset  
1        3.2                        0.74        1  
2        3.3                        0.89        1  
3        3.4                        1.00        1  
4        2.4                        0.40        1  
5        4.4                        1.30        1  
8        4.1                        1.20        2  
9        3.4                        1.00        1  
10       2.7                        0.80        1  
11       3.0                        0.60        1  
12       3.4                        0.90        2  
14       2.7                        0.87        1  
15       2.3                        0.70        2  
16       4.4                        1.30        1  
17       3.5                        0.92        2  
20       2.6                        0.55        1  
21       2.4                        0.50        1  
22       3.1                        0.90        1  
23       1.6                        0.60        1  
24       3.9                        1.85        2  
25       2.7                        1.10        1  
26       2.7                        1.10        1  
27       4.0                        1.20        1  
28       1.9                        0.95        2  
30       1.5                        0.40        1  
31       2.9                        1.40        1  
32       2.9                        1.20        2  
35       3.3                        0.90        1  
38       2.2                        0.61        1  
39       3.3                        1.10        1  
40       2.6                        1.00        1  
..       ...                         ...      ...  
550      2.4                        0.70        1  
551      3.0                        0.90        2  
552      2.9                        1.00        1  
553      2.7                        0.60        1  
554      3.0                        0.80        1  
555      3.0                        0.70        1  
556      3.1                        1.00        1  
557      3.1                        1.00        1  
558      4.0                        1.10        1  
559      2.6                        0.50        1  
560      2.2                        0.40        1  
561      2.0                        0.40        1  
562      2.6                        0.50        1  
563      2.6                        0.50        1  
565      2.1                        0.46        1  
567      1.7                        0.39        1  
569      4.0                        1.20        1  
570      2.6                        0.90        1  
571      3.0                        0.70        1  
572      4.0                        2.50        1  
573      1.9                        0.40        1  
574      2.4                        0.50        1  
575      2.5                        2.50        1  
576      2.2                        0.70        1  
577      2.6                        0.90        1  
578      1.6                        0.37        2  
579      3.2                        1.10        1  
580      3.2                        1.00        1  
581      3.4                        1.00        1  
582      4.4                        1.50        2  

[441 rows x 11 columns])
(1,      Age  Gender  Total_Bilirubin  Direct_Bilirubin  Alkaline_Phosphotase  \
0     65       1              0.7               0.1                   187   
6     26       1              0.9               0.2                   154   
7     29       1              0.9               0.3                   202   
13    74       1              1.1               0.4                   214   
18    40       1              0.9               0.3                   293   
19    40       1              0.9               0.3                   293   
29    84       1              0.7               0.2                   188   
33    38       1              2.6               1.2                   410   
34    38       1              2.6               1.2                   410   
36    17       1              0.7               0.2                   145   
37    46       1             14.2               7.8                   374   
44    85       1              1.0               0.3                   208   
48    32       1              0.6               0.1                   176   
50    45       1              0.7               0.2                   170   
51    34       1              0.6               0.1                   161   
57    48       1              0.9               0.2                   175   
60    31       1              0.8               0.2                   158   
70    19       1              0.7               0.2                   186   
71    75       1              0.8               0.2                   188   
72    75       1              0.8               0.2                   205   
75    29       1              0.7               0.1                   162   
77    68       1              0.6               0.1                  1620   
79    58       1              2.8               1.3                   670   
80    58       1              2.4               1.1                   915   
103   55       1              0.8               0.2                   225   
110   24       1              0.7               0.2                   188   
123   64       1              0.8               0.2                   178   
128   58       1              1.7               0.8                  1896   
131   70       1              0.7               0.2                   237   
132   18       1              0.8               0.2                   199   
..   ...     ...              ...               ...                   ...   
443   42       1              0.7               0.2                   152   
447   45       1             23.3              12.8                  1550   
448   48       1              0.8               0.2                   142   
449   48       1              0.9               0.2                   173   
455   21       1              0.6               0.1                   186   
460   22       1              2.2               1.0                   215   
461   28       1              0.8               0.2                   309   
464   45       1              0.7               0.2                   164   
465   45       1              0.6               0.1                   270   
466   28       1              0.6               0.1                   137   
467   28       1              1.0               0.3                    90   
471   49       1              0.6               0.1                   185   
485   22       1              6.7               3.2                   850   
486   42       1              0.8               0.2                   195   
490   53       1              0.8               0.2                   193   
492   35       1              1.0               0.3                   805   
510   37       1              0.8               0.2                   205   
522   46       1              0.8               0.2                   185   
525   53       1              0.9               0.2                   210   
530   22       1              1.1               0.3                   138   
533   46       1              1.4               0.4                   298   
537   10       1              0.8               0.1                   395   
539   65       1              0.7               0.2                   406   
544   54       1              5.5               3.2                   350   
545   45       1              0.7               0.2                   153   
547   50       1             27.7              10.8                   380   
549   40       1              2.1               1.0                   768   
564   38       1              0.6               0.1                   165   
566   50       1              1.0               0.3                   191   
568   20       1             16.7               8.4                   200   

     Alamine_Aminotransferase  Aspartate_Aminotransferase  Total_Protiens  \
0                          16                          18             6.8   
6                          16                          12             7.0   
7                          14                          11             6.7   
13                         22                          30             8.1   
18                        232                         245             6.8   
19                        232                         245             6.8   
29                         13                          21             6.0   
33                         59                          57             5.6   
34                         59                          57             5.6   
36                         18                          36             7.2   
37                         38                          77             4.3   
44                         17                          15             7.0   
48                         39                          28             6.0   
50                         21                          14             5.7   
51                         15                          19             6.6   
57                         24                          54             5.5   
60                         21                          16             6.0   
70                        166                         397             5.5   
71                         20                          29             4.4   
72                         27                          24             4.4   
75                         52                          41             5.2   
77                         95                         127             4.6   
79                         48                          79             4.7   
80                         60                         142             4.7   
103                        14                          23             6.1   
110                        11                          10             5.5   
123                        17                          18             6.3   
128                        61                          83             8.0   
131                        18                          28             5.8   
132                        34                          31             6.5   
..                        ...                         ...             ...   
443                        35                          81             6.2   
447                       425                         511             7.7   
448                        26                          25             6.0   
449                        26                          27             6.2   
455                        25                          22             6.8   
460                       159                          51             5.5   
461                        55                          23             6.8   
464                        21                          53             4.5   
465                        23                          42             5.1   
466                        22                          16             4.9   
467                        18                         108             6.8   
471                        17                          26             6.6   
485                       154                         248             6.2   
486                        18                          15             6.7   
490                        96                          57             6.7   
492                       133                         103             7.9   
510                        31                          36             9.2   
522                        24                          15             7.9   
525                        35                          32             8.0   
530                        14                          21             7.0   
533                       509                         623             3.6   
537                        25                          75             7.6   
539                        24                          45             7.2   
544                        67                          42             7.0   
545                        41                          42             4.5   
547                        39                         348             7.1   
549                        74                         141             7.8   
564                        22                          34             5.9   
566                        22                          31             7.8   
568                        91                         101             6.9   

     Albumin  Albumin_and_Globulin_Ratio  Dataset  
0        3.3                        0.90        1  
6        3.5                        1.00        1  
7        3.6                        1.10        1  
13       4.1                        1.00        1  
18       3.1                        0.80        1  
19       3.1                        0.80        1  
29       3.2                        1.10        2  
33       3.0                        0.80        2  
34       3.0                        0.80        2  
36       3.9                        1.18        2  
37       2.0                        0.80        1  
44       3.6                        1.00        2  
48       3.0                        1.00        1  
50       2.5                        0.70        1  
51       3.4                        1.00        1  
57       2.7                        0.90        2  
60       3.0                        1.00        1  
70       3.0                        1.20        1  
71       1.8                        0.60        1  
72       2.0                        0.80        1  
75       2.5                        0.90        2  
77       2.1                        0.80        1  
79       1.6                        0.50        1  
80       1.8                        0.60        1  
103      3.3                        1.20        2  
110      2.3                        0.71        2  
123      3.1                        0.90        1  
128      3.9                        0.95        1  
131      2.5                        0.75        2  
132      3.5                        1.16        2  
..       ...                         ...      ...  
443      3.2                        1.06        1  
447      3.5                        0.80        1  
448      2.6                        0.70        1  
449      3.1                        1.00        1  
455      3.4                        1.00        1  
460      2.5                        0.80        1  
461      4.1                        1.51        1  
464      1.4                        0.45        2  
465      2.0                        0.50        2  
466      1.9                        0.60        2  
467      3.1                        0.80        2  
471      2.9                        0.70        2  
485      2.8                        0.80        1  
486      3.0                        0.80        1  
490      3.6                        1.16        1  
492      3.3                        0.70        1  
510      4.6                        1.00        2  
522      3.7                        0.80        1  
525      3.9                        0.90        2  
530      3.8                        1.10        2  
533      1.0                        0.30        1  
537      3.6                        0.90        1  
539      3.5                        0.90        2  
544      3.2                        0.80        1  
545      2.2                        0.90        2  
547      2.3                        0.40        1  
549      4.9                        1.60        1  
564      2.9                        0.90        2  
566      4.0                        1.00        2  
568      3.5                        1.02        1  

[142 rows x 11 columns])

Variables sintéticas

Por último, sería conveniente estudiar la necesidad de crear variables sintéticas en función de las variables actuales. El uso de estas variables permite que los algorítmos de machine learning funcionen mejor al tratar sobre una variable que está estudiada y sabemos que proporciona información determinante.

Evaluando los datos, podría ser interesante una variable para las proteinas totales y la bilirrubina total pero ya que dichas variables ya están en el conjunto de datos no hay necesidad de generar variables sintéticas.

Conclusiones

Los algoritmos de machine learning son unas herramientass increíbles que nos permiten resolver problemas que de otra manera sería imposible de resolver. Como todo, tienen un inconveniente: los datos a utilizar y su complejidad. Por eso, un paso previo e importantísimo es el tratamiento de dichos datos.

En esta práctica hemos emulado una auditoría que nos ha permitido profundizar en el estudio y manejo de un conjunto de datos en el que en principio no teníamos información relevante sobre los mismos. Junto con los conocimientos impartidos en las clases, hemos sido capaces de interpretar y analizar un conjunto de datos relacionados con una enfermedad hepática lo que nos ha permitido profundizar y afianzar dichos conocimientos.

Hemos visto que la mayoría de los atributos se correlaciónan por igual. Esto indica que la información que porporcionan por separado relevante para la clasificación. También hemos observado que la edad y el sexo son parámetros poco determinantes dado el caso que tratamos aunque pudiera ser interesante la división por dichos datos. Esta división está mas orientada a un estudio estadístico que a una aplicación directa.

Como curiosidad comentar que hemos comentado este conjunto de datos y nuestras conclusiones con un equipo médico (amigos de uno de los integrantes) que nos ha confirmado que los datos relevantes son todos menos la edad y el sexo pues no suelen ser determinantes para las enfermedades hepáticas comunes.