Tres errores de Machine Learning que he cometido (a menudo)

by Andrés González

Cuando empecé con esto del Machine Learning cometí muchos errores. Pero tuve la suerte de tener compañeros con la suficiente paciencia y conocimientos como para enseñarme a hacer buenas predicciones (como Charlie Parker, co-autor de este artículo). En este artículo enumero 3 errores de machine learning en los que más de una vez he caído. Espero que te sirvan para reconocer y entenderlos cuando te los encuentres al usar BigML.

errores-machine-learning

Modelos de 1 solo nodo

Cuando estás viendo cómo se crea un modelo predictivo capa por capa en la interfaz web de BigML, se crea una cierta sensación de expectación. Pero con algunos de mis datasets el proceso se paraba en el nodo raíz, dejándome con un inútil árbol de decisión de 1 nodo. La primera vez que lo vi pensé que era un bug.

arbol-un-nodo

El problema era que estaba usando un dataset inadecuado. Las categorías que usé para el campo objetivo no estaban equilibradas en la fase de entrenamiento. Me explico. Si, por ejemplo, el 99% de los datos de entrenamiento tenían un “VERDADERO” como factor objetivo, el modelo simplemente predecía “VERDADERO” en todos los casos, con un 99% de precisión. Es un error fácilmente corregible si tienes suficientes datos: simplemente descarta parte de los datos de la categoría dominante. Ten cuidado de no deshacerte de demasiados datos (para no descartar datos útiles) y asegúrate de que lo haces de forma aleatoria. Si no, corres el riesgo de introducir desviaciones en el sistema.

¿Cuánto datos hay que descartar? Es cuestión de adivinarlo, pero puede darnos pistas sabiendo la importancia relativa de dos categorías: imaginemos que para nuestra predicción es 10 veces más importante tener ejemplos de la opción “FALSO” que de “VERDADERO”. Un buen punto de partida es descartar tantos datos como sean necesarios para que la opción “FALSO” sea 10 veces más probable de lo que era originalmente. Por tanto, si el dataset tiene un 1% de “FALSO”, descarta ejemplos de “VERDADERO” hasta que “FALSO” suponga un 10% del dataset.

¿No puedes permitirte descartar datos? Otra estrategia equivalente es replicar los ejemplos de “FALSO” hasta que se tenga el número deseado (en el ejemplo anterior, se trataría de replicar cada ejemplo 10 veces). Esta es otra forma de decirle al proceso de modelización que el “FALSO” es más importante que el “VERADERO” y que se pueden excluir sin una caída significativa del rendimiento.

[NOTA DEL TRADUCTOR]: en la actual versión de BigML, este problema se puede solucionar automáticamente desde la propia herramienta con la opción de Balanceo, disponible en la configuración del dataset. Aún así, siempre puedes seguir haciéndolo a mano.

Un factor que nos estropea la fiesta

Recuerdo estar trabajando duro en un dataset que contenía datos sobre propiedades inmobiliarias y precios de casas en Manhattan. Cada instancia tenía el precio de venta actual y un precio indexado. De esta forma podía comparar los precios de venta a lo largo del tiempo. Cuando finalmente pude subir emocionado el dataset, me faltó tiempo para pulsar la opción de “1-click model”. El resultado fue, como mínimo, decepcionante. Predecía el precio indexado pero mantenía “precio” como factor en todo el árbol de decisiones. Después de todo el esfuerzo, ¡supe que el precio es un indicador perfecto para predecir el precio indexado! Con el ansia por crear un modelo, me olvidé de excluir “precio” y terminé (otra vez) con un modelo verdadero pero inútil.

factor-predominante

Esto me ha pasado más de una vez, sobre todo cuando un factor es un buen indicador (o incluso perfecto) para predecir el factor objetivo. Otro buen ejemplo son los datasets que tienen el valor total del objetivo, además de algún valor promedio: a menudo se puede predecir uno del otro con bastante fiabilidad. Lo habitual es que no sea útil en absoluto, porque en general no se sabe con antelación el valor de uno de los dos, por lo que la predicción de uno basado en el otro vuelve a ser inútil.

La solución es de nuevo simple. Si encuentras tal relación en tu dataset, simplemente desactiva el factor que te está molestando y haz tu análisis otra vez.

Un factor con demasiadas categorías

Mientras que los errores anteriores son bastante obvios y nos llevan a modelos poco útiles, el último error me llevó más tiempo entenderlo. Compartí con mucho orgullo un modelo con uno de mis compañeros sólo para oír a los expertos decir “demasiado grade” o “demasiado amplio” (siempre con un tono constructivo y respetuoso, por supuesto). ¿Cómo puede ser un que árbol sea demasiado grande o demasiado amplio?

Un factor que aparece mucho en los datasets de Estados Unidos es por ejemplo “Estado”. Dado que hay 50 estados en Estados Unidos, un nodo que se divide en 50 categorías de “Estado” puede generar 50 ramas. Si pasa más de una vez en un árbol, puede que te dé como resultado un árbol muy amplio. El comportamiento es equivalente cuando se usa “País” con datos internacionales. Si tu árbol se divide en un factor que tiene muchas categorías, tras esa división los datos se dividen a su vez en pequeñas porciones de datos que van disminuyendo en tamaño a medida que se crean más ramas. Cuando los grupos de datos son más pequeños (en los nodos de las ramas inferiores del árbol), dividir esos nodos en 50 categorías ya no tiene sentido. Dicho de otra forma, si tienes 50 categorías, necesitas muchísimos datos para rellenarlas.

factor-muchas-categorias

BigML limita a 300 el número de categorías por factor. Si el factor tiene más de esas 300, se considera un campo de texto y automáticamente se deselecciona del análisis. Incluso si un factor tiene más de 35 categorías, automáticamente se descarta aunque se siga manteniendo etiquetada. Esto permite que puedas volver a seleccionarla de forma manual para incluirla en el análisis.

Una forma de mejorar el rendimiento de los árboles con factores que tienen muchas categorías es la agrupación de categorías. Por ejemplo, en lugar de “Estado”, puedes añadir un factor llamado “Región” para limitar el número de categorías. De forma equivalente, para “País” puedes usar “Continente”. Se pueden dar muchos más enfoques. Te podría servir “Costa” y “No-costa” o “Principalmente-urbano” y “Principalmente-rural”. En la jerga de Machine Learning, a esto lo llamamos “ingeniería de factores” y es una técnica crucial para mejorar el rendimiento de tu modelo. En cualquier caso, un factor con 5 categorías, reorganizado de forma inteligente, siempre es más útil que un factor con 50 posibles valores. Aun así, si piensas que el factor “Estado” tiene una importancia alta y tienes datos suficientes para cada estado, entonces deja el factor “Estado” tal y como está para el entrenamiento del modelo. Así crearás un modelo predictivo por estado y podrás encontrar diferencias entre estados en los resultados de la predicción.

Finalmente

Se aprende de los errores. El primer paso es reconocerlos y saber cómo solucionarnos. Incluso si se usa una herramienta como BigML, es bastante probable que cometas errores como los que he mencionado en este artículo. Yo tengo la suerte de tener a mis compañeros de machine learning para que me ayuden. Si tienes problemas como estos y se te han acabado los recursos, no dudes en ponerte en contacto con nosotros. No somos una consultoría de machine learning ni un centro de enseñanza, pero queremos que tengas éxito cuando uses la plataforma de machine learning de BigML.


Este artículo fue escrito por Jos Verwoerd (@josverwoerd) y publicado originalmente en inglés en el blog de BigML el 21 de marzo de 2013. Traducción: CleverData.