Buscar

Analizando Kaggle Santander Value Prediction Challenge

Actualizado: 30 de ago de 2018


Recientemente terminó en Kaggle.com una competencia organizada por el Grupo Santander, en la cual compitieron 4.591 equipos de data scientists de todo el mundo por u$s 60.000 en premios. Participar en ellas es un arduo proceso de trabajo para diferenciarse de los demás competidores por márgenes muy pequeños, si es que se quiere tener una chance de estar en el podio final. Se participe o no, una ventaja del sitio es que los competidores mejor posicionados suelen delinear su solución en los foros de discusión, lo cual nos permite a nosotros, consultores a la vanguardia del aprendizaje automático, hacer un análisis de las mismas y concluir qué podemos aportar a nuestros clientes.



ENCONTRANDO PROPIEDADES EN LOS DATOS


El objetivo era “predecir el valor de las transacciones futuras del cliente”, por lo tanto se trataba de un caso de regresión. La tabla de entrenamiento contenía 4.459 filas y 4.993 variables completamente anonimizadas. El primer descubrimiento sustancial acerca de las características de los datos fue que había grupos de variables que representaban series de tiempo de un indicador. El usuario Giba, quien hizo público este descubrimiento y finalmente terminó ganando la competencia, mostró la siguiente tabla ya ordenada para ilustrarlo:



Como se ve, varias filas corresponden al valor de la variable target de un mismo cliente en distintos momentos de la serie de tiempo. Esto también sucedía en la base de prueba a puntuar y subir para ser rankeado en la competencia. Por lo tanto, para algunos casos, se podía asignar el resultado directamente con un 100% de fidelidad sin necesidad de utilizar un modelo predictivo. De las 49.342 filas en la tabla de prueba, el ganador de la competencia descubrió que 7.897 (16%) podían ser puntuadas de esta manera con un 100% de confianza.


Esta propiedad de los datos enojó a varios equipos, ya que tenía más que ver con ingeniárselas para encontrar trucos ocultos en los datos que con resolver un problema de aprendizaje automático como se lo encontraría en la vida real. A ninguno de nuestros clientes se les ocurriría ofuscar el nombre y descripción de las variables que usamos, mucho menos, darnos para puntuar tablas engañosas que contengan información futura dentro de sí misma para que nosotros tengamos que descubrirlo (???). Sin embargo, como profesionales, creemos que es valioso para cualquier data scientist tener la habilidad de meterse de lleno en un mar de datos y descubrir propiedades. De hecho, muchas veces encontramos errores de estructura interna que nos sirven para verificar la fidelidad de los datos, comunicárselo a nuestros clientes y también saber cómo evitar problemas futuros en implementación para obtener el mejor desempeño posible.


Por dar un ejemplo muy sencillo, en un proyecto de predicción de bajas (churn/attrition), analizando la serie temporal de eventos descubrimos picos inexplicables para dos productos, que en realidad correspondían a falsas bajas (depuraciones) que no debían ser consideradas por los modelos predictivos:

Si se hubiera tratado de una competencia, teniendo que predecir para el resultado final, por ejemplo, 7/2017, no hubiéramos usado de ninguna manera esas falsas bajas ya que hubieran ensuciado al modelo. En la vida real, sucedería exactamente lo mismo, por lo tanto las sacamos de la base de entrenamiento.


INGENIERÍA DE VARIABLES


Más allá de que la variable objetivo tenía ciertas filtraciones, de la misma forma se encontraron alrededor de 100 grupos de 40 variables, representando cada uno una serie temporal de un indicador diferente. El competidor adilis, de la segunda solución, menciona que las agregaciones de serie de tiempo que usó para procesarlas (como máximo y promedio) fueron non-zero aggregations, es decir, considerando únicamente los valores mayores a cero. Esto es un detalle muy significativo, ya que en la práctica se traduce en información diferente.

Por ejemplo, veamos la siguiente serie de tiempo correspondiente a saldo en plazos fijos:

La primera fila no tuvo plazos fijos en febrero, por lo tanto su promedio non-zero es 1.500, que se traduce en el promedio de saldos en plazos fijos, cuando los tuvo. El promedio sencillo consideraría el promedio de saldos en plazos fijos, inclusive cuando el saldo sea 0, dando como resultado 1.000. Como se puede ver en la primera y segunda fila de la tabla, el promedio sencillo es igual para ambos casos -- aunque se traten de comportamientos diferentes. En nuestra experiencia, puede ser útil calcular ambas agregaciones y que el modelo decida cuáles, para qué variables, le sirve más.


Considerando que aplicó las agregaciones para diferentes rangos de tiempo, obtuvo finalmente unas 3500 variables. Luego, usó LightGBM para seleccionar las más relevantes (unas 1.000) y entrenó otros 2 modelos complementarios (XGBoost y Random Forest) en base a esas. Este tipo de atajo es muy útil a tener en cuenta en varias dimensiones sobre las cuales se puede perder eficiencia en minería de datos. Una de ellas, muy frecuente en casos reales, es la cantidad de filas o casos a usar para el entrenamiento. Suele ser práctico entrenar un modelo selector con una muestra reducida, quedarse solamente con las variables relevantes y luego entrenar el modelo final sobre la totalidad de los casos.


Una de las consideraciones importantes de la ingeniería de variables es pensar en qué tipo de algoritmos de aprendizaje automático se van a usar posteriormente, de tal forma de generar nueva información que pueda sortear limitaciones técnicas de ellos. Un árbol de decisión no puede directamente encontrar relaciones aditivas entre variables, por lo tanto resulta útil sumar aquellas que consideremos más importantes para explorar su significancia como información adicional. Para decidir eficientemente qué pares de variables sumar y poner a prueba, el competidor anatoly (3er puesto) se concentró en las más importantes según un primer modelo. En casos reales, no solamente es útil hacer este proceso de retroalimentación sino también, como primer paso, generar relaciones entre variables que tengan sentido en el campo del problema a resolver. Por ejemplo, disponiendo del saldo bancario en varias columnas según el tipo de cuenta, es razonable generar una variable nueva que sea la sumatoria de ellas.


EFICIENCIA EN ALGORITMOS


Como suele suceder en estas competencias, la mayoría de las soluciones mejor posicionadas consistieron en una combinación de decenas de modelos predictivos para generar una predicción final. Si bien no dio detalles, el ganador dijo haber entrenado modelos diferentes explorando cada uno una característica particular de los datos. Otros equipos fueron por esquemas de capas combinadas, entrenando una serie de modelos para alimentar sus salidas a otro modelo en segunda capa que pondere el resultado final. Es que cuando se juega por el todo a un solo tiro, una mínima diferencia en rendimiento termina siendo la que separa a quienes se llevan decenas de miles de dólares a su casa de los que no. Sin embargo, en casos de implementación real, dichos esquemas suelen ser poco prácticos por razones de eficiencia. Computar 100 modelos una vez puede ser factible, pero actualizarlos y aplicarlos mes a mes en una implementación recurrente resulta cuestionable cuando el desempeño ganado no es significativo. Consideramos nuevamente la segunda solución, que no fue una combinación muy intrincada, ya que obtuvo su resultado combinando solamente tres modelos: LightGBM, XGBoost y RandomForest. Con este caso se demostró que es posible llegar a eficacia de punta sin necesidad de complejizar intrincadamente la solución con decenas de modelos similares combinados o varias capas de ponderaciones.


Más allá del marginal desempeño adicional que se puede llegar a obtener (o no) complejizando los esquema de algoritmos, vale recordar también que en escenarios de negocios, por lo general los distintos actores interdepartamentales involucrados en el proyecto quieren entender, aunque sea a grandes rasgos, el funcionamiento de los modelos y la importancia relativa de las variables predictivas. Siendo ya bastante complicado explicar esto en relación a un solo modelo LightGBM o XGBoost, imaginen tener que hacerlo con el siguiente esquema aquí propuesto:



CONCLUSIONES APLICABLES


El fin de nuestro análisis siempre fue obtener nuevas ideas para aplicar en los proyectos de aprendizaje automático de nuestros clientes. A diferencia de lo que sucedió unos años atrás cuando la aparición de XGBoost permitía obtener un rendimiento mucho mejor gracias al uso de un algoritmo sustancialmente superior, no hemos visto en las últimas competencias ideas radicalmente novedosas a las que se vienen aplicando en el campo para la resolución de este tipo de problemas. A modo de resumen, delineamos los puntos que nos parecen más importante tanto para esta competencia como para las aplicaciones prácticas:


Analizar en Profundidad


Como punto de partida, siempre realizar un análisis exploratorio en profundidad para entender el comportamiento de los datos y descubrir propiedades que resulten de interés. Por un lado, servirán para generar información predictiva y, por el otro, para detectar inconsistencias que puedan llegar a afectar el funcionamiento en implementación real.


Ingeniería de Variables I: Explosión de Información


Generar la mayor cantidad de información posible con agregaciones temporales de distinto tipo para diferentes rangos de tiempo. Considerar esquemas de eficientización trabajando con muestras pequeñas para seleccionar las variables más relevantes de la masa obtenida.


Ingeniería de Variables II: Retroalimentación Asistida


Una vez obtenidas las variables más importantes con un primer modelo, en función de ellas calcular nuevas variables que sorteen las limitaciones técnicas de los algoritmos utilizados.


Simplificar o Complejizar Algoritmo


Analizar esquemas de algoritmos combinados para mejorar el desempeño, considerando si el desempeño ganado justifica o no la complejización del sistemo predictivo.


Esperamos que este resumen les haya resultado de utilidad.


¡Nos vemos la próxima!


#Kaggle #Prediction #Santander #ModelosPredictivos #AprendizajeAutomático #Datos #DataScientist #XGBoost #Algoritmo #LightGBM #RandomForest #DataMining #Data

231 vistas