Redes neuronales y minería de procesos: tratando de hacer amigos

Process Mining es un campo de análisis de datos que le permite analizar procesos basados ​​en los registros de los sistemas de información. Como hay muy pocas publicaciones sobre el tema del uso del aprendizaje automático en este campo en Habré, decidimos compartir nuestra experiencia en el desarrollo de modelos predictivos para resolver problemas orientados a procesos. Como parte del programa VTB, un junior de TI para profesionales de TI principiantes, los pasantes del equipo de minería de procesos probaron los métodos de aprendizaje automático en el contexto de las tareas de investigación de procesos bancarios. Debajo del corte, hablaremos sobre cuándo y cómo tuvimos la idea de resolver tales problemas, qué hicimos y qué resultados obtuvimos.



IT Junior Program es un programa de pasantías anual para profesionales de TI principiantes en VTB Bank, que comenzó en septiembre de 2019. La pasantía dura seis meses. Según los resultados del programa de 2019, más de la mitad de los pasantes se unieron al personal y se convirtieron en empleados de la empresa. Puede encontrar más información sobre el programa, el inicio de la selección y los requisitos para los candidatos aquí . Así es como los aprendices de este programa abordaron las tareas del banco.

En el sistema de coordenadas clásico, para comprender y formalizar el proceso, es necesario:

  • realizar una entrevista con empleados;
  • Analizar los informes y la documentación disponibles.

En el enfoque de Process Mining, se forma un modelo de proceso digital basado no solo en la opinión experta de los participantes del proceso, sino también en datos relevantes de los sistemas de información.

Como resultado, obtenemos un modelo digital objetivo del proceso, que es un reflejo del movimiento de datos reales en los sistemas de TI del proceso. El modelo resultante funciona en tiempo real y le permite mostrar el estado actual del proceso con el grado de detalle necesario.

En nuestro artículo anteriorHablamos sobre nuestra plataforma de Process Mining y las tareas reales del Banco, que se resuelven con su ayuda. La solución implementada nos permitió reducir significativamente el tiempo requerido para preparar informes obligatorios para las agencias gubernamentales, y también ayudó a identificar y optimizar las imperfecciones del proceso, para establecer una presentación diaria del estado actual de las compras en el trabajo.

Posteriormente, nuestros clientes tuvieron la necesidad no solo de determinar cualitativamente el estado actual del proceso, sino también de predecir sus condiciones futuras.

A continuación, describiremos paso a paso cómo resolvimos el problema de predecir la duración del proceso de adquisición (usando el conjunto de datos BPI Challenge 2019 como ejemplo) usando un conjunto de eventos bien conocidos usando la estación DGX de alto rendimiento, amablemente proporcionada por NVIDIA para la investigación.

Aplicación de aprendizaje automático para minería de procesos


Para resolver el problema, construimos una línea de base usando CatBoostRegressor, y luego desarrollamos una solución con una red neuronal e incrustando variables categóricas.
Debido a la presencia de características categóricas y materiales en los datos de origen, se decidió utilizar el refuerzo, que podría procesar características categóricas sin codificación, y también resolver el problema en una entrada discreta y material.

Las redes se usaron para construir atributos completamente materiales y resolver el problema en todo el material de entrada, y luego comparar estos dos enfoques y decidir si molestarse con las redes.

Descripción de datos


Se decidió utilizar datos externos que nos convengan en el área de negocios y que posean un conjunto similar de características. El conjunto de datos BPI Challenge 2019 usado incluye 250 mil casos, esto es 1.5 millones de eventos. Los datos iniciales se describen mediante un conjunto de 21 signos: 18 categóricos (hay signos de índice), dos booleanos y uno real. El tiempo de ejecución del proceso de adquisición se seleccionó como la variable objetivo, que correspondía a las necesidades reales del negocio. Para obtener una descripción detallada de las características, puede consultar la descripción del conjunto de datos .

Base


Antes del entrenamiento modelo, los datos se dividieron en muestras de entrenamiento (entrenamiento) y prueba (prueba) en la proporción de 0.8 / 0.2. Además, la división no se produjo según los acontecimientos, sino según los casos.

Para determinar qué tan apropiado es usar una solución patentada compleja en forma de red neuronal, la línea de base se construyó utilizando CatBoost, una biblioteca avanzada de aumento de gradiente en árboles de decisión. Para construir una línea de base, se realizó un preprocesamiento de datos mínimo (codificación de características categóricas con la frecuencia correspondiente en los datos), se desarrolló una variable objetivo (duración del caso) y una serie de nuevas características (además de las que ya están en el conjunto de datos original):

  • . , : , , , , , .
  • Exponential Moving Average . EMA , .
  • (, , ).

Después de entrenar al CatBoostRegressor en el conjunto de entrenamiento, obtuvimos el siguiente resultado: MAE (Error absoluto medio) = 17.5 días (es decir, el valor de la variable objetivo pronosticada es, en promedio, 17.5 días diferente del valor verdadero). Este resultado se usó para probar la efectividad de una red neuronal. 

Uno de los detalles importantes aquí es el desarrollo de la variable objetivo para la línea de base. 

Tengamos un caso. Lo denotamos por c_i del conjunto C (el conjunto de todos los casos en nuestro conjunto de datos). Cada caso es una secuencia ordenada de eventos, es decir, c_i = (e_0, ​​..., e_ni), donde ni es la longitud del i-ésimo caso. Para cada evento, tenemos una marca de tiempo: la hora exacta en que comenzó. Con estos sellos temporales, puede calcular la duración del caso sin el último evento. Sin embargo, asignar dicho objetivo a cada evento, es decir, hacer que la correspondencia ek ∈ ​​ci, ek → ti (ti sea la duración del i-ésimo caso), no es muy buena. En primer lugar, pueden ocurrir eventos similares (típicos) en casos de diferentes duraciones. En segundo lugar, queremos predecir la duración del caso a partir de una cierta subsecuencia (ordenada en el tiempo) de los eventos (esto está motivado por el hecho de que no conocemos toda la secuencia de eventos, es decir, no sabemos el caso antescómo sucedió, pero queremos hacer una evaluación de la duración de todo el caso de acuerdo con algunos eventos conocidos (ocurridos) de este caso).

Por lo tanto, debe dividir cada caso en subsecuencias de longitud de uno a la longitud del caso de eventos ordenados por tiempo, y asignar una variable objetivo igual a la duración del caso del que se obtienen estas subsecuencias, es decir, las correspondencias ci ∈ C, ci → {sub_cj} ni (ni como antes, la longitud del i-ésimo caso), j = 1 y len (sub_cj) = j.

Por lo tanto, dividimos cada caso en subsecuencias y asignamos la duración de todo el caso a cada subsecuencia.

Más sobre subsecuencias

Como se mencionó anteriormente, dividimos el caso en subsecuencias y asignamos la duración del caso a cada una de ellas. Vamos a utilizar el refuerzo que es exacto al tamaño de los datos de entrada. Entonces ahora tenemos X = {{sub_c ki } ni k = 1 } t = 1 N , sub_c ik es la subsecuencia k-ésima del caso i-ésimo, t i es la longitud del caso i-ésimo, N es el número de casos. Es decir, la dimensión [∑ N t = 1 n i , sc, 17], sc es una variable igual a la longitud de la subsecuencia del caso correspondiente.

Después de codificar las variables categóricas por su frecuencia, tenemos variables reales y booleanas, así como variables categóricas codificadas (las variables de índice no se utilizarán en el proceso de aprendizaje). También podemos promediar valores sobre una subsecuencia, mientras que en las características categóricas obtenemos la frecuencia promedio de ocurrencia de valores categóricos, que también puede considerarse como una característica que describe la agregación de un subconjunto de eventos en un caso, es decir, como una característica que describe una subsecuencia. Déjalo y mira qué pasa.

Después de promediar sc sobre la dimensión, obtenemos la siguiente dimensión: [∑ N t = 1 n i , 17].

Construcción del modelo

Según los casos, dividimos el tren en otro tren y muestra de validación, tomamos un CatBoostRegressor con parámetros predeterminados, pasamos una muestra de entrenamiento, validamos una muestra de validación, tomamos la mejor iteración, utilizamos MAE como métrica de validación. Obtenemos lo siguiente (en la figura a continuación) en la prueba (prepararemos la prueba por separado para la misma tubería en la que se construyó el tren. Todas las señales se basan en los datos que están en la prueba, es decir, no tenemos señales enfocadas en la variable objetivo. La única advertencia: Si las características categóricas en la prueba no cumplen con el valor que vimos en el tren, entonces consideramos la frecuencia de este valor en la prueba y actualizamos el diccionario para la codificación).

Resultados de referencia



• Iteraciones: 500.
• Tasa de aprendizaje: 0.1.

Parámetros de entrenamiento:

• Tiempo de entrenamiento: menos de 2 minutos.
• Hierro: Tesla k80 (de colab).

Resultados:

• Prueba MAE: 17.5 días.
• La duración promedio del caso en la prueba: 66.3 días.

Red neuronal


Preparar


Para entrenar la red neuronal, se mejoraron los datos: se construyeron incrustaciones para variables categóricas y se ajustó la distribución de la variable objetivo. Luego, la red neuronal fue entrenada en el NVIDIA Tesla K80 (Google Colab) y en la estación NVIDIA DGX.

Los siguientes resultados fueron obtenidos:

  • Tiempo de entrenamiento en NVIDIA K80 (Google Colab): 20 minutos.
  • Tiempo de entrenamiento en la estación NVIDIA DGX: 8 minutos.

El tiempo de entrenamiento de la red neuronal se debe a la diferencia en las características técnicas de las GPU utilizadas:
NVIDIA Tesla K80 (Google Colab)
NVIDIA DGX Station
1X NVIDIA Tesla K80 12GB
4X NVIDIA Tesla V100 32GB

Preprocesamiento


Nuevos signos

  • EMA sobre el valor del evento: queremos captar la tendencia en el costo de las actividades para cada caso.
  • Tipo de falla: en la descripción del conjunto de datos puede encontrar información sobre cuatro tipos de algunas estadísticas descriptivas de la compra (evento): estos tipos se dividen en los valores de dos variables en el conjunto de datos original. Simplemente lo agregamos nuevamente (si observa la descripción del conjunto de datos, quedará claro de qué estamos hablando).

Signos categóricos

Simplemente codificamos los valores únicos de los signos categóricos con números naturales en orden, para que luego podamos enseñar incrustaciones.

Incorporaciones para variables categóricas

Determinamos la dimensión de las incorporaciones para cada variable categórica:

  • , ̆ ̆ ̆. ̆ , ̆ ̆ , ̆, . : MUi  = min(CAT_EMBEDDING_DIM; (len(uniquei) + 1) // 2), CAT_EMBEDDING_DIM — , uniquei — i- .
  • , 3, i-̆ ̆ max(3;MUi)+1, 1, , train, unk-.

Ajustamos la distribución del objetivo en la muestra del tren. La 

distribución inicial resultó ser muy desplazada hacia la izquierda debido a valores atípicos (casos que duraron 250 mil días) y una gran cantidad de casos cortos, por lo que contamos los percentiles 0.05 y 0.95 y dejamos los datos del tren con el objetivo entre Estos rápidos.

Después de eso, todavía tenemos casos que duran aproximadamente uno y aproximadamente 100 días, es decir, la variable objetivo pasa por varios órdenes de magnitud. Por lo tanto, la suposición de que la varianza es constante en la distribución de la variable objetivo alrededor del algoritmo de decisión apenas se cumple, es decir, la distribución de la variable objetivo es cercana a la normal, pero la varianza no es constante debido al hecho de que la variable objetivo puede ser menor que 1 o mayor que 100. Por lo tanto, al menos De alguna manera nivelar este efecto, normalizamos los datos.

El resultado se muestra en el siguiente gráfico (la línea negra es la distribución normal).



Luego dividimos por caso nuestros datos en tren y validación. También hay un matiz obvio aquí: normalizamos el objetivo con el promedio y la desviación, calculados de acuerdo con todos los datos, y luego dividimos por tren y validación, es decir, resulta como una cara en el tren, pero como resolvemos un problema auxiliar aquí, esta cara no parece crítico.

Señales de construcción


Idea

  • Solo tomamos signos categóricos de nuestro tren, codificados por números naturales.
  • No tomamos subcadenas de casos, sino simplemente eventos, es decir, una línea en nuestros datos para incrustaciones es un evento caracterizado por características categóricas codificadas.
  • : , ̆, , , , ̆ ̆ ̆. - , ̆, , , ̆ ( ), ( , - ̆ ).
  • ̆ .
  • , 8-̆̆ elu ̆, ( , , , L2-) .
  • , , — , , .
  • Summary: — ̆ ̆ ̆ ̆ — ̆.


  • Batch size = 1000
  • Learning rate = 3e-04.
  • = 15.
  • : Tesla k80 (colab) + Nvidia DGX Station .
  • (colab) – 50 .
  • (Nvidia DGX Station) — 18 .




Preparación de datos

Ahora tenemos incrustaciones para variables categóricas (aquí hay un matiz: honestamente tomamos valores únicos de variables categóricas en nuestro tren (no en el que asignamos para incrustaciones de entrenamiento, sino en el que asignamos al principio para entrenamiento), por lo tanto, existe la posibilidad de que en los datos de la prueba haya un valor de variables categóricas que no vimos en el tren, es decir, no tenemos una inclusión entrenada para este valor.

Para tales valores, se crea una línea separada en las matrices de inclusión, pero en nuestro caso el problema es que durante el entrenamiento no está involucrado y, por lo tanto, no estudia. En base a esto, si cumplimos con un valor de una variable categórica que no se había visto antes, entonces tomamos este vector, pero de hecho simplemente se toma de la distribución de inicialización.

En cómo entrenar este vector, hay una dirección para mejorar el modelo. La idea es que valores muy raros en el tren pueden codificarse con este vector, porque si vemos un nuevo valor solo en la prueba, que constituye condicionalmente el 20% de la muestra inicial completa, entonces este valor es raro y probablemente se comporta lo mismo que valores raros en el tren.

En cada caso, reemplazamos las variables categóricas con la incrustación correspondiente, nos conectamos con los atributos real y booleano, obtenemos una matriz de tamaño [N, F], donde F es la suma de las dimensiones de las incrustaciones para las variables categóricas, el número de atributos reales y booleanos.

Realizamos una agrupación de eventos en una subsecuencia (como se hizo anteriormente). La variable objetivo para la subsecuencia es la duración del caso del que se obtuvo la subsecuencia. Agregue el número de eventos y la suma de los costos de los eventos en esta subsecuencia al vector de la subsecuencia.

Ahora tenemos una matriz de un tamaño fijo: puede alimentar el modelo (antes de eso normalizamos la matriz).

Método de paralelización

  • Hacemos una torre para cada gpu.
  • En cada paso, dividimos los parámetros entre las torres.
  • .
  • ̆ , .
  • ( , ̆ ̆ ).
  • .
  • , - ( , word2vec-style, ).



  • () () ().
  • ̆ : — , gpu , , gpu .



  • : 7-̆̆ elu.
  • ̆ , .
  • Batch size = 1000.
  • Learning rate = 3e-04.
  • = 15.
  • : Tesla k80 (colab) + Nvidia DGX Station.
  • (colab) = 20 .
  • (Nvidia DGX Station) = 8 .

Una parte del modelo de gráfico.



Consumo de recursos y paralelización.

El entrenamiento de la red neuronal en una CPU requiere aproximadamente cuatro veces más tiempo que en una estación NVIDIA DGX. En este caso, la diferencia parece insignificante: ocho minutos en la estación NVIDIA DGX y 32 minutos en la CPU. Sin embargo, este es un modelo pequeño con una pequeña cantidad de datos. Al implementar proyectos reales, donde habrá varias veces más casos y eventos, la capacitación en la CPU tomará al menos una semana. En este caso, el uso de la estación NVIDIA DGX reducirá el tiempo de capacitación a dos días, lo que aumentará en gran medida la eficiencia del trabajo. 

También se reveló que la velocidad del proceso de aprendizaje depende en gran medida del número de GPU utilizadas, lo que muestra la ventaja de la estación NVIDIA DGX.

Esto se confirma mediante experimentos anteriores en la CPU y GPU NVIDIA DGX Station utilizando el conjunto de datos original sin ningún procesamiento preliminar:

  • Tiempo de aprendizaje en la CPU: 6 minutos y 18 segundos.
  • Tiempo de entrenamiento en GPU: 34 segundos.

Visualización de carga de GPU



Visualización de carga de CPU



Resultados de la red neuronal




  • Prueba MAE = 10 días.
  • La duración promedio del caso en la prueba = 67 días.
  • Tiempo de inferencia = 20 segundos.

recomendaciones


  • Implementamos un piloto para evaluar los métodos de aprendizaje automático en el contexto de las tareas de Process Mining.
  • Probamos y ampliamos la lista de nuestras herramientas con las que resolveremos problemas que son importantes para los negocios.
  • Uno de los resultados interesantes fue la redacción de nuestra propia implementación de computación paralela en 4 tarjetas Tesla v100 con las que está equipada la estación DGX: el uso de varias GPU acelera el aprendizaje casi en línea desde la cantidad de GPU (el código está en paralelo).
  • La transición a una entrada totalmente continua y el uso de una red neuronal permitió tomar una semana fuera de la línea de base.
  • El tiempo aumenta de unos pocos minutos a una hora y media (capacitación en arquitectura final y empotramientos, pero los empotramientos se pueden usar previamente entrenados, por lo que el tiempo se reduce a 20 minutos).

Los experimentos descritos muestran que en el campo de la minería de procesos, los algoritmos de máquina y aprendizaje profundo pueden aplicarse con éxito. Además, se reveló que la velocidad del proceso de aprendizaje depende en gran medida del número de GPU utilizadas, lo que muestra la ventaja de la estación NVIDIA DGX.

Qué y cómo se puede mejorar


Incrustaciones de Word2vec para eventos

Cuando creamos nuestro modelo, incluidas las incrustaciones de variables categóricas, no tomamos en cuenta la secuencia de eventos entre sí, es decir, la semántica peculiar de eventos dentro de los casos. Para aprender algo útil del orden de los eventos dentro de los casos, debe entrenar incrustaciones para estos eventos.

Idea

  • Tomamos una característica categórica y una real, dividimos el real en un depósito, luego cada transacción se caracterizará por el valor de la variable categórica y el depósito en el que cae el valor de la variable real. Combina estos dos valores, obtenemos, por así decirlo, un análogo de la palabra para el evento.
  • Consideramos el caso como una oración (el conjunto de palabras en la oración corresponde al conjunto de eventos en el caso).
  • ̆ , ̆ ̆, , .
  • ̆, Skipgram CBOW .
  • , ̆, .



  • Skipgram.
  • — 5.

  • Batch size = 1000.
  • Learning rate = 3e-04.
  • = 10.
  • : Tesla k80 (colab) + Nvidia DGX Station.
  • (colab) — 20 .
  • (Nvidia DGX Station) — 8 .
  • Test MAE : 10 ̆. 

Contar El



uso de las funciones de las incrustaciones aumenta un par de décimas de día.

Finalmente

  • Las incrustaciones resultaron, por supuesto, sin educación, porque entrenaron un poco.
  • Hay alrededor de 290 características de incrustaciones categóricas y 20 características de incrustaciones semánticas (no tiene más sentido hacerlo porque el tamaño del diccionario es pequeño), por lo que la influencia de estas características semánticas puede nivelarse debido a un desequilibrio en la proporción de características.
  • La semántica entre eventos debe agregarse de alguna manera al conjunto de entrenamiento, porque debido al hecho de que las secuencias de eventos (casos) están ordenadas, el orden es importante y se puede extraer información de esto.
  • Puede utilizar arquitecturas más sofisticadas para incrustaciones.
  • , , — .

All Articles