Deformación profesional en el machine learning

Cada profesión tiene sus referentes. Del hecho de pasarse muchas jornadas laborales focalizado en una actividad, hace que la perspectiva global del profesional adquiera sesgo. Podríamos considerar que cada profesión, o más bien, cada área de conocimiento se relaciona con una faceta de la realidad. Y así, de la misma manera que un atlas recubre la Tierra con un conjunto de mapas, sin ninguno de ellos poder describir la globalidad, cada una de las áreas de conocimiento describe una pequeña parcela de la realidad, sin que una de ellas gobierne todas las otras.

Para crear un mapa necesitamos un centro o un origen de coordenadas. En este origen, el mapa puede describirse con exactitud, pero a medida que nos alejamos de éste, perdemos precisión y empezamos a solaparnos con los mapas vecinos. Del mismo modo, para generar un área de conocimiento necesitamos puntos de referencia en base a los cuales comparar las ideas o acciones que van surgiendo. Un punto de referencia es lo primero en lo que nos fijamos. Los puntos de referencia vienen forjados por el constante contacto con esa parte de la realidad. Nacen de la necesidad de poder nombrar los hechos e ideas de una manera cómoda. Su tarea no es cualificar los hechos de buenos o malos, sino más bien ubicarlos para poder tratar con ellos. Un mismo hecho, entonces, se puede describir de maneras diferentes, respecto a diferentes orígenes de coordenadas. Y, análogamente a los mapas, una vez establecido el origen de coordenadas o puntos de referencia, algunos hechos pueden describirse con facilidad, mientras que otros más lejanos no llegan a ser explicados bajo ese punto de vista. La claridad con la que podamos razonar sobre los hechos, está directamente relacionada a la calidad de los puntos de referencia. Es más, dado que los humanos no podemos manejar muchas cosas a la vez (nuestra RAM mental tiene límites), es de desear que el número de elementos de referencia tienda a ser reducido.

Me viene a la mente las diferencias de perspectiva entre psicólogos y sociólogos. Los primeros toman como punto de referencia el individuo. Piensan que las decisiones o comportamientos de cada persona se derivan de su carácter y sentimientos. Mientras que los otros toman como punto de referencia el grupo. Pudiendo interpretar así cada una de las decisiones individuales como reflejo de algo que está pasando en el grupo o que las acciones individuales son una respuesta a la dinámica externa del grupo. Claramente, si un psicólogo quisiese poder explicar el comportamiento de un grupo grande, intentado entender individuo a individuo, le resultaría una tarea interminable. Por otro lado, un sociólogo, desde una perspectiva agregada, no puede explicar el comportamiento de cada uno de los individuos del grupo. Al final, pensar que los humanos somos 100% individuos o elementos de una comunidad nos podría dar una visión limitada de la realidad.

Así que nos podríamos preguntar, ¿en qué es lo primero que se fija un profesional del machine learning? Hemos de buscar, pues, entre los elementos del machine learning, cuáles de ellos son tan prioritarios, que el buen comportamiento del resto se deriva simplemente de una buena gestión de estos.

 

¿Qué es el machine learning y en qué se diferencia de la estadística clásica?

El machine learning es una disciplina que se incubó en los años 50s y 60s, fuertemente ligada a la aparición de los ordenadores. Es una mezcla entre computación, estadística, probabilidad y optimización. La principal diferencia con la estadística es su foco: la estadística está orientada a entender y explicar los procesos aleatorios, mientras que el machine learning está orientado a la predicción (y los procesos que conlleva).

Por ejemplo, imaginemos que tenemos un parking y queremos desarrollar un sistema que lea automáticamente las matrículas de los coches que van entrando. El enfoque en machine learning es el siguiente: recojamos imágenes de matrículas y etiquetémoslas (un humano lee las matrículas y las anota). Pongamos estos datos en un ordenador (lo que será una base de datos históricos), y elaboremos un sistema en el que dada una nueva imagen de una matrícula, pueda decirnos qué matrícula es.

Una manera de elaborar las imágenes sería la siguiente. Separamos los dígitos de cada imagen (con alguna técnica de tratamiento de imágenes). Tendremos entonces una base de datos de imágenes de números y letras. Un humano etiqueta cada uno de los dígitos de manera que el problema pasa a ser de lectura de dígitos. Cuando llega una nueva imagen de matrícula, el sistema separa cada uno de los dígitos y hace una predicción para cada uno de ellos por separado.

El sistema predictivo más básico es el siguiente. Cuando tenemos la nueva imagen de un dígito, miramos dentro de la base de datos de imágenes, a cuál se parece más y predecimos el número o letra que corresponda a dicha imagen. Puede pasar que, por casualidad, la imagen nueva o la histórica estén deformadas, y que a pesar de parecerse, la predicción no sea correcta. Para intentar subsanar este efecto, en vez de basar nuestra predicción en una sola imagen, podríamos buscar la k imágenes más parecidas y predecir el dígito que haya aparecido con más frecuencia. A esta técnica se le llama k-nearest neighbors.

En este ejemplo se puede vislumbrar que el foco está en acertar las matrículas de las nuevas imágenes. No nos importa cuál sea el procedimiento, siempre y cuando nos diga correctamente la matrícula. Por ejemplo, en el caso del k-nearest neighbors, no obtenemos ningún conocimiento general de cómo se clasifican las imágenes. Este enfoque es esencialmente diferente al de la estadística clásica, en el que generalmente se quieren entender cuáles son los factores de la imagen que nos permiten distinguir los números y letras.

El machine learning, para construir sus fundamentos, toma dos puntos de referencia que la estadística ya había descubierto hace tiempo, pero que no había hecho centrales en su campo. El primero es reconocer que todos los modelos son erróneos, pero algunos de ellos son útiles (‘All models are wrong but some are useful’, G.Box 1978). El segundo, íntimamente relacionado, es que el proceso de modelización debe de regirse por el principio de parsimonia: si dos modelos obtienen los mismos resultados, deberíamos escoger el de menor complejidad.

 

Todos los modelos son erróneos, pero algunos son útiles

Tomemos, por ejemplo, el enfoque clásico sobre regresión lineal en estadística. Consideremos modelos lineales de la forma

$$y =\alpha + \beta x$$

Supongamos que tenemos una base histórica de datos con \(n\) parejas \(\{(x_i, y_i)\}_n\) y queremos encontrar los coeficientes \(\alpha\) y \(\beta\) que se ajustan más a los datos. Para ello, se pude encontrar una fórmula (ampliamente conocida en el mundo de la estadística) que nos da una estimación en función de nuestros datos, a la que llamaremos \(\hat \alpha\) y \(\hat \beta\). Observemos que esta estimación ha sido tomada utilizando sólo \(n\) parejas de datos.

La teoría clásica de estadística dice que, si los datos han estado generados con un modelo lineal, $$y =\alpha + \beta x$$ y nosotros utilizamos la fórmula antes mencionada \(\hat \alpha\) y \(\hat \beta\), a medida que tengamos más datos, nuestros coeficientes \(\hat \alpha\) y \(\hat \beta\) serán cada vez más parecidos a los coeficientes \(\alpha\) y \(\beta\) que han generado los datos \(\{(x_i, y_i)\}_n\). Por tanto, si tuviésemos infinitos datos, tendríamos el valor exacto de \(\alpha\) y \(\beta\). Esta es la manera formal de decir que si la realidad es de este tipo, nuestro método de cálculo se irá aproximando cada vez más. Intrínsecamente, estamos asumiendo que hay una realidad válida que nosotros queremos descubrir.

La pregunta es, ¿cómo se puede saber si la realidad es de este tipo? ¿Qué pasa si modelizo la realidad utilizando un modelo lineal, cuando en realidad no lo es? La respuesta a la primera pregunta es que no lo podemos saber, salvo en el caso que seamos nosotros mismos los que generamos los datos explícitamente (o tengamos acceso a información de cómo se han generado los datos). Lo cual nos lleva a modelizar haciendo hipótesis, argumentando en cada caso si tiene sentido o no asumirlas. Para la segunda respuesta, la estadística clásica simplemente no tiene respuesta.

El enfoque del machine learning es diferente de base. Asumimos que nunca sabremos cómo se han generado los datos y nosotros escogemos varios modelos que creamos que podrían ser adecuados para cada problema en particular. Evaluaremos la validez del modelo en base a su capacidad predictiva. Es decir, entre los varios modelos que estudiemos, nos quedaremos con el que haga predicciones más precisas.

Esto nos lleva a la duda ¿hay algún algoritmo de aprendizaje que sea mejor que los otros en todos los casos? Si ese fuese el caso, nos centraríamos en este y nos olvidaríamos del resto. La respuesta es que no, y la da el teorema No Free Lunch. Éste dice que dado un algoritmo de aprendizaje, siempre se pueden generar datos de manera que el algoritmo aprenda tan lentamente como uno quiera, y por tanto, en estos datos en particular, el modelo funcionará muy mal. En la realidad, no hay toda la variedad de datos posibles, y por tanto algunos algoritmos funcionan mejor que otros.

Estos dos enfoques sitúan al analista/modelizador en posiciones fundamentalmente diferentes. Cuando uno piensa que hay una única realidad subyacente a la que uno se quiere acercar (pensemos por ejemplo en el caso de la modelización de ley de la gravedad), cuanto más capaz sea el analista de aproximarse a ella, mejor analista será. En cambio, cuando uno piensa que no hay modelos buenos o malos, sinó modelos útiles, el analista toma toda una serie de decisiones durante el proceso de modelización que afectan directamente al modelo resultante. Tales decisiones pueden ser más o menos objetivas, pero es esencial que estén bien argumentadas. A diferencia del caso anterior, donde el modelo encontrado es independiente de la persona que lo haya descubierto, en este caso el modelo final tiene una influencia directa del analista. Por eso, el analista asume una responsabilidad del proceso de modelización, entendiendo que los diferentes modelos tienen ventajas e inconvenientes (no sólo en términos de calidad predictiva, sino también respecto a la dificultad de implementación y mantenimiento, interpretabilidad, …). Pasa de pensar en términos de la corrección de modelos a valorar las posibles consecuencias de sus decisiones.

Podemos encontrar un buen ejemplo de estos temas en el caso del Big Data. A veces, lleva asociada la idea de que si recogemos una gran cantidad de datos (todas las variables explicativas que se nos puedan ocurrir y una gran cantidad de casos diferentes), llegará un momento que no habrá necesidad de modelos, porque los datos se explicarán por si mismos. A la práctica eso pasa en raras ocasiones, y suele provocar una indigestión de datos que dificulta cualquier proceso de análisis. Es más, de algún modo, se podría interpretar que este enfoque huye de la responsabilidad de modelizar la realidad; de que cada uno construye un modelo de la realidad (proceso nada trivial) que servirá de base para las decisiones futuras, con las consecuencias que ello pueda llevar.

 

Principio de parsimonia

Tal y como hemos comentado, el objetivo de un modelo de machine learning es dar una predicción precisa en nuevos casos, de manera que no se necesite la supervisión de un humano para determinar el resultado. Para encontrar el modelo adecuado, necesitamos un conjunto de datos históricos, con los que se ajusta el modelo. Familias de modelos hay muchas más en cantidad y variedad de las que nos podemos llegar a imaginar.

Para tener una idea de lo que llamamos familias de modelos y proceso de ajuste, ponemos el siguiente ejemplo. Vamos a crear un ejemplo sintético: nosotros creamos unos datos y luego pensamos en cómo los analizaríamos a posteriori si estos datos hubiesen llegado a nuestras manos. Tomemos una curva sinusoidal y tomamos al azar algunos puntos sobre la curva. En la práctica, cuando tomamos muestras, éstas vienen con imprecisiones. Por tanto, los puntos no se muestran exactamente sobre la curva, sino que están ligeramente perturbados. A esta perturbación la llamaremos ruido. En el gráfico, la curva sinusoidal es la discontinua, y los puntos representan la muestra de datos tomada. La curva sinusoidal, hace el papel de modelo generador de datos, al que rara vez (casi nunca) tenemos acceso.

d0

En la realidad, sólo nos llegaran los datos (los puntos) tal y como muestra la siguiente gráfica.

d-1

Entonces,  ¿cómo diseñaríamos un modelo predictor? Primeramente escogeríamos una familia de funciones que pensáramos que pueden aproximarlos: funciones lineales y funciones polinómicas de diferentes grados. Cada nivel engloba a su antecesor (las funciones lineales son un caso particular de funciones polnómicas). Esto significa que la complejidad de cada una de las familias es cada vez mayor. Luego, dentro de cada familia, buscaríamos cuál es la función que se ajusta más a los datos: cuál es la que minimiza el error entre lo que predice el modelo y los datos históricos.

 

grado 1

Grado 1

Grado 3

Grado 3

Grado 8

Grado 8

En las gráficas, las curvas continuas denotan los modelos predictivos. Por un lado, el modelo de grado 1 (lineal) no se ajusta lo suficiente a los puntos históricos. En el otro extremo, el de grado 8, es tan flexible que se puede ajustar cualquier cosa. En particular, se ajusta incluso el ruido, que en realidad no trae ningún tipo de información. No sólo eso, sino que además tienden a oscilar en las zonas fuera de los puntos, y por tanto la predicción en esas zonas comportaría un error predictivo elevado. Este efecto no es particular de este tipo de modelos, sino que pasa en general, como veremos más adelante. En este caso, como nosotros hemos creado el modelo subyacente, podemos afirmar que el modelo más adecuado es el de grado 3.

Aquí ya se puede vislumbrar el principio de parsimonia: si dos modelos se ajustan a los datos de la misma manera, nos quedaremos con el que tenga menor complejidad (para evitar las oscilaciones y sus consecuencias, anteriormente descritas).

 

Teoría del aprendizaje estadístico

A principios de los 70, Vladimir Vapnik y Alexander Chervonenkis empezaron a estudiar de una manera formal como caracterizar el proceso de aprendizaje y qué relación había entre el nivel de ajuste en los datos históricos y las predicciones futuras (teoría que acabaron sobre los años 90). Como método de aprendizaje entendemos por escoger

  • Una familia de funciones.
  • Un método para encontrar dentro de esta familia, la función que mejor se ajusta a los datos.

Generalmente, la función óptima no se ajustará en su totalidad a los datos, y cometerá un error de ajuste, al que llamaremos error de entrenamiento. Una vez finalizado el proceso de aprendizaje, la función óptima se utilizará para predecir nuevos casos, en los cuales también cometerá un error de predicción.

Intuitivamente, si un modelo se ha ajustado bien a los datos, esperaríamos que hiciese buenas predicciones. Pero no es así. Imaginemos, en el ejemplo de las matrículas, el siguiente método de predicción: dada una imagen, si ésta está exactamente en mi base de datos etiquetados, predeciré el número de matrícula (que ya sé). Si es una imagen nueva, entonces daré la matrícula 0000. Este método no comete ningún error cuando se utiliza en la base de datos histórica (¡siempre acierta!), pero siempre fallará con matrículas nuevas (incluso con clientes que ya hayan venido, porque la imagen tomada cada vez será ligeramente diferente). Lo que pasa aquí es que nuestro método, dicho informalmente, lo dice todo y no dice nada. Es tan flexible que se puede adaptar a cualquier base de datos histórica a la perfección y a la vez no nos es de ninguna utilidad para predecir nuevos casos.

Los modelos aprenden porque los diferentes casos (o datos) tienen cosas en común. Un modelo puede hacer una predicción porque implícitamente, busca dentro del nuevo caso, qué cosas hay en común con los casos del pasado. A esto se le llama generalizar. El problema del modelo degenerado explicado arriba es precisamente que trata cada caso como un caso en particular. Por ello es incapaz de decir nada sobre nuevos datos.

La pregunta, entonces es ¿qué relación hay entre el error de entrenamiento y el de predicción? Lo que descubrieron (más bien demostraron) Vapnik y Chervonenkis es que podía dar un intervalo de confianza para el error de predicción en función del error de entrenamiento, la cantidad de datos y la complejidad de la familia de funciones escogida. Dentro de esta tarea, primeramente hay que definir qué se entiende por complejidad de modelos. La complejidad de una familia de modelos es el número de datos que podría clasificar sin error alguno (sean cuales sean los datos y las respuestas de cada uno). Por ejemplo, utilizando rectas en el plano, se pueden clasificar a la perfección cualesquiera 3 datos tengamos, pero hay configuraciones con 4 datos que no se pueden clasificar perfectamente con rectas en el plano. Esta definición no es fácil de entender (y faltaría explicar con más precisión para entenderla bien). Pero a grandes rasgos, la complejidad de una familia de funciones es la cantidad de casos que pueda explicar sin error.

Entonces, suponiendo que el proceso de generación de datos no varíe, y llamando respectivamente \(\hat{err}\) al error de entrenamiento y \(err\) al error que se cometerá con las nuevas predicciones, Vapnik y Chervonenkis demostraron que: $$\hat{err} – I \leq err \leq \hat{err} + I $$

donde el término \(I\)

  • Disminuye a medida que la cantidad de datos de entrenamiento aumenta.
  • Aumenta cuando aumenta la complejidad de los modelos que estamos utilizando.

Por tanto, cuantos más datos tengamos, más precisión en nuestra inferencia (del error) tendremos. Y cuanto más simples sean los modelos que utilizamos, más seguros estaremos que el error obtenido durante el entrenamiento, será similar al que obtengamos en las predicciones futuras.

De este modo, si estamos utilizando modelos demasiado simples, nuestra falta de precisión en las predicciones será elevada, pero estable. Mientras que si utilizamos modelos demasiado complejos, a pesar de poder tener más precisión, el comportamiento futuro es más inseguro.

De aquí se deduce que si dos modelos tienen la misma precisión (o explican/predicen lo mismo), escogeremos el que tenga menor complejidad, porque estaremos más seguros de que en las predicciones futuras tendremos una precisión similar, que es precisamente el principio de parsimonia. Por tanto, Vapnik y Chervonenkis dieron una demostración formal de algo tan intuitivo como el principio de parsimonia.

 

¿Qué es lo primero en que se fija un profesional del machine learning?

Lo primero a comentar es en referencia a la validez de la realidad. Uno deja de preguntarse si la realidad es de una manera u otra, y empieza a buscar modelos que simplemente le sean útiles. Además, el teorema No Free Lunch refuerza el punto de vista expresado al inicio: cada área de conocimiento tiene su propia manera de pensar, con sus propios modelos y no hay una manera de pensar que domine uniformemente sobre todos los otros. Este punto de vista es realmente útil para enfocar comportamientos sociales. A veces se ha tratado de utilizar el método científico directamente sobre la sociedad: hay una realidad a describir que se puede destapar mediante experimentos. Pero hay una diferencia esencial. Mientras que los experimentos con la naturaleza no alteran sus leyes, las acciones sobre grupos sociales sí que pueden alterar sus normas de comportamiento. Es más, no es raro que nuestro propio punto de vista que tengamos a priori (antes de tomar acciones) pueda ser decisivo en los resultados que se obtengamos; pensemos en el caso sobre-simplificado de que si somos amables con la gente, la gente nos tratará bien, mientras que si somos antipáticos, la gente no colaborará con nosotros.

Pero en lo que realmente se fija un profesional del machine learning es en la complejidad. Se pregunta, para cada problema, si se está tratando con el nivel de complejidad necesaria. Y es tan erróneo dotar a una solución de demasiada complejidad, como restringirla de sobremanera. De algún modo, es necesario que la complejidad aportada por una solución corresponda a la complejidad de la realidad.

El machine learning no es la primera disciplina en la que la complejidad juega un papel primordial. En biología, por ejemplo, diferentes miembros se agrupan para obtener un resultado mayor de el que obtendrían por separado (sean órganos, individuos de una especie, etc.), y lo piensan en términos de complejidad. En programación, es importante que el código de un programa sea flexible para adaptarse a futuras implementaciones, pero si es demasiado flexible, su mantenimiento y corrección de errores se dispara. En estudios empresariales, se dice que la complejidad de las empresas debe poder responder a la complejidad del entorno, para poder dar respuesta a las necesidades.

 

Gestión humana de la complejidad

Es habitual que de vez en cuando en las discusiones populares se acaben comparando situaciones del pasado con el presente. Claramente el pasado tenía algunas deficiencias pero también tenía algunas ventajas. De hecho, lo mismo pasa con el presente. Cuando uno lo piensa bien, es difícil comparar pasado con presente, porque son situaciones muy diferentes. Decidir si el pasado era mejor o peor parece una discusión eterna. Sin embargo, sí que podríamos estar de acuerdo de que el presente es más complejo: la cantidad de habilidades y conocimientos que se le requiere a cualquier persona actualmente dista mucho de las que hubiese necesitado en el pasado. Es más, parece que esto va ir en aumento. Por ello, parece que uno de los problemas del futuro va a ser precisamente poder tratar toda la complejidad que se nos viene encima.

¿Cómo gestionamos la complejidad? ¿Cómo reaccionamos a ella? Generalmente, cuando tomamos una decisión, hay dos componentes: la real y la emocional. Y muy habitualmente es difícil discernir cuánto pesa cada parte en nuestras decisiones.

A veces cuando empezamos a vislumbrar la cantidad de casos que tenemos que tener en cuenta y que deberíamos de entender para poder gestionar una situación de manera fluida, empezamos a vernos una montaña y buscar atajos. Desearíamos que las cosas fueran más sencillas. Lo cual nos lleva a intentar simplificar. La pregunta es ¿simplificamos porque podemos agrupar casos, y por tanto estamos generalizando y aprendiendo? ¿o porque la complejidad nos supera y simplemente estamos negándola? Cuando un director de una empresa impone una norma sobre todos sus empleados, por un lado simplifica la gestión pero por el otro resta libertad (y en ciertos casos eso disminuye la productividad). ¿Lo ha decidido porque la variedad de empleados le desborda o porque ha entendido que puede simplificar su tarea sin tener efectos secundarios adversos (a corto/medio/largo plazo)? ¿Cuando un empleado no quiere saber nada de la gestión o el contexto del funcionamiento de su empresa, es porque está focalizado en su tarea y confía en la gestión de los demás, o es porque entender cosas que están fuera de su área de conocimiento le es muy costoso? Algunos de estos casos responderían a situaciones en las que la realidad es más compleja de lo que lo es nuestro enfoque, y eso produce una tendencia a negar dicha complejidad. Evidentemente, no hay una regla general y cada uno debiera de pensar qué le lleva a tomar sus decisiones.

En el otro extremo, hay gente que ha entendido que la realidad está llena de situaciones complejas, y que estas pueden ser decisivas. Y algunos de ellos llegan a una situación en la que sólo pueden dar respuestas complejas. Casi como queriéndose quitar de encima de una vez por todas el problema de la complejidad y recordando un poco a intentar resolver los problemas por la fuerza bruta. Una causa podría ser que para desarrollar modelos complejos se requiere cierta cantidad de tiempo, dinero, esfuerzo, … Y si después de tal inversión, éstos no son utilizados (útiles), produce una gran frustración. Si esta frustración se niega o no se tiene en cuenta, se puede llegar a una situación ‘sin sentido’ dónde se continua invirtiendo en su desarrollo para intrínsecamente justificar su existencia. Un entorno típicamente susceptible a este problema es el de la investigación, donde la complejidad de los modelos que utilizan puede estar fuertemente desligada a las necesidades sociales. Tampoco hay que olvidar que determinar qué líneas de investigación van a ser útiles en el futuro o si continuar por un camino sin resultados pero que va a dar frutos en el futuro son tareas realmente difíciles.

Lo que está claro es que sólo poder utilizar modelos simples o complejos es un error, y que hay que ir ajustando la complejidad caso a caso.

 

Quiero agradecer (especialmente y sin orden) por todas las conversas que han dado pie a este documento a Roc Alabern, María José Peláez, Joan Roma, Bartek Skorulski, Jordi Torres y Teresa Bas.