¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Inteligencia artificial fácil
  3. Estadísticas para comprender los datos
Extrait - Inteligencia artificial fácil Machine Learning y Deep Learning prácticos
Extractos del libro
Inteligencia artificial fácil Machine Learning y Deep Learning prácticos
3 opiniones
Volver a la página de compra del libro

Estadísticas para comprender los datos

Lo que vamos a descubrir y requisitos previos

En cuanto a Machine Learning, todo es matemático o, más concretamente, todo es estadístico. En efecto, los algoritmos de aprendizaje están fundamentados sobre diversos enfoques estadísticos que permiten que las máquinas «aprendan», hagan predicciones y resuelvan problemas.

Más allá de las predicciones, las estadísticas también se utilizan en la fase de preparación de los datos de aprendizaje y de la comprensión de estos.

En este capítulo vamos a abordar las nociones básicas de estadística que nos permitirán comprender mejor los conjuntos de datos con los que nos encontraremos durante todo el libro, y también en los distintos proyectos personales dedicados a Machine Learning. Estas nociones también nos permitirán comprender el funcionamiento de los algoritmos que vamos a utilizar durante los casos prácticos que marcan los diferentes conceptos en este libro.

No se preocupe. El objetivo de este capítulo no es aburrirle con un montón de fórmulas complejas. Nos quedaremos a un nivel de comprensión accesible para todos y las nociones que vamos a abordar se ilustrarán ayudándonos de ejemplos.

Requisitos necesarios para empezar bien este capítulo: haber leído el capítulo Los fundamentos del lenguaje Python.

Las estadísticas, una herramienta para ayudar a comprender los datos

En los próximos capítulos, tendremos que analizar datos de aprendizaje para permitir que nuestra máquina aprenda a resolver un problema mediante predicciones. Como veremos más adelante, para que la máquina aprenda no es suficiente con elegir un conjunto de observaciones, un algoritmo de aprendizaje y hacer clic en un botón mientras esperamos conseguir una predicción correcta. Nos veremos obligados a comprender por nosotros mismos este conjunto de observaciones para seleccionar la información adecuada e importante. Para ello, las estadísticas serán de mucha ayuda.

Por supuesto, para lo relacionado con la programación utilizaremos módulos de Python específicos que incluyen todas las funcionalidades de análisis necesarias. Pero en este capítulo le proponemos dinamizar cada noción estadística con algunas líneas de programa «casero», es decir, sin usar bibliotecas específicas. En otros, esto permite comprender mejor la lógica matemática que se esconde detrás de cada noción, y también profundizar en el conocimiento y el uso del lenguaje Python.

El código Python se puede utilizar en un proyecto nuevo que habrá creado con antelación en PyCharm. Sin embargo, en este capítulo no detallaremos todos los pormenores...

Estudio de caso práctico: una serie de notas

Vamos a utilizar un caso práctico que se usa muchas veces en la presentación de las nociones básicas de estadísticas: la descripción y el análisis de una serie de notas que ha obtenido un estudiante. Este caso práctico es sencillo y todo el mundo se siente implicado porque se basa en nuestra experiencia. Además, nos permitirá entender las nociones necesarias para la comprensión de datos que también son aplicables a los casos más complejos que vamos a tratar en los capítulos siguientes.

Este es el contexto: actualmente está en formación para convertirse en experto en inteligencia artificial y acaban de darle sus notas trimestrales, que puede ver a continuación (se trata de una puntuación sobre 20):

3,19,10,15,14,12,9,8,11,12,11,12,13,11,14,16 

Como puede comprobar, esta pequeña serie estadística contiene muchas notas distintas. Primero vamos a proceder a la deducción de una tendencia central, es decir, intentar determinar un valor alrededor del que se concentra el conjunto de las notas. Luego estudiaremos su dispersión y al final buscaremos la existencia de datos aberrantes, es decir, no representativos del conjunto de las notas. Todos recordamos un examen donde no habíamos repasado los conceptos principales y obtuvimos una nota no representativa de las notas que habíamos...

Conceptos de vocabulario antes de empezar

1. Observaciones y características

Todos los estudios se realizan sobre una población formada por individuos. Estos individuos pueden ser personas o cosas. Cada individuo está formado por caracteres. En Machine Learning, a los individuos se les llama observaciones, y a los caracteres, características.

2. Los tipos de datos

Hay dos tipos de datos: los datos cuantitativos y los datos cualitativos.

Los datos cuantitativos son números con los que se pueden hacer operaciones matemáticas. Estos datos se pueden clasificar en dos grupos distintos:

  • Los datos cuantitativos continuos tienen un valor infinito y se pueden enumerar (cantidad de elementos de una lista…).

  • Los datos cuantitativos discretos tienen un valor finito dentro de un intervalo de valores (la cantidad de patas de un animal…).

En cuanto a los datos cualitativos, estos tienen el propósito de describir cualidades propias de los datos: ¿es un hombre, una mujer?, ¿es alto o bajo?

Estos datos no son números y también están repartidos en dos grupos distintos:

  • Los datos cualitativos de categorías no se pueden ordenar (hombre o mujer, perro o gato…).

  • Los datos cualitativos ordinales se pueden ordenar (pequeño, mediano, grande).

Conocer los distintos tipos de datos permite obtener un primer análisis de los datos y los tratamientos que realizaremos.

Aplicaciones de Python

1. Módulos dedicados

Aunque en este capítulo no vamos a recordar la creación de un proyecto Python dedicado a las estadísticas y el uso de módulos externos, es importante saber que en los capítulos siguientes estaremos bien equipados para el análisis estadístico gracias al lenguaje Python. De hecho, verá que utilizaremos con mucha frecuencia el módulo Pandas para el análisis, y para las manipulaciones de las listas utilizaremos el módulo numpy. Estos dos módulos ofrecen funciones muy prácticas y nos evitan que tengamos que programarlas nosotros mismos.

En el módulo Pandas (llamado con el alias pnd en el programa que aparece debajo), el conjunto de las observaciones se denomina un DataFrame. Para nuestro caso de estudio, eso se traduce en esta línea de código:

observaciones =  
pnd.DataFrame({'NOTAS':np.array([3,19,10,15,14,12,9,8,11,12,  
11,12,13,11,14,16])}) 

Nuestro DataFrame observaciones contiene una característica Notas en forma de una tabla (array) que contiene el conjunto de las notas.

2. Representación particular de caso práctico

Para nuestro caso práctico disponemos de una sola observación (usted como individuo) y de 16 características que corresponden cada una de sus notas. Esta observación se puede traducir de esta forma:

NOMBRE...

Medidas de tendencia central

Las medidas de tendencia central sirven para sintetizar la serie estadística estudiada mediante una pequeña cantidad de valores «características». Dicho de otro modo, vamos a intentar encontrar una determinada cantidad de valores alrededor de los que se reagrupa el conjunto de las notas que ha obtenido durante los distintos exámenes.

1. Conocer la cantidad de observaciones y de características

Cuando estudiamos un conjunto de observaciones, lo primero que hay que saber es su cantidad.

En efecto, conociendo la cantidad de observaciones y comparándola con la cantidad de características documentadas, se puede detectar con rapidez si a algunas observaciones les faltan características. Conocer la cantidad de observaciones también permite saber si disponemos de bastantes datos para permitir un aprendizaje.

Para conocer la cantidad de características que incluye nuestro conjunto de observaciones, podemos utilizar la función de Python count().

print("— CANTIDAD DE OBSERVACIONES --") 
n = caracteristica.count() 
print("Cantidad de observaciones = " + str(n)) 

Lo que en nuestro caso nos da un valor de 16 características, correspondiente a las 16 notas.

Para conocer la cantidad de observaciones en Excel, solo hay que utilizar la función CONTARA(A2:A17) en una celda nueva de su hoja de cálculo.

2. Los valores mínimos y máximos

Siempre es interesante conocer el valor mínimo y máximo de un conjunto de observaciones para establecer su rango.

En nuestro caso, después de clasificar nuestras observaciones en orden creciente, se constata que el valor mínimo es 3 y que el valor máximo es 19. Por lo tanto, el rango es 19-3, es decir, 16, lo que muestra una fuerte dispersión de datos. En efecto, si las notas obtenidas eran estas:

12,13,14,15,12,13,12,15,15,12,11,11,14,15,16,11 
  • La cantidad de notas sería 16, como en nuestro ejemplo.

  • La nota mínima sería 11.

  • La nota máxima sería 16.

El rango sería 5, mostrando que la dispersión de la serie es débil. Es decir, que los valores de las notas serían cercanos entre ellos. Al contrario de lo que sucede en nuestro caso práctico.

En Python, para conocer los valores mínimos y máximos de nuestra serie estadística, tenemos...

Primeras deducciones

Retomemos las distintas medidas de la tendencia central para nuestro conjunto de observaciones:

  • 11,875 para la media

  • 12 para la mediana

  • 11 y 12 para la moda

El objetivo de la tendencia central es reducir el conjunto de valores de una serie de observaciones mediante un número que la resuma. En nuestro caso, este número se puede evaluar como 12. Lo que significa que, si tuviéramos que resumir en una sola todas las notas obtenidas en los exámenes de inteligencia artificial, esta sería 12, a pesar de las notas 15, 16 y 19 obtenidas, porque la mayor parte de sus notas se agrupa en torno a este valor.

Por lo tanto, acabamos de sintetizar 16 notas en una sola, lo que permite obtener una visión general del valor de la serie estadística. En nuestro caso, solo hemos tratado algunos datos, pero en los capítulos siguientes trataremos ejemplos que contienen más de 1000 valores. Sin los cálculos de la media, la mediana y la moda, es difícil hacerse una idea del valor general de una característica.

Tomemos el ejemplo de una serie que reagrupa los precios de los coches vendidos por un concesionario de automóviles. A la vista de la cantidad de opciones que pueden modificar el precio de un vehículo, es evidente que la serie incluirá una cierta cantidad de valores distintos. Pero si, como consumidor, desea planear un presupuesto para comprarse un coche...

La dispersión

La dispersión de una serie de observaciones mide la variabilidad de la serie. ¿Ha obtenido muchas notas con el mismo valor? ¿O notas distintas? Es lo que vamos a descubrir empezando por calcular la extensión de la serie de observaciones.

1. El rango

El rango de una serie de observaciones se efectúa calculando la diferencia entre el valor máximo y el valor mínimo de la serie.

Si el rango es muy pequeño, entonces se puede afirmar que hay poca desviación entre todos los valores de la serie. Esta serie se denomina homogénea.

En el caso contrario, se puede considerar que el rango es grande, pero no que sea heterogénea porque es posible que esta desviación se deba a un valor aberrante.

Tomemos el ejemplo de la serie siguiente:

8,10,11,12,12,11,9: El rango es 4 (12-8)

Luego otra serie que tiene estos valores:

1,10,11,12,12,11,19: El rango es 18 (19-1)

A pesar de tener un rango grande, la serie es homogénea de todos modos (se concentra alrededor de 12) porque los valores que crean este rango grande (19 y 1) se pueden considerar como datos extremos, es decir, aberrantes (outliers en inglés).

Respecto a nuestro estudio del caso práctico, el rango es 16 porque el valor máximo es 19 y el valor mínimo es 3 (19 - 3 = 16). Por lo tanto, podemos decir que hemos calculado el rango de nuestra serie y es amplio.

Este es el programa de Python que permite calcular el rango:

valoresOrdenados = caracteristica.sort_values()  
valoresOrdenados = valoresOrdenados.reset_index(drop=True)  
  
print ("Rango de la serie =  
"+str(valoresOrdenados[len(valoresOrdenados)-1]
-valoresOrdenados[0])) 

Recuerde que es obligatorio que los valores de la característica estén ordenados antes de poder calcular su rango.

2. La desviación típica (desviación estándar)

¿Cómo podemos saber el grado de dispersión de nuestro conjunto de observaciones? Gracias a la desviación típica.

Según el INE, la desviación típica sirve para medir la dispersión o escalonamiento de un conjunto de valores en torno a su media. Cuanto menor es la desviación típica, más homogénea es la población.

Por eso, calcular la desviación típica nos permitirá saber si todas las notas...

Detección de valores extremos (outliers en inglés)

Además del hecho de expresar la dispersión de los datos en torno a la mediana, el rango intercuartil también permite detectar los valores extremos de la serie de observaciones gracias al método de Tukey.

Los diagramas de caja y bigotes de John Wilder Tukey

Hay muchos métodos de detección de los valores extremos de una serie, pero vamos a explicar el de Tukey porque es sencillo ponerlo en práctica.

John Wilder Tukey (16 de junio de 1915-26 de julio de 2000) es uno de los estadísticos estadounidenses más importantes del siglo XX. Creó y desarrolló numerosos métodos estadísticos. En 1977 publicó su libro más difundido, «Análisis exploratorio de datos», que trata de métodos de análisis descriptivos y de representación gráfica de los datos. En este libro presenta, entre otros, el principio del diagrama de caja y bigotes (o diagrama de cuartiles), o el de tallo y hojas (stem-and-leaf), una variante de los histogramas (fuente: Wikipedia).

El método consiste en determinar los valores de los límites inferiores y superiores de una caja (también llamada caja con bigotes) de la siguiente manera:

  • El valor del límite inferior es igual al valor del primer cuartil - (1,5 x el rango intercuartil).

  • El límite superior es igual al valor...

Tratamiento de los valores extremos

Muy a menudo, los valores extremos expresan anomalías. En nuestro caso, ¿por qué hemos obtenido un 3 cuando la mayor parte de sus notas están en torno a 12? ¿Falta de concentración? ¿Fatiga? ¿Estrés? ¿Tema sin revisar? Lo mismo pasa para el valor 19: ¿un examen demasiado sencillo? ¿Incluso se podría pensar que ha hecho trampa?

Lo primero que hay que hacer cuando se detecta un valor extremo es garantizar que no se ha producido ningún error de introducción dentro de los valores de la serie de observaciones.

Si no hay error de introducción, ¿entonces se pueden explicar formalmente los valores extremos (máquina de medición mal calibrada u otras posibilidades)? Si la respuesta es afirmativa, el valor extremo se puede eliminar.

En caso de que no se pueda explicar claramente el motivo de estos valores extremos, entonces podemos proponer hipótesis que habrá que comprobar antes de realizar cualquier desviación de los valores.

La eliminación de los valores extremos no es para tomársela a la ligera. Eliminar un valor puede tener un gran impacto sobre el significado, interpretación y uso posterior de los datos de la serie de observaciones.

Sin embargo, no hay una fórmula mágica que permite asegurar o no el derecho de eliminación del valor extremo. Tendrá...

Un poco de visualización gráfica

Una de las etapas importantes cuando vamos a realizar el análisis de una serie de observaciones es hacer una representación gráfica.

Esto nos permite principalmente darnos cuenta con rapidez de las características específicas de la serie (dispersión, valor aberrante), y facilita, entre otras cosas, la validación de nuestras hipótesis de cálculo e interpretación.

images/ch03_11.PNG

Representación gráfica con el módulo de Python MatplotLib

Se constata fácilmente que el valor 3 se puede considerar como valor extremo porque está alejado del histograma general, pero no ocurre lo mismo con el valor 19. También podemos constatar que las notas obtenidas se sitúan alrededor de la media y de la mediana (es decir, el valor 12). El gráfico de caja y bigotes muestra los valores aberrantes.

Para realizar la visualización de los datos en Python, utilizamos el módulo matplotlib usado con el seudónimo plt.

def visualizacion(self,media,mediana,cuartil_1,cuartil_2,cuartil 
_3):  
  
   plt.subplot(2, 2, 1)  
   plt.hist(self.caracteristica)  
   plt.title("Histograma y media")  
   plt.axvline(media, color='red', linestyle='dashed',  
linewidth=1,label = str(media))  
 ...

Conclusión sobre los datos

A pesar de una fuerte dispersión calculada con la desviación típica, una vez descartados los valores no representativos, las notas obtenidas se concentran alrededor de la media. Por lo tanto, si tuviéramos que interpretar sus notas, diríamos que se sitúan alrededor de 12.

¿Qué significa esto? Eso depende del contexto del problema.

Si tuviéramos que predecir si va a convertirse en experto/a en inteligencia artificial juzgando según las notas obtenidas en esta asignatura, tendríamos que estudiar las notas obtenidas por los otros estudiantes y encontrar una correlación entre las notas obtenidas y el hecho de convertirse en experto/a.

Si constatamos el hecho de que la mayor parte de los expertos han obtenido un valor medio de 12 en sus exámenes, eso podría significar que tiene muchas posibilidades de convertirse en experto. En el caso de que el valor medio de la nota obtenida por los expertos fuera 18, eso haría descender mucho sus posibilidades.

Distribución gaussiana y ley normal

Vamos a alejarnos un poco del análisis descriptivo de nuestros datos a fin de abordar un punto importante que será útil para la comprensión de algunos logaritmos de Machine Learning: la distribución gaussiana, también llamada distribución normal aplicada a las estadísticas y a las probabilidades.

1. Un ejemplo para conocernos mejor

Para conocer mejor la distribución gaussiana, vamos a dejar a un lado las notas obtenidas en el examen y vamos a concentrarnos en las críticas de películas.

Estas son las opiniones (calificadas de 0 a 5) obtenidas por una película, donde 5 es la mejor nota que puede obtener la película: las famosas 5 estrellas que podemos encontrar en todos los sitios de críticas de cine.

Opinión

Cantidad de votantes

5

42

4

96

3

132

2

124

1

88

0

58

Si hacemos una representación gráfica de estos datos, obtenemos una forma particular: una campana.

images/Ch03_12.PNG

Curva de Gauss

Ante este tipo de gráfico, podemos afirmar que la serie de observaciones sigue una ley matemática llamada ley normal o ley de Gauss (en honor a Karl Friederich Gauss (1777-1855)).

En estadística y en probabilidad, la ley normal permite representar muchos fenómenos aleatorios naturales. Cuando una serie de observaciones obedece a la ley normal, se puede afirmar:

  • El 50 % de las observaciones están por encima de la media.

  • El 50 % de las observaciones están por debajo de la media.

  • El 68 % de las observaciones están comprendidas en el intervalo que va desde la media - la desviación típica hasta la media + la desviación típica.

  • El 95 % de las observaciones están comprendidas en el intervalo que va desde la media - 2* la desviación típica hasta la media + 2* la desviación típica.

  • El 99,7 % de las observaciones están comprendidas en el intervalo que va desde la media - 3* la desviación típica hasta la media + 3* la desviación típica.

Ahora vamos a hacer algunos cálculos que al mismo tiempo nos permitirán ver cómo utilizar la idea de frecuencia en los cálculos de media y de desviación típica.

Opinión (Xi)

Cantidad de votantes (Ni)

5

40

4

99

3

145

2

133

1

96

0

40

Las opiniones corresponden a nuestros valores observados...

Una clase de Python para ayudarle a analizar sus datos

El código de Python que aparece en todos los apartados de este capítulo es objeto de la creación de una clase que le permite analizar sus datos. Gracias a esta clase, encontrará el análisis que acabamos de hacer junto con la representación gráfica de una serie de observaciones.

Puede descargar esta clase en el sitio del editor. Su uso es bastante sencillo, solo tiene que darle una característica de un DataFrame para obtener su análisis.

Las clases son un medio de reunir datos y funciones (fuente Python.org).

En el próximo capítulo tendremos la ocasión de usar esta clase. Pero en el código suministrado se propone un ejemplo de uso retomando los datos que acabamos de usar. Por eso es recomendable crear un proyecto nuevo de Python e importar los módulos necesarios, como se indica en los comentarios:

  
import pandas as pnd  
import JMPEstadisticas as jmp  
import numpy as np  
  
#--- CREACIÓN DE UN DATAFRAME ----  
observaciones =  
pnd.DataFrame({'NOTAS':np.array([3,19,10,15,14,12,9,8,11,12,11,12  
,13,11,14,16])})  
  
  
#--- ANÁLISIS DE UNA CARACTERÍSTICA ---  
stats = jmp.JMPEstadisticas(observaciones['NOTAS'])  
stats.analisisCaracteristica()...

¿Cuántas observaciones son necesarias para un aprendizaje correcto?

Como conclusión, vamos a responder a una pregunta que se plantea con frecuencia: «¿Cuántos datos son necesarios para un aprendizaje correcto?». La respuesta es que eso depende del caso práctico, de la precisión de la predicción que se ha de realizar y del algoritmo utilizado.

Si desea tener una precisión muy alta en sus predicciones, entonces debe proponerle a su algoritmo un panel de observaciones lo más representativo posible, lo que requiere una gran cantidad de datos.

A continuación viene el tipo de algoritmo utilizado, que a veces está directamente relacionado con el punto anterior. Ciertos algoritmos necesitan algunos miles de observaciones para ser suficientemente eficaces allí donde otros necesitan varios miles, especialmente en el caso de aprendizaje en el sector de la clasificación de imágenes.

Una pregunta complementaria que hay que hacerse es: ¿de qué presupuesto dispone? En efecto, como podrá comprobar a medida que avance en la aventura de la inteligencia artificial, los datos necesarios para realizar buenos aprendizajes son muy escasos. Y como lo que es escaso es caro, disponer de datos de calidad tiene un coste.

Como puede comprobar, no hay una respuesta fácil a la pregunta anterior. Si nos basamos en el módulo SciKit-Learn de Python que permite...