Contigo en los espacios abiertos de Habr hay dos capitanes de los equipos de empleados de Rosneft que participaron en la final del maratón de TI Digital Breakthrough 2020 y no pueden permanecer en silencio al respecto.
Rosneft no es indiferente a los eventos de TI. Por qué, la propia empresa genera anualmente hackatones y desafíos ( https://rn.digital/it2020 ) con el fin de sacudir a la comunidad de TI para resolver problemas urgentes para ella. Sin embargo, sus empleados no pueden participar en los propios hackatones-maratones de Rosneft; no es ético con los participantes externos. ¡Pero ellos, los desarrolladores y programadores de software corporativo intensivo en ciencia, quieren compararse con la fuerza heroica!
Por tanto, la participación de los empleados de Rosneft en varios hackatones es una especie de mantenimiento del equipo en estado de combate, una fuente de inspiración e ideas, fomentando el desarrollo de enfoques no estándar para las tareas de TI. Lo principal no es en detrimento del trabajo principal, pero esto es obvio. El líder petrolero está enfocado en la digitalización de los procesos comerciales y la sustitución de importaciones de tecnologías de la información en el campo de la producción de petróleo y gas, por lo que la presencia de un espíritu competitivo entre los empleados de la empresa y la voluntad de competir con el resto del mundo se consideran de buena forma.
En este artículo, las empleadas de RN-BashNIPIneft, Chingiz Akhmetov y Maya Bikmetova, contarán en color sobre el camino de sus equipos hacia el final de un evento de TI genial, compartirán ideas y trucos de vida.
Chingiz Akhmetov y el equipo "Inn BTG"
Presentémonos primero. “Inn BTG” es: “Innovadoramente. Brillantemente. Tecnológicamente. Grandiosamente ". También son Vladimir Ryzhikov, Radmir Karimov y Murad Musin y Chingiz Akhmetov.
Hace poco más de un año, cuando se llevó a cabo una de las etapas del hackathon Digital Breakthrough - 2019 en nuestra Ufa natal, formamos un equipo para participar en ella y nos involucramos en la solución del problema. En ese momento memorable, llegamos a la final, que se celebró en Kazán. Desafortunadamente, no todo nuestro equipo logró ir al evento. Por lo tanto, en modo de emergencia, los remanentes del equipo tuvieron que formar una nueva "pandilla" de los mismos renegados de otras ciudades (a nuestra Ufa se unieron Cherepovets y San Petersburgo). En la final, lamentablemente, no logramos ganar ni siquiera una nominación. Por lo tanto, del hackathon del año pasado solo tenemos merch en forma de hermosas sudaderas brillantes con los símbolos de la competencia y una gestalt descubierta para ganar la final ...
En este sentido, en 2020, dos semanas antes del inicio del hub Ural IT del Digital Breakthrough - maratón 2020, se decidió crear un nuevo equipo para una victoria brillante e incondicional, primero en la regional y luego en la etapa final de la competencia.
Como el año pasado, la columna vertebral (3 cazas) se formó a partir de colegas de un departamento de nuestro instituto científico y de diseño, que ahora están desarrollando un paquete de software para el modelado geológico de campos petrolíferos "RN-GEOSIM". Además, por confiabilidad, el equipo se reponía con un empleado de banco, pero no por préstamos e hipotecas, sino como es nuestro amigo en el banco de un exalumno y conoce su negocio. Así, fue posible recopilar un "cuatro fantástico", donde cada participante tenía experiencia en determinadas áreas de la programación, era de alguna manera un experto.
Captura de pantalla de la transmisión durante el anuncio de los ganadores del caso.
Como participantes experimentados, nos gustaría notar un aumento en el nivel de organización del hackathon que en el pasado. Este año hay más tareas, y son más diversas, por ejemplo, han aparecido tareas no solo para servicios web. En esta ocasión, el hackathon se realiza en formato online, lo que facilitó mucho la vida de los participantes y permitió ahorrar en costes de transporte. En el canal de YouTube se transmiten noticias importantes, entrevistas con personas interesantes, diversos concursos y concursos. La información para los participantes se publica en los canales de Telegram. En el chat principal de Telegram de la competencia, hay comunicación con soporte sobre preguntas generales, las respuestas llegan de inmediato. También hay un canal para encontrar miembros y equipos. Se eligió Discord para la comunicación dentro del equipo (también se usó para comunicarse con los expertos del caso en los puntos de control). En una palabra, ¡todo es para las personas!
Por separado, queremos poner un "más" por el hecho de que ahora no hay un vínculo rígido para la región: nuestro equipo es de Ufa, pero estábamos ocupados en un momento y no pudimos participar en el Volga Hub, pero pudimos competir en los Urales. Me complace que las grabaciones de todas las transmisiones y las protecciones de transmisión se publiquen en el canal de YouTube. Transparente e informativo.
Nuestro equipo decidió participar en la solución del caso "Ruta ciclista" del Departamento de Informatización de la Región de Tyumen: "Desarrollo de software que le permite analizar la ubicación inicial de pasos de peatones, carriles bici y el caminar y andar en bicicleta de los residentes de la ciudad". No es que seamos tan grandes fans. Se eligió esta tarea porque se describió con gran detalle en la entrevista del titular del caso ( https://www.youtube.com/watch?v=hLPGCZ-5HRc ), y el objetivo principal era obtener alguna técnica, algoritmo. Este es exactamente nuestro tema.
Los equipos priorizaron los casos antes del inicio. La proporción final del número de equipos por casos en el Ural Hub se hizo visible después del inicio.
Entendimos que es muy importante elegir las herramientas que ayudarán a hacer MVP (Producto Mínimo Viable, o en nuestra opinión “un producto con funciones mínimas, pero suficiente para satisfacer a los primeros consumidores”) de la manera más rápida. Para nosotros, son Python con sus bibliotecas NetworkX (para trabajar con gráficos) y OSMnx (para representar datos de OpenStreetMap como un gráfico). El rendimiento de una solución de este tipo deja mucho que desear, ya que Python en sí es lento y no existían algoritmos especializados para trabajar con gráficos de ruta en NetworkX. En nuestro prototipo, el tiempo de funcionamiento con agrupaciones bastante pequeñas alcanzó decenas de minutos. Está claro que ese tiempo es inaceptable para el usuario, pero hemos demostrado que la idea está funcionando. En lo que sigue, consideramoses mejor reescribir el kernel computacional en un lenguaje compilado usando algoritmos especializados con paralelización.
La breve esencia de nuestro algoritmo es que toda la ciudad (el esquema del algoritmo, izquierda, arriba) está agrupada en secciones. En cada sección se determina el grado de demanda de carriles bici (esquema del algoritmo, derecha, arriba). El gráfico de carreteras se filtra, dejando solo aquellas carreteras donde se pueden construir carriles para bicicletas. Luego, el gráfico filtrado se compara con el grupo, y solo quedan las carreteras que caen en las secciones demandadas del grupo (el algoritmo funciona, izquierda, abajo). Las islas resultantes están conectadas por el algoritmo de los caminos más cortos para que el sistema de ciclovías esté conectado, es decir, el ciclista puede conducir de un área a otra (el esquema del algoritmo, derecha, abajo).
El esquema del algoritmo.
Nos dividieron en subtareas: una hizo la parte de cálculo, la segunda abrió el servidor, la tercera hizo la visualización en la página web, la cuarta hizo la vista de escritorio. Logramos lograr casi todo. Decidimos transferir el gráfico resultante al cliente en su totalidad y dibujarlo a través de OpenLayers, aunque probablemente sería mejor implementar nuestro propio servidor de mosaicos.
Esquema diseñado por MVP (subóptimo).
Resultados finales
En la final del concurso Digital Breakthrough, obtuvimos un caso del Ministerio de Energía “Desarrollo de un sistema para modelar la dependencia del consumo eléctrico y los indicadores económicos de la Federación de Rusia por territorios e industrias”. En comparación con la etapa regional, la final fue más ambiciosa: aumentó el número de casos (15 contra 9), el número de equipos en un caso (26 contra 10). El fondo de premios para los ganadores también ha crecido, los números exactos se pueden ver en el sitio web https://leadersofdigital.ru .
En el curso del trabajo sobre el problema y siguiendo los resultados de las consultas con los titulares de los casos, decidimos implementar el proyecto en Jupyter Notebook en Python y utilizar la econometría para el modelado. La variable dependiente del modelo fue el volumen real de consumo de energía y la variable independiente fue el volumen de minería y manufactura. La previsión de la variable dependiente se realizó según el siguiente algoritmo:
1. Se proyecta la producción industrial (se construye una tendencia lineal):
a. Se resalta la sección del gráfico, que se utiliza para calcular los coeficientes de tendencia.
segundo. Los coeficientes de tendencia lineal se determinan mediante el método de mínimos cuadrados.
2. Se construye un modelo de dependencia de la tendencia del consumo eléctrico del volumen de producción industrial
3. Se predice el volumen de consumo energético utilizando el modelo construido y modelado por el método SARIMA (el artículo https://habr.com/ru/company/ods/blog/327242/ nos ayudó mucho en esto. ).
Resultados del pronóstico restante.
Desafortunadamente, el enfoque elegido quedó un poco por debajo de los tres primeros, y ocupamos el puesto 22. ¿Participaremos en hackatones similares en el futuro? ¡Por supuesto! Resolver tareas no relacionadas con el trabajo le permite ver las tareas laborales con una mirada fresca más adelante.
Maya Bikmetova y "NEII"
Unas semanas antes de Digital Breakthrough 2020, participé en otro hackathon más pequeño y mi equipo ocupó el primer lugar. Probablemente, esto influyó en la decisión de probar suerte en la competencia de toda Rusia.
Invité a mis colegas y amigos Marina Semyonova, Guzel y Nail Akmurzin a unirse al equipo, ya que es mucho más fácil trabajar en la presión del tiempo con amigos que conozco. Esto no es una pérdida de tiempo, y las 30-36 horas del hackathon se pueden dedicar a desarrollar y crear un MVP. Ingresamos al Volga IT Hub of Digital Breakthrough - 2020 como el equipo NEII. Este nombre ha estado con nosotros durante mucho tiempo. Creemos que refleja mejor nuestra esencia: empleados de un instituto de investigación comprometidos con el desarrollo de sistemas basados en inteligencia artificial (IA).
Como ya escribieron mis colegas (y son competidores) anteriormente, debido a la compleja situación epidemiológica, el hackatón se realizó en línea. Tuvimos tres controles en los que hablamos con el moderador, el técnico y el representante del titular del caso. Escucharon nuestras ideas, dieron consejos, vieron lo que hicimos y evaluaron nuestra presentación.
Todos los equipos recibieron una lista de 10 casos. Al registrarse, priorizamos. Y uno de los casos más prioritarios para el equipo fue acudir a ella en el hackathon. Además, cada caso contenía una descripción general del problema, y una descripción detallada se dio solo al comienzo de la competencia. Tenemos un caso en el que era necesario desarrollar un sistema inteligente para automatizar la información y brindar beneficios sociales a la población. El cliente de este caso fue el Ministerio de Política Social, Demográfica y Familiar de la Región de Samara.
Esquema general de la solución desarrollada.
También conversamos en Discord para discutir las tareas. Juntos aportaron ideas para soluciones y distribuyeron quién haría qué. Marina fue responsable de la lógica del servidor (el backend y la base de datos, Guzel) de la presentación y Nail de la interfaz. Me hice cargo del desarrollo de un modelo de aprendizaje automático, gestión de equipos y comunicación con el titular del caso.
Como resultado de trabajar en la tarea, implementamos prototipos de dos sistemas.
1. Una aplicación web en forma de chat bot para informar a la población sobre los beneficios.
En la parte del cliente, el ciudadano describe su situación de vida. La solicitud resultante se envía al servicio NLP, que es responsable del procesamiento del lenguaje natural. Bajo el capó, la categoría de la solicitud del usuario se determina utilizando métodos de aprendizaje automático. En otras palabras, se está resolviendo el problema de la clasificación de textos. El pronóstico de PNL del modelo se envía a la base de datos. La información necesaria sobre los beneficios esperados se devuelve de la base de datos utilizando la clave y se vuelve a proporcionar al cliente.
El script de backend principal accede al servicio NLP y a la base de datos.
En el cuadro de diálogo, el usuario ve a qué beneficios tiene derecho, qué documentos deben recopilarse.
Captura de pantalla de un prototipo de chatbot para informar a la población sobre los beneficios.
2. Servicio de comprobación de la actualización de actos normativos y legislativos.
En el curso de la comunicación con un representante del titular del caso, resultó que el gran dolor de los trabajadores de protección social es la necesidad de revisar periódicamente muchos documentos reglamentarios para identificar rápidamente cambios en la legislación. Si hay cambios, el empleado actualiza la base de datos local. Naturalmente, esto requiere mucho tiempo y esfuerzo, y los empleados tienen menos tiempo para trabajar directamente con las personas. Estamos convencidos de que este trabajo rutinario puede y debe automatizarse.
Como primera aproximación para solucionar este problema, propusimos un servicio que compara periódicamente documentos de la base de datos de la seguridad social local con los mismos documentos de la base de datos de algún servicio en línea, por ejemplo, "Consultant Plus". Si detecta diferencias en los documentos, el servicio envía una alerta al trabajador de la seguridad social como “Ha habido cambios en el documento X. Actualice su base de datos local ". Por lo tanto, el funcionario de seguridad social se libera de la necesidad de palear un montón de documentos. La máquina detectará cambios en las leyes por él / ella mientras trabaja con los ciudadanos.
Si hablamos del aspecto técnico del problema, como línea de base para resolver el problema de comparar textos, usamos el enfoque clásico, que se usa a menudo en Recuperación de información, que representa documentos en forma de vectores numéricos, seguido de una estimación de la distancia cosenoidal entre ellos.
Fórmula para calcular la distancia cosenoidal entre vectores de dos documentos.
Y ahora un par de trucos de supervivencia hackathon. Recomendamos desde el principio aprobar la lista y las versiones de las bibliotecas con las que trabajará. Esto evitará situaciones en las que el proyecto no se compile debido a conflictos de versiones, y debe enviar su código para su revisión en 10 minutos. Por cierto, es mejor publicar enlaces a la presentación y la solución media hora antes del final del concurso, y no dejarlo para el último momento. En el hackathon, la gente estaba realmente nerviosa por un sitio que colapsó cinco minutos antes de la entrega final de todo el proyecto ...
Tecnologías utilizadas: ¡viva el código abierto! Lo principal es realizar un seguimiento de las versiones de los marcos.
Por un lado, un hackathon es un concurso de técnicos especialistas, y el jurado evalúa el código: legibilidad, operabilidad, arquitectura de la solución, documentación. Por otro lado, hay un caso titular, y sus representantes están lejos del mundo de las TI. Ellos, en primer lugar, aprecian la belleza, la coherencia y la claridad de la presentación, el diseño de la interfaz. En otras palabras, es mejor tener una persona en el equipo que solo se ocupará de la presentación, alguien que la utilizará para “vender” la solución al titular del caso.
Resultados finales
Desafortunadamente, no hubo tiempo para prepararse para la final de Digital Breakthrough - 2020. Al final del año, el trabajo tradicionalmente aumenta. ¡Así que confiamos en la suerte y en los demás!
En la final del hackathon estábamos en la misma alineación. Esta vez nos encontramos con un caso de Sberbank: la tarea es crear una solución que ayude a acelerar el trabajo con el correo. Resultó ser un gran problema, ya que los altos ejecutivos tienen que revisar 2.000 correos electrónicos al día, lo que lleva al menos 3 horas.
En el primer punto de control, nos dijeron que los desarrolladores de Sberbank habían estado desconcertados por este problema durante mucho tiempo, pero aún no habían encontrado una solución concreta; necesitaban una idea que los ayudara finalmente a llegar a algo.
Y empezamos a pensar. En 2 horas, generamos muchas ideas interesantes diferentes (esta fue la parte más creativa del hackathon, ya que una sugirió, la otra complementó, y esta idea se convirtió en una herramienta perfecta que reemplazaría el correo electrónico normal = D).
Como resultado, concebimos la implementación de nuestro propio cliente de correo "Sber-Secretary", que convertiría la correspondencia en chat, los chats se agruparían por tema en carpetas y el sistema determinaría automáticamente la importancia de la correspondencia (chat). En el chat, podría escuchar los mensajes no leídos, se podrían dictar los textos de los mensajes, se crearía una nueva letra con un comando de voz, y en la ventana principal, en lugar de una correspondencia, para acelerar, se podría mostrar de 1 a 4, y algunas características adicionales.
Diseño de la interfaz del cliente de correo electrónico
A continuación, asignamos responsabilidades: yo era responsable del lado del servidor del proyecto, Nail del lado del cliente, Marina desarrolló el diseño en figma y Guzel hizo una presentación hermosa y espaciosa y se preparó para la defensa.
Sabíamos de inmediato que no tendríamos tiempo para hacer una aplicación funcional, pero esperábamos que al menos la parte del cliente madurara. Resultó ser mucho trabajo y, como resultado, mostramos en figma qué funcionalidad tendría nuestro cliente de correo, describimos la arquitectura del proyecto, nombramos una serie de ventajas de dicha solución, hicimos una comparación con Outlook, el costo del proyecto y las etapas de implementación.
Creo que podemos decir que al jurado le gustó nuestra decisión, porque durante uno de los puntos de control los seguidores demostraron que vamos en la dirección correcta. No logramos hacer una solicitud de trabajo, pero ingresamos al top 5 (quinto lugar) de 11 equipos. ¿Qué significa para nosotros el quinto lugar? ¡Esto significa que tenemos la oportunidad de mostrar el mejor resultado la próxima vez!
Si también participó en el "Avance digital - 2020", ¡escriba sus impresiones y pensamientos en los comentarios!