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?
fonte
Respostas:
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.
fonte
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.
fonte
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:
As melhores configurações podem ser selecionadas pelo desempenho no conjunto de validação cruzada.
fonte
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 .
fonte