Buscar

Top 1% en Kaggle: evitando el sobreajuste

Actualizado: 18 de abr de 2018


Cuando entramos a la página de resultados finales de la competencia Santander Customer Satisfaction, tuvimos la satisfacción de ver que habíamos escalado 2087 puestos, posicionándonos 31 de 5123 equipos. Habíamos hecho solamente un puñado de entradas hace casi un mes, frente a las decenas y cientos de entradas hasta último momento que tenían otros equipos. ¿Qué significa resultados finales? En cada competencia, durante el transcurso de la misma, se mide el desempeño con aproximadamente un 50% del total de casos a evaluar. Recién al terminar, se dan los resultados finales con el 100% de los casos.


Este sistema posibilita dos cosas: para los competidores, tener un indicador de desempeño antes del final, y para los organizadores, evitar que se entreguen predicciones sobreajustadas (overfitting) a la muestra de evaluación. A grandes rasgos, el sobreajuste implica que el modelo funcione bien para el conjunto de datos con el cual fue entrenado y/o mal-evaluado pero mal para otro que no tenga diferencias intrínsecas. Veamos la imagen siguiente:

Se trata de clasificar dos clases, rojo o azul. La curva negra que pasa suavemente entre ambas no clasifica perfectamente pero es el modelo correcto, con una generalización aceptable. La línea verde irregular tiene una clasificación perfecta, pero en cuanto se aplique a otro conjunto de datos similar no funcionará como se esperaba debido a que la frontera entre clases tendrá un ruido diferente.

En las competencias Kaggle, si de entrada se diera el desempeño sobre todos los datos de evaluación, uno podría básicamente ametrallarlos con cientos de modelos distintos y quedarse con “el mejor”, que será una línea verde como la mostrada en la imagen anterior. Esto mismo le sucedió a muchísimos equipos pero usando la ametralladora contra el 50% de los datos, como pautaba la competencia. Cuando se evaluó al restante 50%, muchísimos cayeron cientos o miles de puestos en el tablero de puntuación, haciéndonos subir un par de miles a nosotros.


De quienes tuvieron cientos de entradas, muy notable fue el desempeño del equipo ganador, que con el 50% de los datos estaban puesto 4 y con el 100% ascendieron a 1. Seleccionaron para la evaluación final el modelo indicado, que no era el mismo que les daba el mejor resultado para el 50%. Esto significa que pudieron juzgar con precisión cuál de sus 300 modelos era el que mejor iba a comportarse frente a la totalidad de los datos de evaluación, determinando correctamente cuál era el verdadero mejor, sin sobreajuste.

En nuestro caso, en un día de trabajo hicimos un proceso muy sencillo que estimábamos que no iba a tener sobreajuste y eso fue suficiente para llegar al mejor 1% de los 5000 equipos que se presentaron. La diferencia de desempeño AUC con el primero fue de 0,0013 (0.829072 contra 0.827782). En la mitad de la tabla, alrededor del puesto 2500, el desempeño fue de 0.824293, habiendo una diferencia de 0.0035 con nosotros, la cual también puede considerarse, en muchos escenarios de implementación real, no muy significante.


¿El desempeño en minería de datos, se está convirtiendo en un commodity? La disponibilidad pública de algoritmos muy poderosos como XGBoost (el cual usamos para esta competencia) haría pensar eso. Nosotros creemos que no, ya que el proceso es muchísimo más extenso que simplemente arrojar un modelo predictivo a una tabla: alrededor del 80% del tiempo de entrenamiento se usa en la preparación de datos, e inclusive luego de obtener un buen modelo, su correcta implementación y monitoreo son aspectos críticos para cualquier proyecto. Interesantemente, lo que nos dio la ventaja en esta competencia fue una de nuestras técnicas de análisis de calidad de datos, la cual nos llevó a remover algunas variables inclusive cuando estas tenían buen desempeño en entrenamiento bajo validaciones cruzadas de 10 iteraciones.


Por Iván Gómez Villafañe.

53 vistas