Redes neurais e mineração de processos: tentando fazer amigos

Process Mining é um campo de análise de dados que permite analisar processos com base nos logs dos sistemas de informação. Como existem muito poucas publicações sobre o uso do aprendizado de máquina neste campo em Habré, decidimos compartilhar nossa experiência no desenvolvimento de modelos preditivos para resolver problemas orientados a processos. Como parte do programa VTB, um júnior de TI para profissionais de TI iniciantes, estagiários da equipe de mineração de processos testaram os métodos de aprendizado de máquina no contexto das tarefas de pesquisa de processos bancários. Sob o corte, falaremos sobre quando e como tivemos a ideia de resolver esses problemas, o que fizemos e quais resultados obtivemos.



O IT Junior Program é um programa de estágio anual para profissionais iniciantes de TI do VTB Bank, que começou em setembro de 2019. O estágio dura seis meses. De acordo com os resultados do programa de 2019, mais da metade dos estagiários ingressou na equipe e se tornou funcionário da empresa. Mais informações sobre o programa, o início da seleção e os requisitos para os candidatos podem ser encontrados aqui . Foi assim que os trainees deste programa abordaram as tarefas do banco.

No sistema de coordenadas clássico, para entender e formalizar o processo, é necessário:

  • realizar uma entrevista com funcionários;
  • analisar relatórios e documentação disponíveis.

Na abordagem de Mineração de Processo, um modelo digital de processo é formado com base não apenas na opinião de especialistas dos participantes do processo, mas também em dados relevantes dos sistemas de informação.

Como resultado, obtemos um modelo digital objetivo do processo, que é um reflexo do movimento de dados reais nos sistemas de TI do processo. O modelo resultante funciona em tempo real e permite exibir o estado atual do processo com o grau de detalhe necessário.

No nosso artigo anteriorFalamos sobre nossa plataforma de Mineração de Processos e as tarefas reais do Banco, que são resolvidas com sua ajuda. A solução implementada nos permitiu reduzir significativamente o tempo necessário para preparar relatórios obrigatórios para agências governamentais e também ajudou a identificar e otimizar imperfeições do processo, a fim de estabelecer uma apresentação diária do status atual das compras no trabalho.

Posteriormente, nossos clientes precisaram não apenas determinar qualitativamente o estado atual do processo, mas também prever suas condições futuras.

Em seguida, descreveremos passo a passo como resolvemos o problema de prever a duração do processo de compras (usando o conjunto de dados BPI Challenge 2019 como exemplo) usando um conjunto de eventos conhecidos usando a DGX Station de alto desempenho, gentilmente fornecida pela NVIDIA para pesquisa.

Aplicativo de aprendizado de máquina para mineração de processos


Para resolver o problema, criamos uma linha de base usando o CatBoostRegressor e, em seguida, desenvolvemos uma solução com uma rede neural e incorporamos variáveis ​​categóricas.
Devido à presença de recursos categóricos e materiais nos dados de origem, foi decidido usar o reforço, que poderia processar recursos categóricos sem codificação e também resolver o problema em uma entrada discreta e material.

As redes foram usadas para construir atributos completamente materiais e resolver o problema em toda a entrada de material. Em seguida, compare essas duas abordagens e decida se deve se preocupar com as redes.

descrição de dados


Decidiu-se usar dados externos que nos conviriam na área de negócios e possuíssem um conjunto semelhante de características. O conjunto de dados usado do BPI Challenge 2019 inclui 250 mil casos - 1,5 milhão de eventos. Os dados iniciais são descritos por um conjunto de 21 sinais: 18 categóricos (existem sinais de índice), dois booleanos e um real. O tempo de execução do processo de compras foi selecionado como a variável alvo, que correspondia às reais necessidades do negócio. Para uma descrição detalhada das características, você pode consultar a descrição do conjunto de dados .

Linha de base


Antes do treinamento do modelo, os dados foram divididos em amostras de treinamento (treinamento) e teste (teste) na proporção de 0,8 / 0,2. Além disso, a divisão não ocorreu de acordo com os eventos, mas de acordo com os casos.

Para determinar como é apropriado usar uma solução nativa complexa na forma de uma rede neural, a linha de base foi construída usando o CatBoost, uma biblioteca avançada de aumento de gradiente nas árvores de decisão. Para construir uma linha de base, foi realizado um pré-processamento mínimo de dados (codificação de recursos categóricos com a frequência correspondente nos dados), uma variável de destino (duração do caso) e vários novos recursos (além dos que já estavam no conjunto de dados original):

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

Após o treinamento do CatBoostRegressor no conjunto de treinamento, obtivemos o seguinte resultado: MAE (Erro Absoluto Médio) = 17,5 dias (ou seja, o valor da variável de destino prevista é, em média, 17,5 dias diferente do valor real). Este resultado foi usado para testar a eficácia de uma rede neural. 

Um dos detalhes importantes aqui é o desenvolvimento da variável de destino para a linha de base. 

Vamos ter um caso. Nós o denotamos por c_i do conjunto C (o conjunto de todos os casos em nosso conjunto de dados). Cada caso é uma sequência ordenada de eventos, ou seja, c_i = (e_0, ​​..., e_ni), em que ni é a duração do i-ésimo caso. Para cada evento, temos um carimbo de hora - a hora exata em que começou. Usando esses carimbos temporários, você pode calcular a duração do caso sem o último evento. No entanto, atribuir um alvo para cada evento, ou seja, fazer uma correspondência ek ∈ ​​ci, ek → ti (ti é a duração do i-ésimo caso), não é muito bom. Em primeiro lugar, eventos semelhantes (típicos) podem ocorrer em casos de diferentes durações. Em segundo lugar, queremos prever a duração do caso a partir de uma certa subsequência (ordenada no tempo) de eventos (isso é motivado pelo fato de não conhecermos toda a sequência de eventos, ou seja, não conhecemos o caso antescomo aconteceu, mas queremos fazer uma avaliação da duração de todo o caso de acordo com alguns eventos conhecidos (ocorridos) desse caso).

Portanto, você precisa dividir cada caso em subsequências de tamanho de um para o tamanho do caso de eventos ordenados por tempo e atribuir uma variável de destino igual à duração do caso do qual essas subsequências são obtidas, ou seja, as correspondências ci ∈ C, ci → {sub_cj} ni (ni como antes, o comprimento do i-ésimo caso), j = 1 e len (sub_cj) = j.

Assim, dividimos cada caso em subsequências e atribuímos a duração de todo o caso a cada uma dessas subsequências.

Mais sobre subsequências

Como mencionado anteriormente, dividimos o caso em subsequências e atribuímos a duração do caso a cada uma delas. Vamos usar o reforço, que é exato para o tamanho dos dados de entrada. Então agora temos X = {{sub_c ki } ni k = 1 } t = 1 N , sub_c ik é a k-ésima subsequência do i-ésimo caso, t i é a duração do i-ésimo caso, N é o número de casos. Ou seja, a dimensão [∑ N t = 1 n i , sc, 17], sc é uma variável igual ao comprimento da subsequência do caso correspondente.

Depois de codificar as variáveis ​​categóricas por sua frequência, temos variáveis ​​reais e booleanas, bem como variáveis ​​categóricas codificadas (variáveis ​​de índice não serão usadas no processo de aprendizagem). Também podemos calcular valores médios em uma subsequência, enquanto em características categóricas a frequência média dos valores categóricos ocorridos é obtida, o que também pode ser considerado como uma característica que descreve a agregação de um subconjunto de eventos em um caso, ou seja, como uma característica que descreve uma subsequência. Deixe-o e veja o que acontece.

Após a média de sc sobre a dimensão, obtemos a seguinte dimensão: [∑ N t = 1 n i , 17].

Construção de modelo

Com base nos casos, dividimos o trem em outro trem e uma amostra de validação, pegamos um CatBoostRegressor com parâmetros padrão, passamos uma amostra de treinamento, validamos uma amostra de validação, fazemos a melhor iteração, usamos o MAE como uma métrica de validação. Conseguimos o seguinte (na figura abaixo) no teste (prepararemos o teste separadamente para o mesmo pipeline em que o trem foi construído. Todos os sinais são baseados nos dados que estão no teste, ou seja, não temos nenhum sinal focado na variável de destino. A única ressalva: se os recursos categóricos no teste não atenderem ao valor que vimos no treinamento, consideraremos a frequência desse valor no teste e atualizaremos o dicionário para codificação).

Resultados da linha de base



• Iterações: 500.
• Taxa de aprendizado: 0,1.

Parâmetros de treinamento:

• Tempo de treinamento: menos de 2 minutos.
• Ferro: Tesla k80 (da colab).

Resultados:

• Teste MAE: 17,5 dias.
• A duração média do caso no teste: 66,3 dias.

Rede neural


Configuração


Para treinar a rede neural, os dados foram aprimorados: construíram-se combinações para variáveis ​​categóricas e ajustou-se a distribuição da variável alvo. Em seguida, a rede neural foi treinada no NVIDIA Tesla K80 (Google Colab) e na NVIDIA DGX Station.

Os seguintes resultados foram obtidos:

  • Tempo de treinamento no NVIDIA K80 (Google Colab): 20 minutos.
  • Tempo de treinamento na estação NVIDIA DGX: 8 minutos.

O tempo de treinamento da rede neural é devido à diferença nas características técnicas das GPUs utilizadas:
NVIDIA Tesla K80 (Google Colab)
Estação NVIDIA DGX
1X NVIDIA Tesla K80 12GB
4X NVIDIA Tesla V100 32GB

Pré-processando


Novos sinais

  • EMA sobre o valor do evento: queremos acompanhar a tendência no custo das atividades para cada caso.
  • Tipo de falha: na descrição do conjunto de dados, você pode encontrar informações sobre quatro tipos de algumas estatísticas descritivas da compra (evento) - esses tipos são divididos nos valores de duas variáveis ​​no conjunto de dados original. Nós simplesmente o agregamos novamente (se você olhar para a descrição do conjunto de dados, ficará claro do que estamos falando).

Sinais categóricos

Simplesmente codificamos os valores únicos dos sinais categóricos com números naturais em ordem, para que mais tarde possamos ensinar os casamentos.

Incorporações para variáveis ​​categóricas

Determinamos a dimensão das incorporações para cada variável 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 a distribuição do alvo na amostra de trem, que 

passou a ser muito deslocada para a esquerda devido a valores discrepantes (casos que duraram 250 mil dias) e a um grande número de casos curtos; portanto, contamos os percentis 0,05 e 0,95 e deixamos os dados do trem com o objetivo entre essas corredeiras.

Depois disso, ainda temos casos que duram cerca de um e cerca de 100 dias, ou seja, a variável alvo passa por várias ordens de magnitude. Portanto, a suposição de que a variação é constante na distribuição da variável de destino em torno do algoritmo de decisão dificilmente é cumprida, ou seja, a distribuição da variável de destino é próxima do normal, mas a variação não é constante devido ao fato de que a variável de destino pode ser menor que 1 ou mais que 100. Portanto, pelo menos de alguma forma, nivelar esse efeito, normalizamos os dados.

O resultado é mostrado no gráfico abaixo (a linha preta é a distribuição normal).



Em seguida, dividimos por caso nossos dados em treinamento e validação. Também há uma nuance óbvia aqui: normalizamos o alvo com a média e o desvio, calculados de acordo com todos os dados, e depois dividimos por trem e validação, ou seja, ele aparece como um rosto em um trem, mas como resolvemos um problema auxiliar aqui, esse rosto não parece crítico.

Sinais de construção


Idéia

  • Tomamos apenas sinais categóricos de nosso trem, codificados por números naturais.
  • Não extraímos substrings de casos, mas simplesmente eventos, ou seja, uma linha em nossos dados para incorporação - esse é um evento caracterizado por recursos categóricos codificados.
  • : , ̆, , , , ̆ ̆ ̆. - , ̆, , , ̆ ( ), ( , - ̆ ).
  • ̆ .
  • , 8-̆̆ elu ̆, ( , , , L2-) .
  • , , — , , .
  • Summary: — ̆ ̆ ̆ ̆ — ̆.


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




Preparação de dados

Agora, temos incorporações para variáveis ​​categóricas (há uma nuance aqui: honestamente, pegamos valores únicos de variáveis ​​categóricas em nosso trem (não no que alocamos para treinamentos em casamentos, mas no que alocamos no início para treinamento), portanto, há uma chance de que, nos dados de teste, haja um valor de variáveis ​​categóricas que não vimos no trem, ou seja, não temos incorporação treinada para esse valor.

Para esses valores, uma linha separada é criada nas matrizes de incorporação, mas, no nosso caso, o problema é que, durante o treinamento, ela não está envolvida e, portanto, não estuda. Com base nisso, se encontrarmos um valor de uma variável categórica que não era vista antes, pegaremos esse vetor, mas, na verdade, ele é simplesmente retirado da distribuição inicial.

Em como treinar esse vetor, há uma direção para melhorar o modelo. A idéia é que valores muito raros no trem possam ser codificados com esse vetor, porque se virmos um novo valor apenas no teste, que compõe condicionalmente 20% de toda a amostra inicial, esse valor é raro e provavelmente se comporta mesmos valores raros no trem.

Em cada evento, substituímos as variáveis ​​categóricas pela incorporação correspondente, conectamos aos atributos real e booleano, obtemos uma matriz de tamanho [N, F], em que F é a soma das dimensões das incorporações para variáveis ​​categóricas, o número de atributos reais e booleanos.

Realizamos um agrupamento de eventos em uma subsequência (como feito anteriormente). A variável de destino para a subsequência é a duração do caso em que a subsequência foi obtida. Adicione o número de eventos e a soma dos custos dos eventos nessa subsequência ao vetor da subsequência.

Agora temos uma matriz de tamanho fixo - você pode alimentar o modelo (antes disso, normalizamos a matriz).

Método de paralelização

  • Fazemos uma torre para cada gpu.
  • Em cada etapa, dividimos os parâmetros entre as 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 .

Uma parte do gráfico do modelo



Consumo de recursos e paralelização O

treinamento da rede neural em uma CPU leva cerca de quatro vezes mais tempo que em uma estação NVIDIA DGX. Nesse caso, a diferença parece insignificante - oito minutos na NVIDIA DGX Station e 32 minutos na CPU. No entanto, este é um modelo pequeno com uma pequena quantidade de dados. Ao implementar projetos reais, onde haverá várias vezes mais casos e eventos, o treinamento na CPU levará pelo menos uma semana. Nesse caso, o uso da NVIDIA DGX Station reduzirá o tempo de treinamento para dois dias, o que aumentará bastante a eficiência do trabalho. 

Também foi revelado que a velocidade do processo de aprendizado depende muito do número de GPUs usadas, o que mostra a vantagem da NVIDIA DGX Station.

Isso é confirmado por experimentos anteriores na CPU e GPU NVIDIA DGX Station usando o conjunto de dados original sem qualquer processamento preliminar:

  • Tempo de aprendizado na CPU: 6 minutos e 18 segundos.
  • Tempo de treinamento da GPU: 34 segundos.

Visualização de carga da GPU



Visualização de carga da CPU



Resultados de redes neurais




  • Teste MAE = 10 dias.
  • A duração média do caso no teste = 67 dias.
  • Tempo de inferência = 20 segundos.

achados


  • Implementamos um piloto para avaliar métodos de aprendizado de máquina no contexto de tarefas de Mineração de Processos.
  • Testamos e expandimos a lista de nossas ferramentas com a qual resolveremos problemas importantes para os negócios.
  • Um dos resultados interessantes foi a criação de nossa própria implementação de computação paralela em 4 placas Tesla v100, equipadas com a estação DGX: o uso de várias gpu acelera o aprendizado quase alinhado com o número de gpu (o código é paralelo).
  • A transição para uma entrada totalmente contínua e o uso de uma rede neural tornaram possível tirar uma semana da linha de base.
  • O tempo aumenta de alguns minutos para uma hora e meia (treinamento em arquitetura final e incorporação, mas as incorporação podem ser usadas pré-treinadas, para que o tempo seja reduzido para 20 minutos).

As experiências descritas mostram que, no campo da mineração de processos, os algoritmos de aprendizado profundo e de máquina podem ser aplicados com sucesso. Além disso, foi revelado que a velocidade do processo de aprendizado depende muito do número de GPUs usadas, o que mostra a vantagem da NVIDIA DGX Station.

O que e como pode ser melhorado


Incorporações no estilo Word2vec para eventos

Quando criamos nosso modelo, incluindo incorporações para variáveis ​​categóricas, não levamos em conta a sequência de eventos entre si, ou seja, a semântica peculiar de eventos dentro dos casos. Para aprender algo útil com a ordem dos eventos dentro dos casos, você precisa treinar incorporações para esses eventos.

Idéia

  • Tomamos uma característica categórica e uma real, dividimos o real por bucket, então cada transação será caracterizada pelo valor da variável categórica e pelo bucket em que o valor da variável real cai. Combinando esses dois valores, obtemos, por assim dizer, um análogo da palavra para o evento.
  • Consideramos o caso como uma sentença (o conjunto de palavras na sentença corresponde ao conjunto de eventos no 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 ̆. 

Contagem O



uso de recursos de incorporações aumenta um décimo de dia por dia.

Eventualmente

  • Os casamentos acabaram, é claro, sem instrução, porque eles treinaram um pouco.
  • Existem cerca de 290 recursos de incorporações categóricas e 20 recursos de incorporações semânticas (não faz mais sentido, porque o tamanho do dicionário é pequeno), portanto a influência desses recursos semânticos pode ser nivelada devido a um desequilíbrio na proporção de recursos.
  • A semântica entre os eventos precisa ser de alguma forma adicionada ao conjunto de treinamento, porque, devido ao fato de as sequências de eventos (casos) serem ordenadas, a ordem é importante e as informações podem ser extraídas disso.
  • Você pode usar arquiteturas mais sofisticadas para incorporação.
  • , , — .

All Articles