Detecção de outliers de consumo de gás - projeto de rede neural. Maus resultados

10

Tentei detectar discrepâncias no consumo de gás de energia de alguns edifícios holandeses, construindo um modelo de rede neural. Tenho resultados muito ruins, mas não consigo encontrar o motivo.

Como não sou especialista, gostaria de perguntar o que posso melhorar e o que estou fazendo de errado. Esta é a descrição completa: https://github.com/denadai2/Gas-consumption-outliers .

A rede neural é uma rede FeedFoward com propagação traseira. Conforme descrito aqui , dividi o conjunto de dados em um "pequeno" conjunto de 41.000 linhas, 9 recursos e tentei adicionar mais recursos.

Treinei as redes, mas os resultados têm 14,14 RMSE, portanto, não é possível prever tão bem o consumo de gás; consecutivamente, não posso executar um bom mecanismo de detecção de outlier. Vejo que, em alguns trabalhos, mesmo que prevejam o consumo diário ou por hora na energia elétrica, eles apresentam erros como MSE = 0,01.

O que posso melhorar? O que estou fazendo de errado? Você pode dar uma olhada na minha descrição?

Marcodena
fonte
2
Como assim, maus resultados? Descreva seu processo, seus resultados e como eles diferem do que você esperava, em vez de apenas vincular ao repositório git. Caso contrário, essa discussão não será útil para ninguém.
Air
Também é verdade isso: D. Eu adicionei a descrição na página "Os resultados têm 14,14 RMSE, por isso não podem prever tão bem o consumo de gás; consecutivamente, não consigo executar um bom mecanismo de detecção de outlier. Vejo isso em alguns trabalhos que, mesmo que prevejam consumo diário ou por hora na energia elétrica, eles apresentam erros como MSE = 0,01 ".
marcodena
11
@marcodena Este é um site de controle de qualidade, e outros precisam saber o que você está tentando resolver, para que eles entendam as respostas e que possam usá-los em seus próprios problemas. Foi isso que AirThomas quis dizer, e também é por isso que seria bom se você pudesse descrever o que está fazendo e o que exatamente acha errado. Se o link para sua página do git-hub mudar, o link aqui será inválido e outras pessoas não conseguirão entender qual é o problema. Por favor, dedique um minuto para tornar sua pergunta independente. Obrigado.
Rubens
11
Quando você achar que seu problema leva muito tempo para ser explicado, é quando é mais importante dedicar um tempo para explicar sua pergunta a outras pessoas, explicitamente e com muitos detalhes e discussão de suas pesquisas / tentativas. Frequentemente, durante esse processo, você encontrará algumas ou todas as respostas. Não é apenas uma sensação ótima, se o que você acha útil para outras pessoas, você ainda pode postar a pergunta em que passa tanto tempo e as respostas que encontrou.
Air
11
Apenas um esclarecimento, quando você menciona que "em alguns artigos eles têm erros como MSE = 0,01", você se refere ao mesmo conjunto de dados que está usando? Ou é um conjunto de dados completamente diferente?
INSYS

Respostas:

8

Apenas uma ideia - seus dados são altamente sazonais: ciclos diários e semanais são bastante perceptíveis. Portanto, primeiro, tente decompor suas variáveis ​​(consumo de gás e eletricidade, temperatura e radiação solar). Aqui está um bom tutorial sobre decomposição de séries temporais para R.

Depois de obter os componentes sazonais e de tendência, a parte mais interessante começa. É apenas uma suposição, mas acho que as variáveis ​​de consumo de gás e eletricidade seriam bastante previsíveis por meio da análise de séries temporais (por exemplo, modelo ARIMA ). Do meu ponto de vista, a parte mais interessante aqui é tentar prever resíduos após a decomposição, usando os dados disponíveis (anomalias de temperatura, radiação solar, velocidade do vento). Suponho que esses resíduos seriam discrepantes, você está procurando. Espero que você ache isso útil.

sobach
fonte
3

No caderno de treinamento, você apresenta resultados para o treinamento com 20 épocas. Você já tentou alterar esse parâmetro para ver se isso afeta seu desempenho? Este é um parâmetro importante para propagação traseira.

Para estimar os parâmetros do modelo, como apontou o usuário paramaskazemekas, a plotagem de curvas de aprendizado é uma abordagem muito boa. Além disso, você também pode criar um gráfico usando um parâmetro de modelo (por exemplo, épocas de treinamento ou tamanho da camada oculta) vs. Erro de treinamento e validação. Isso permitirá que você entenda a compensação de desvio / variação e ajuda a escolher um bom valor para seus parâmetros. Algumas informações podem ser encontradas aqui . Naturalmente, é uma boa ideia manter uma pequena porcentagem de seus dados para um (terceiro) conjunto de testes.

Como uma observação lateral, parece que aumentar o número de neurônios no seu modelo não mostra melhora significativa para o seu RMSE. Isso sugere que você também pode tentar com um modelo mais simples, ou seja, com menos neurônios e ver como seu modelo se comporta.

De fato, eu sugeriria (se você ainda não o fez) tentar primeiro um modelo simples com poucos ou nenhum parâmetro, por exemplo, regressão linear, e comparar seus resultados com a literatura, apenas como uma verificação de sanidade.

insys
fonte
Eu adicionei alguns gráficos, depois de melhorar o modelo MUITO. No github, existem os novos passos. Posso perguntar como posso aplicar a regressão linear em um problema de série temporal? :(
marcodena
2

O principal problema aqui é que, mesmo antes de tentar aplicar algoritmos de detecção de anomalias, você não está obtendo boas previsões suficientes de consumo de gás usando redes neurais.

Se o principal objetivo aqui é atingir o estágio em que os algoritmos de detecção de anomalias podem ser usados ​​e você declara ter acesso a exemplos de aplicação bem-sucedida de regressão linear para esse problema, essa abordagem pode ser mais produtiva. Um dos princípios da aplicação bem-sucedida de aprendizado de máquina é que vários algoritmos diferentes podem ser testados antes da seleção final com base nos resultados.

Se você optar por ajustar o desempenho da sua rede neural, pode-se usar a curva de aprendizado que representa o efeito da mudança em diferentes hiperparâmetros na taxa de erro. Os hiperparâmetros que podem ser modificados são:

  • número de recursos
  • ordem do polinômio
  • parâmetro de regularização
  • número de camadas na rede

As melhores configurações podem ser selecionadas pelo desempenho no conjunto de validação cruzada.

tomaskazemekas
fonte
Eu adicionei alguns gráficos e você pode verificar também sobre os parâmetros agora :)
marcodena
2

Nos seus cadernos, eu não vi seu modelo de rede neural. Você pode apontar qual biblioteca está usando, quantas camadas você tem e que tipo de rede neural você está usando?

Em seus cadernos, parece que você está usando o conjunto de dados barulhento e outlier para treinar a rede neural; acho que você deve treinar a rede neural no conjunto de dados que não possui outliers, para poder ver a distância de observação da previsão de a rede neural para rotular a observação como algo externo ou não.

Eu escrevi algumas das coisas sobre a detecção outlier em sinais de séries temporais, seus dados são altamente sazonal como sobach mencionado e você poderia usar FFT (primeiro link acima) para obter a tendência geral no sinal. Depois de obter o componente de frequência no consumo de gás, você pode olhar para os componentes de alta frequência para obter os valores extremos.

Além disso, se você quiser insistir em usar a rede neural para dados sazonais, verifique as redes neurais recorrentes, pois elas podem incorporar as observações anteriores melhor do que uma rede neural de baunilha e, supostamente, podem fornecer um resultado melhor para os dados que você possui .

Bugra
fonte
Eu tentei o seu método FFT, mas realmente não entendo como definir o limite de frequência e a amplitude com meus dados. Vou continuar procurando, mas se u poderia me ajudar ...
marcodena
Eu adicionei as fontes também
marcodena