Una desmitificación del aprendizaje automático (Machine Learning)

February 7, 2020

Cómo predecir el tiempo, con lápiz y papel

Imagina que se te asigna la tarea de crear un sistema capaz de predecir el tiempo en tu ciudad. Olvida la informática: solo cuentas con un papel, un bolígrafo y tu imaginación. ¡Ah! Y también con unos cuantos equipos para medir variables ambientales como la temperatura, humedad, presión, insolación, etc. Si crees que el tiempo a lo largo de los días previos tiene algún tipo de conexión con el tiempo de mañana, querrás usar todas estas variables para crear algún tipo de regla que prediga el clima más probable mañana.

La primera cosa que necesitarás es recoger información: a lo largo de unos meses tomarás notas diarias del tiempo (lluvioso, soleado, nublado, etc.) y de tus variables (temperatura, humedad, presión, insolación, etc.).

Una vez recogida una cantidad de datos suficiente, encaras la fase difícil: ¿cómo usarlos para crear reglas? Una primera estrategia podría ser mirar los datos hasta que comienzas a ver algunos patrones (por ejemplo, tras un día de lluvia, si la presión sube, entonces el día siguiente hará sol). Básicamente estarías usando los datos para convertirte en un experto del clima de tu ciudad, y usarías esta nueva habilidad para crear tu sistema predictivo, que consistiría en muchas reglas como las del ejemplo anterior.

Esta estrategia podría ser suficiente para construir un sistema simple, que prediga un resultado sencillo (lluvia/no lluvia/sol) usando solo unas pocas variables. Un problema importante de esta aproximación es que probablemente has gastado una cantidad inmensa de tiempo mirando los datos y creando estas reglas. Otro problema es que probablemente habrás acabado con 50 páginas de reglas y patrones y, a la hora de usar tu sistema predictivo, vas a tener que sufrir el tedio de revisarlas una a una, comprobando cuál aplica al día de hoy. Y muy probablemente, si no has cubierto todas las posibilidades al crear tus reglas, te tirarás de los pelos cuando veas que unas reglas contradicen a otras (una dice que dada la temperatura de hoy, mañana lloverá, pero otra dice que dada la insolación y humedad de hoy, hará sol).

Una manera de hacer nuestro sistema más fácil de utilizar sería contratar a una programadora que lo implemente en forma de algoritmo. Éste estaría compuesto de todas tus reglas, y sería capaz de tomar las variables iniciales, y aplicar estas reglas rápidamente y en el orden correcto para calcular el resultado.

Otra posibilidad sería transformar nuestro libro de reglas en una ecuación. Podría ser algo así (donde si y > 1, hará sol, si no, lloverá) (por favor, nunca uses esta ecuación):

Ecuación 1: ecuación inventada para predecir el clima mañana.

De esta manera podrás predecir el tiempo haciendo unas pocos cálculos sobre tus variables iniciales. La parte negativa es que has tenido que contratar a alguien con conocimiento de matemáticas, y después enseñarle sobre los patrones del tiempo. ¡Pero el resultado es muy exitoso! Cuentas con una ecuación que resume todo tu conocimiento del tiempo, y que puedes usar para predecir el tiempo haciendo unos pocos cálculos en un par de minutos (tal vez incluso en segundos, si decides usar tecnologías de última generación como Excel).

Finalmente, tras varios meses de un tedioso trabajo consistente en recoger datos, examinarlos para convertirte en un experto climatólogo, enseñarle tus reglas a una persona experta en matemáticas o programación, y pagarle (lo cual te ha dejado sin presupuesto para ese nuevo barómetro), tienes un sistema funcional. Se lo presentas a tu equipo. Lo revisan, y te avisan de que ahora debería funcionar no solo en Barcelona, sino también en Madrid. Tienes que recoger nuevos datos, crear nuevas reglas, y trabajar de nuevo con tu matemática para crear una nueva ecuación que también funcione en Madrid. Con los ojos húmedos, silenciosamente, colocas tus cosas en cajas antes de abandonar la oficina para siempre.

Utilizando aprendizaje automático

¿Cómo crearías un sistema predictivo que pueda adaptarse fácilmente a nuevas ciudades? ¿Y si en lugar de solo unas pocas variables tienes cientos de ellas? ¿Qué ocurre si tienes montones de datos (disponibles públicamente, por ejemplo), pero tienes que construir tu modelo en una sola semana, y no puedes pasar meses inspeccionando los datos para extraer patrones y reglas a mano?

El aprendizaje automático (Machine Learning en inglés, ML a partir de ahora)soluciona estos problemas. Reemplaza tu trabajo de construir cientos de reglas, y el trabajo de la programadora o el matemático. Consiste en una serie de algoritmos capaces de mirar tus datos y de, usando algunos trucos estadísticos, crear automáticamente una serie de reglas como las que tú creaste.

Otra manera de ver el ML es como una serie de métodos que crean de forma automática tu función matemática, simplemente enseñándole tus datos al algoritmo adecuado. Una vez entrenado, el algoritmo se comportará aproximadamente como tu función: recibirá un conjunto de variables de entrada, y calculará una predicción.

Los algoritmos de ML son muy variados. Algunos de ellos, como los árboles de decisión, producen reglas de manera muy similar a como tú lo hiciste:

Otros, como los modelos de Markov, pueden modelar cadenas de estados cambiantes (como el tiempo), calculando las probabilidades de cambio entre varios estados (por ejemplo, de lluvioso a soleado):

Hay muchos otros algoritmos de ML, que funcionarán mejor o peor según el caso de uso (dependiendo del número de variables, la cantidad de datos, la velocidad de ejecución que necesites, etc.). Un algoritmo especialmente versátil (y de moda) son las redes neuronales. El tipo más sencillo hace algo muy simple: toma las variables de entrada (que has de colocar en forma de vector), y las multiplica por una matriz W1, creando un vector de resultados O1. O1 es la predicción de tu red neuronal: puede ser un vector con una sola dimensión (es decir, solamente un número), donde un valor de 1 indica que hará sol, y un valor de 0 indica que tendremos un día penoso). ¿Dónde está la magia? Realmente en ningún sitio; la gracia de todo esto es que existe una manera de enseñarle a tu red neuronal un conjunto de ejemplos, de modo que la propia red adapte la matriz W1 para realizar predicciones correctas. Aumentando el tamaño de la matriz W1, o añadiendo más multiplicaciones matriciales después de O1 con nuevas matrices W2, W3, etc. (más capas) podemos hacer la red más potente. La lección es que una red lo suficientemente grande (en tamaño de las capas y número de capas) puede aprender a imitar (casi) cualquier función matemática, como la que tú creaste con ayuda de tu matemática.

La conclusión es que el uso de redes neuronales, u otras técnicas de ML, te permitirá de forma automática contar con algoritmos que imitan funciones matemáticas, tal y como la que desarrollaste. No hará falta examinar los datos durante meses, ni convertirte en experto del clima ni desarrollar reglas de forma cuidadosa. Puedes simplemente usar un algoritmo que hará todo esto por ti. Es probable en cualquier caso que, si no te conviertes en científico de datos lo suficientemente rápido, acabes igualmente con los ojos húmedos, silenciosamente colocando tus cosas en cajas antes de abandonar la oficina para siempre.



Image Description

Alvaro Abella

Chief Data Scientist