Detecção de anomalia em um ERP
Tags: machinelearning
Published: 2020-01-28 12:11:46

A [Kugel](https://www.kugel.com.br/) fornece um ERP completo para Cooperativas Agroindustriais e dentro desse ERP temos um sistema para o controle do plantio, que vai desde o planejamento do plantio até a venda das sementes e fertilizantes para os cooperados.

O planejamento de plantio é muito importante, porque é a partir dele que a cooperativa negocia as compras com os fornecedores. Quanto mais assertivo for o planejamento, melhor será o resultado financeiro da cooperativa, pois terá menos desperdício de insumos.

Existe um período para que os agrônomos façam o planejamento de plantio, após esse período o planejamento é bloqueado para aprovação da gerência. Em nosso maior cliente, cada safra tem mais que 10 mil planejamentos para serem aprovados e isso estava tornando a aprovação menos detalhada e mais suscetível a erros.

Como tinha acabado de terminar um curso de [machine learning](https://www.coursera.org/learn/machine-learning) percebi que a maioria dos erros nos planejamentos poderiam ser detectados como anomalias utilizando [Distribuição normal](https://pt.wikipedia.org/wiki/Distribui%C3%A7%C3%A3o_normal).

Para fazer o cálculo de probabilidade e detectar se algum planejamento está anormal, são necessárias duas variáveis, a média e a variância. A média define o local da distribuição no eixo x e a variância define o quanto o valor varia.

![Densidade de probabilidade de acordo com os parâmetros média e variância](https://dev-to-uploads.s3.amazonaws.com/i/5wmgqmltkbeoefac3tef.png)
<figcaption>Densidade de probabilidade de acordo com os parâmetros média e variância</figcaption>

-------------------------------------------------

Para calcular a probabilidade, todos os dados devem ser numéricos. No caso dos planejamentos existem três dados que são importantes:

- Data do plantio
- Espaçamento
- Quantidade de plantas por metro quadrado

Como o espaçamento e a quantidade de planta por metro quadrado já são números decimais não é necessário fazer nenhuma conversão. No caso da data do plantio é convertida para a quantidade de dias desde o início da safra.


-------------------------------------------------

Para calcular a média e a variância utilizamos as seguintes fórmulas:

![Fórmula da média](https://dev-to-uploads.s3.amazonaws.com/i/j78dpj8vkdwdot8jvdk1.png)<figcaption>Fórmula da média</figcaption>

![Fórmula da variância](https://dev-to-uploads.s3.amazonaws.com/i/vvpzlqtqhsy2nw2wkg35.png)<figcaption>Fórmula da variância</figcaption>

Sendo "m" a quantidade total de planejamentos de plantio e "x" a variável que estamos verificando. No caso dos planejamentos temos três variáveis que queremos controlar que define quando e quanto será utilizado. Então é realizado o cálculo da média e da variância para cada variável, ou seja, temos três médias e três variâncias.

Com a média e a variância é possível calcular a densidade de probabilidade. Quanto menor o valor da densidade, maior a probabilidade do valor ser uma anomalia.

![Fórmula da densidade de probabilidade](https://dev-to-uploads.s3.amazonaws.com/i/4l6m9mm4yahzaxo8hoyh.png)<figcaption>Fórmula da densidade de probabilidade</figcaption>

Com os planejamentos que eu tinha para teste, achei melhor criar três faixas de valores para apresentar em tela:

- f(x) > 0.2, planejamento normal
- f(x) ≤ 0.2 e > 0.0001, planejamento com possível erro (em amarelo)
- f(x) ≤ 0.0001, planejamento com erro (em laranja)

![Print da tela que os gerentes tem acesso](https://dev-to-uploads.s3.amazonaws.com/i/jhrj7jmakjx09h159ehh.png)<figcaption>Print da tela que os gerentes tem acesso</figcaption>

-------------------------------------------------

Ainda ficaram alguns casos em que o sistema acusava tudo como anomalia ou nenhuma anomalia quando deveria ter acusado algumas. Identifiquei que isso estava ocorrendo em casos que existiam poucos planejamentos e tinha pelo menos um que estava muito fora da faixa que deveria ser considerada padrão.

Isso ocorre porque a média fica deslocada e a variância muito alta. Então resolvi esse problema excluindo 5% dos menores e maiores valores para calcular a média e a variância.

![Exemplo densidade de probabilidade considerando todos e excluindo 5%](https://dev-to-uploads.s3.amazonaws.com/i/7odqcsk0an6t5emgqbv8.png)<figcaption>Exemplo densidade de probabilidade considerando todos e excluindo 5%</figcaption>

-------------------------------------------------

Utilizando conceitos básicos de detecção de anomalia, conseguimos diminuir consideravelmente o risco de erros graves e ainda a diminuição considerável de tempo para análise e aprovação dos planejamentos.