Continuando con el tema de los concursos de aprendizaje automático en el Habré, queremos presentar a los lectores dos plataformas más. Ciertamente no son tan grandes como kaggle, pero definitivamente merecen atención.

Personalmente, no me gusta demasiado el kaggle por varias razones:
- en primer lugar, las competencias allí a menudo duran varios meses, y se debe dedicar mucho esfuerzo para la participación activa;
- en segundo lugar, núcleos públicos (soluciones públicas). Los seguidores de kaggle les aconsejan que se mantengan tranquilos con los monjes tibetanos, pero en realidad es una lástima que todo lo que hiciste durante un mes o dos de repente resulta estar en una bandeja para todos.
Afortunadamente, las competencias de aprendizaje automático se llevan a cabo en otras plataformas, y se discutirán algunas de estas competencias.
IDAO | SNA Hackathon 2019 |
---|
Idioma oficial: inglés, organizadores: Yandex, Sberbank, HSE | Idioma oficial: ruso, organizadores: Mail.ru Group |
Ronda en línea: 15 de enero - 11 de febrero de 2019; Final en el sitio: 4-6 de abril de 2019 | en línea: del 7 de febrero al 15 de marzo; fuera de línea: del 30 de marzo al 1 de abril. |
A partir de un determinado conjunto de datos sobre una partícula en un gran colisionador de hadrones (sobre la trayectoria, el momento y otros parámetros físicos bastante complejos), determine si es o no un muón De esta declaración, se distinguieron 2 tareas: - en uno solo tenías que enviar tu predicción, - y en el otro - el código completo y el modelo para la predicción, y se impusieron restricciones bastante estrictas sobre el tiempo de ejecución y el uso de memoria | Para la competencia SNA Hackathon, se recopilaron registros para mostrar contenido de grupos abiertos en las noticias de los usuarios para febrero-marzo de 2018. El conjunto de pruebas se ha ocultado la última semana y media de marzo. Cada entrada de registro contiene información sobre qué y para quién se mostró, así como también cómo reaccionó el usuario a este contenido: ponga una "clase", comentada, ignorada u oculta del feed. La esencia de las tareas de SNA Hackathon es organizar para cada usuario de la red social Odnoklassniki su cinta, elevando al máximo las publicaciones que recibirán la "clase". En la etapa en línea, la tarea se dividió en 3 partes: 1. para clasificar publicaciones en una variedad de bases colaborativas 2. clasifique las publicaciones según las imágenes contenidas en ellas 3. clasificar las publicaciones de acuerdo con el texto contenido en ellas |
Una métrica personalizada compleja, algo así como ROC-AUC | ROC-AUC promedio por usuarios |
Premios para la primera etapa: camisetas para N lugares, pasaje a la segunda etapa, donde se pagaron alojamiento y comidas durante la competencia La segunda etapa - ??? (Por alguna razón, no estuve presente en la ceremonia de premiación y no pude averiguar qué terminé con los premios). Portátiles prometidos a todos los miembros del equipo ganador | Premios para la primera etapa: camisetas para los 100 mejores participantes, pasaje a la segunda etapa, donde pagaron el viaje a Moscú, alojamiento y comidas durante la competencia. Además, hacia el final de la primera etapa, se anunciaron premios para las mejores de 3 tareas en la etapa 1: ¡todos ganaron con la tarjeta de video RTX 2080 TI! La segunda etapa es el equipo uno, los equipos tenían de 2 a 5 personas, premios: 1er lugar - 300,000 rublos 2do lugar - 200 000 rublos 3er lugar - 100,000 rublos premio del jurado - 100 000 rublos |
El grupo oficial en el telegrama, ~ 190 participantes, comunicación en inglés, tuve que esperar varios días para responder preguntas | El grupo oficial en el telegrama, ~ 1500 participantes, una discusión activa de las tareas entre los participantes y los organizadores. |
Los organizadores proporcionaron dos soluciones básicas, simples y avanzadas. Una simple requería menos de 16 GB de RAM, mientras que una avanzada de 16 no cabía. Al mismo tiempo, adelantándose un poco, los participantes no lograron superar significativamente la solución avanzada. No hubo dificultades para lanzar estas soluciones. Cabe señalar que en el ejemplo avanzado hubo un comentario con una pista sobre dónde comenzar a mejorar la solución. | Se proporcionaron soluciones primitivas básicas para cada una de las tareas, superadas fácilmente por los participantes. En los primeros días del concurso, los participantes enfrentaron varias dificultades: en primer lugar, los datos se dieron en el formato Apache Parquet, y no todas las combinaciones de Python y el paquete de parquet funcionaron sin errores. La segunda dificultad fue bombear imágenes desde la nube de correo, por el momento no hay una manera fácil de descargar una gran cantidad de datos a la vez. Como resultado, estos problemas retrasaron a los participantes por un par de días. |
IDAO Primera etapa
La tarea consistía en clasificar las partículas muónicas / no muónicas según sus características. Una característica clave de esta tarea fue la presencia de una columna de peso en los datos de entrenamiento, que los propios organizadores interpretaron como confianza en la respuesta para esta línea. El problema era que bastantes líneas contenían pesos negativos.

Después de pensar durante unos minutos sobre la línea con una pista (la pista solo llamó la atención sobre esta característica de la columna de peso) y construir este gráfico, decidimos verificar 3 opciones:
1) invierta el objetivo para filas con peso negativo (y peso, respectivamente)
2) cambie los pesos al valor mínimo, para que comiencen en 0
3) no use pesos para las filas
La tercera opción resultó ser la peor, pero las dos primeras mejoraron el resultado, la mejor fue la opción No. 1, que nos llevó inmediatamente al segundo lugar actual en la primera tarea y al primero en la segunda.

Nuestro siguiente paso fue mirar los datos de los valores faltantes. Los organizadores nos dieron datos ya peinados, donde había bastantes valores faltantes, y fueron reemplazados por -9999.
Encontramos valores faltantes en las columnas MatchedHit_ {X, Y, Z} [N] y MatchedHit_D {X, Y, Z} [N], y solo cuando N = 2 o 3. Como entendimos, algunas partículas no volaron a través de los 4 detectores y se detuvo en 3 o 4 platos. Los datos también contenían columnas Lextra_ {X, Y} [N], que aparentemente describen lo mismo que MatchedHit_ {X, Y, Z} [N], pero utilizando algún tipo de extrapolación. Estas conjeturas exiguas sugirieron que en lugar de valores faltantes en MatchedHit_ {X, Y, Z} [N], puede sustituir Lextra_ {X, Y} [N] (solo para las coordenadas X e Y). MatchedHit_Z [N] estaba bien lleno con una mediana. Estas manipulaciones nos permitieron ir a 1 lugar intermedio para ambas tareas.

Dado que para la victoria en la primera etapa no dieron nada, podríamos detenernos en esto, pero continuamos, dibujamos algunas imágenes hermosas y presentamos nuevas características.

Por ejemplo, descubrimos que si construimos los puntos de intersección de las partículas de cada una de las cuatro placas de los detectores, podemos ver que los puntos en cada una de las placas se agrupan en 5 rectángulos con una relación de aspecto de 4 a 5 y el centro en (0,0), y El primer rectángulo no tiene puntos.
Placa No. / Dimensiones del rectángulo | 1 | 2 | 3 | 4 4 | 5 5 |
---|
Placa 1 | 500x625 | 1000x1250 | 2000x2500 | 4000x5000 | 8000x10000 |
Placa 2 | 520x650 | 1040x1300 | 2080x2600 | 4160x5200 | 8320x10400 |
Placa 3 | 560x700 | 1120x1400 | 2240x2800 | 4480x5600 | 8960x11200 |
Placa 4 | 600x750 | 1200x1500 | 2400x3000 | 4800x6000 | 9600x12000 |
Una vez determinados estos tamaños, agregamos para cada partícula 4 nuevas características categóricas: el número del rectángulo en el que se cruza con cada placa.

También notamos que las partículas parecían dispersarse del centro y surgió la idea de evaluar de alguna manera la "calidad" de esta dispersión. Idealmente, probablemente, uno podría encontrar algún tipo de parábola "ideal" dependiendo del punto de entrada y estimar la desviación de él, pero nos limitamos a la línea "ideal". Al construir tales líneas ideales para cada punto de entrada, pudimos calcular la desviación cuadrática media de la trayectoria de cada partícula desde esta línea. Dado que la desviación promedio para target = 1 fue 152, y para target = 0 resultó 390, tentativamente calificamos esta característica como buena. De hecho, esta característica llegó inmediatamente a la cima de las más útiles.
Estábamos encantados y agregamos la desviación de los 4 puntos de intersección para cada partícula de la línea ideal como 4 características adicionales (y también funcionaron bien).
Los enlaces a artículos científicos sobre el tema de la competencia, que nos dieron los organizadores, sugirieron que estamos lejos de ser los primeros en resolver este problema y, tal vez, hay algún software especializado. Después de descubrir el repositorio en github donde se implementaron los métodos IsMuonSimple, IsMuon, IsMuonLoose, los transferimos a nosotros mismos con modificaciones menores. Los métodos en sí mismos eran muy simples: por ejemplo, si la energía es inferior a un umbral, entonces esto no es un muón, sino un muón. Esos signos simples obviamente no podrían aumentar en el caso de utilizar el aumento de gradiente, por lo que agregamos otro signo "distancia" al umbral. Estas características también mejoraron un poco. Quizás, habiendo analizado los métodos existentes más a fondo, uno podría encontrar métodos más fuertes y agregarlos a los atributos.
Hacia el final del concurso, obtuvimos una pequeña solución "rápida" para la segunda tarea, como resultado de que difería de la línea de base en los siguientes puntos:
- En filas con peso negativo, el objetivo se invirtió
- Rellena los valores faltantes en MatchedHit_ {X, Y, Z} [N]
- Profundidad reducida a 7
- Reducción de la tasa de aprendizaje a 0.1 (fue 0.19)
Como resultado, probamos algunas características más (no particularmente exitosas), recogimos los parámetros y capacitamos a catboost, lightgbm y xgboost, probamos diferentes combinaciones de predicciones y ganamos con confianza la segunda tarea antes de abrir el privat, y estábamos entre los líderes en la primera.
Después de que se abrió el privat, estábamos en el décimo lugar para 1 tarea y 3 para la segunda. Todos los líderes estaban confundidos, y la velocidad en el sector privado era más alta que en el tablero de cartas. Parece que los datos estaban mal estratificados (o por ejemplo, no había líneas con pesos negativos en privado) y esto fue un poco frustrante.
SNA Hackathon 2019 - Textos. Primera etapa
La tarea consistía en clasificar las publicaciones del usuario en la red social Odnoklassniki de acuerdo con el texto contenido en ellas, además del texto, había algunas características más de la publicación (idioma, propietario, fecha y hora de creación, fecha y hora de visualización).
Como enfoques clásicos para trabajar con texto, destacaría dos opciones:
- El mapeo de cada palabra en el espacio vectorial n-dimensional, de modo que palabras similares tengan vectores similares (se pueden encontrar más detalles en nuestro artículo ), luego encontrar la palabra intermedia para el texto o usar mecanismos que tengan en cuenta la posición relativa de las palabras (CNN, LSTM / GRU) .
- Usar modelos que puedan trabajar de inmediato con oraciones completas. Por ejemplo, Bert. En teoría, este enfoque debería funcionar mejor.
Como esta fue mi primera experiencia con los textos, sería un error enseñarle a alguien, por lo que me enseñaré a mí mismo. Estos son los consejos que me daría al comienzo del concurso:
- Antes de correr para aprender algo, ¡mira los datos! Además de los textos en sí, había varias columnas en los datos, y se podía extraer mucho más de ellos que yo. Lo más simple es hacer una codificación de destino media para parte de las columnas.
- ¡No aprendas de todos los datos! Había muchos datos (aproximadamente 17 millones de filas) y era completamente opcional usarlos todos para probar hipótesis. El entrenamiento y el preprocesamiento fueron muy lentos, y claramente tendría tiempo para probar hipótesis más interesantes.
- < Consejo controvertido > No es necesario buscar un modelo asesino. Traté con Elmo y Bert durante mucho tiempo, esperando que me llevaran inmediatamente a un lugar alto, y como resultado utilicé incrustaciones pre-entrenadas FastText para el idioma ruso. Con Elmo, no fue posible lograr una mejor velocidad, pero con Bert no pude resolverlo.
- < Consejo controvertido > No busque una característica asesina. Mirando los datos, noté que en la región del 1 por ciento de los textos no contienen, de hecho, ¡el texto! Pero luego hubo enlaces a algunos recursos, y escribí un analizador simple que abrió el sitio y sacó el nombre y la descripción. Parece una buena idea, pero luego me dejé llevar, decidí analizar todos los enlaces de todos los textos y nuevamente perdí mucho tiempo. Todo esto no dio una mejora significativa en el resultado final (aunque descubrí con la deriva, por ejemplo).
- Las funciones clásicas funcionan. Google, por ejemplo, "texto presenta kaggle", lee y agrega todo. TF-IDF dio una mejora, características estadísticas, como la longitud del texto, la palabra, la cantidad de puntuación, también.
- Si hay columnas DateTime, debe analizarlas en varias funciones separadas (horas, días de la semana, etc.). Las características a resaltar deben analizarse con gráficos / algunas métricas. Aquí hice todo bien en una corazonada y seleccioné las características necesarias, pero un análisis normal no dolería (por ejemplo, como hicimos en la final).

Como resultado de la competencia, entrené un modelo de keras con convolución de acuerdo con las palabras, y otro basado en LSTM y GRU. Tanto allí como allí se utilizaron incrustaciones FastText pre-entrenadas para el idioma ruso (probé otras incrustaciones, pero estas funcionaron mejor). Habiendo promediado las predicciones, tomé el séptimo lugar final de 76 participantes.
Ya después de la primera etapa, Nikolai Anokhin publicó un artículo , que ocupó el segundo lugar (participó fuera de la competencia), y su decisión se repitió la mía hasta alguna etapa, pero fue más allá debido al mecanismo de atención de valor clave de consulta.
Segunda etapa OK e IDAO
Las segundas etapas de las competiciones se realizaron casi seguidas, así que decidí considerarlas juntas.
Primero, con el equipo recién adquirido, terminé en la impresionante oficina de Mail.ru, donde nuestra tarea era combinar los modelos de las tres pistas de la primera etapa: texto, imágenes y colaboraciones. Se asignaron un poco más de 2 días para esto, que resultó ser muy pequeño. De hecho, solo pudimos repetir nuestros resultados de la primera etapa, sin recibir ninguna ganancia de la asociación. Como resultado, tomamos el 5to lugar, pero el modelo de texto no se pudo usar. Al observar las decisiones de otros participantes, parece que valió la pena intentar agrupar los textos y agregarlos al modelo de colaboración. Un efecto secundario de esta etapa fueron las nuevas impresiones, conocidos y comunicación con los participantes y organizadores, así como la severa falta de sueño, que pueden haber afectado el resultado de la etapa final de IDAO.
La tarea en la etapa en persona de la Final IDAO 2019 fue predecir el tiempo de espera para un pedido de taxistas Yandex en el aeropuerto. En la etapa 2, se asignaron 3 tareas = 3 aeropuertos. Para cada aeropuerto, se proporcionan datos por minuto sobre la cantidad de pedidos de taxis durante seis meses. Y el mes siguiente y los datos de pedidos por minuto de las últimas 2 semanas se proporcionaron como datos de prueba. No hubo tiempo suficiente (1,5 días), la tarea fue bastante específica, solo una persona vino del equipo al concurso y, como resultado, el lugar triste estaba más cerca del final. De las ideas interesantes, hubo intentos de utilizar datos externos: clima, embotellamientos y estadísticas sobre los pedidos de taxis de Yandex. Aunque los organizadores no dijeron cuáles eran los aeropuertos, muchos participantes sugirieron que eran Sheremetyevo, Domodedovo y Vnukovo. Aunque esta suposición fue refutada después de la competencia, las características, por ejemplo, de los datos meteorológicos de Moscú mejoraron el resultado tanto en la validación como en la clasificación.
Conclusión
- ¡Los concursos de ML son geniales e interesantes! Hay una aplicación para habilidades en análisis de datos y en modelos y técnicas astutos, y el sentido común es bienvenido.
- ML ya es una gran capa de conocimiento que parece crecer exponencialmente. Me propuse el objetivo de conocer diferentes áreas (señales, imágenes, tablas, texto) y ya me di cuenta de cuánto aprender. Por ejemplo, después de estas competiciones, decidí estudiar: algoritmos de agrupamiento, técnicas avanzadas para trabajar con bibliotecas de aumento de gradiente (en particular, trabajar con CatBoost en la GPU), redes de cápsulas y el mecanismo de atención de valor de clave de consulta.
- ¡Ni un solo kaggle! Hay muchos otros concursos en los que al menos es más fácil conseguir una camiseta, y hay más posibilidades de obtener otros premios.
- Chatear En el campo del aprendizaje automático y el análisis de datos, ya hay una gran comunidad, hay grupos temáticos en telegramas, personas flojas y serias de Mail.ru, Yandex y otras compañías que responden preguntas y ayudan a los principiantes y continúan su viaje en este campo del conocimiento.
- Aconsejo a todos los que están imbuidos del párrafo anterior que visiten Datafest , una gran conferencia gratuita en Moscú, que se realizará del 10 al 11 de mayo.