• Nenhum resultado encontrado

PREVISÃO DE CONSUMO DE ENERGIA BASEADA EM SÉRIES TEMPORAIS

4. ARQUITETURA DO SISTEMA PROPOSTO

4.3. PREVISÃO DE CONSUMO DE ENERGIA BASEADA EM SÉRIES TEMPORAIS

O desenvolvimento do projeto foi dividido em quatro etapas, conforme ilustrado na Figura 27 e descrito cada etapa ao longo do texto.

Figura 27 - Etapas do desenvolvimento do projeto

ETAPA 1: PRÉ-PROCESSAMENTO DOS DADOS

Como os dados de consumo diário dos bairros estavam segmentados em 11 arquivos de extensão ".csv" o primeiro passo foi unificar os dados em um arquivo chamado merged_block.csv, resultando em um total de 335427 registros e 9 atributos, conforme Figura 28, que também exibe os 10 primeiros registros do arquivo merged_block.csv. A Figura 29 exibe o código desenvolvido, onde a biblioteca glob foi utilizada para fazer o merge dos arquivos .csv.

Figura 28 - Exibição do shape e dos 10 primeiros registros da base de dados do projeto antes do tratamento de dados

ETAPA 4

MÉTRICAS DE AVALIAÇÃO ETAPA 3

PREVISÕES E ANÁLISE DOS RESULTADOS ETAPA 2

CONSTRUÇÃO DA RNA ETAPA 1

Figura 29 - Código desenvolvido para unificar os arquivos .csv

Após analisar a base de dados, para um primeiro estudo, foi decidido prever o consumo máximo diário de energia (energy_max), assumindo a média diária da somatória de cada atributo de consumo de energia dos bairros selecionados (blocks). Sendo assim, foi realizado um agrupamento dos dados por dia, calculando a média dos atributos numéricos (float e int) e obtendo um novo dimensionamento de dados, conforme exibido na Figura 30, resultando em um total de 824 registros. Por fim, estes foram os dados utilizados para formar as bases de treino e teste do modelo preditivo. A Figura 31 exibe o código desenvolvido para atingir o resultado descrito acima.

Figura 30 - Exibição do shape e dos 10 primeiros registros da base de dados do projeto após o tratamento de dados

Figura 31 - Código de agrupamento dos dados por dia calculando a média de cada atributo da base de dados merged_block.csv, gerando assim a base de dados groupby_block_year_month_day.csv, utilizada para formar as bases de

treino e teste do modelo preditivo

Para a base de dados de treino foram utilizados 76% da base de dados tratada, resultando nos primeiros 623 registros de dados, e para a base de dados de teste foram utilizados os 24% dos registros restantes, resultando em 201 registros de dados que o modelo treinado irá prever.

O próximo passo foi importar a base de dados de treino para o data set train, alocando apenas a coluna da série de dados que deseja-se realizar o treinamento, onde no caso em questão, fala-se da coluna da variável energy_max. Os dados do período a serem utilizados no treinamento do modelo preditivo seguem ilustrados no gráfico de séries temporais da Figura 32.

Figura 32 - Gráfico da base de dados de treino de consumo de energia de Londres

Na sequência foi realizada a normalização da base de dados de treino para dar pesos iguais aos atributos e diminuir o tempo de convergência dos algoritmos. Em seguida foi criado um laço de repetição separando os 10 primeiros registros

(window=10) para que a partir desde conjunto seja criado um padrão que será utilizado

para a previsão do próximo valor, então a partir do valor previsto pega-se os 10 registros anteriores para a previsão do próximo valor e assim por diante até finalizar o

looping. A Figura 33 exibe a estrutura de codificação em python que contempla o

descritivo acima.

ETAPA 2: CONSTRUÇÃO DA RNA

Para a construção das redes neurais LSTM foi utilizada a biblioteca keras conforme ilustrado na Figura 34. A biblioteca keras oferece uma série de modelos estruturados para fácil construção de redes neurais artificiais.

Figura 34 - Biblioteca keras, utilizada para a construção da RNA do projeto

Dando início a estrutura da RNA, foi criada inicialmente a variável regressor que inicializa Sequential sem parâmetros. Na sequência é adicionada a camada

LSTM, que por sua vez tem como parâmetro input_shape que recebe os dados

referentes aos registros e intervalo de tempo da variável X_train, retornando essa sequência (recorrência) via parâmetro return_sequences definido como True (False seria sem recorrência, em outras palavras, sem atualização de dados no próprio neurônio da camada) e por fim units especificando quantos neurônios da camada estarão na primeira camada oculta. Em seguida é adicionada a primeira camada de

Dropout, que por sua vez descartará 20% dos neurônios desta camada

aleatoriamente. A Figura 35 exibe o trecho do código descrito.

Figura 35 - Código da primeira camada da RNA LSTM

Logo após foram criadas mais duas camadas LSTM, a segunda e a terceira camadas, onde há recorrência com units de 80 e 50 neurônios respectivamente. A seguir foi adicionada para cada camada uma camada de Dropout, que por sua vez descartará 20% dos neurônios das respectivas camadas aleatoriamente. A Figura 36 exibe o trecho do código descrito. Por fim, é criada uma camada Dense, onde há apenas 1 neurônio de saída.

Figura 36 - Código da segunda e terceira camadas da RNA LSTM

Criadas as camadas estruturais, hora de criar a camada de compilação da RNA. Sendo assim, foi criada a camada de compilação onde como parâmetros temos

optmizer=’adam’, método de descida gradiente estocástico que se baseia na

estimativa adaptativa de momentos de primeira e segunda ordem e é adequado para problemas que são grandes em termos de dados, loss foi definido como

mais peso aos erros e buscando assim melhor precisão. A Figura 37 exibe o trecho do código descrito.

Figura 37 - Código da compilação da RNA

Para alimentação da rede via camada .fit(), foram passados todos os dados contidos em X_train, y_train, assim como foi definido inicialmente que a rede será executada 250 vezes (epochs = 250), atualizando seus pesos de 32 em 32 vezes (batch_size = 32). A Figura 38 exibe o trecho do código descrito.

Figura 38 - Código para a alimentação da RNA via camada .fit()

ETAPA 3: PREVISÕES E ANÁLISE DOS RESULTADOS

A RNA foi treinada, então é hora de iniciar os testes para realizar as previsões do consumo máximo de energia (energy_max). Para isso, foram realizados alguns procedimentos para a base de dados de teste. Primeiramente, foi criada uma variável de nome dataset_test que recebe todo o conteúdo importado da base de dados de teste. Depois foi criada a variável real_energy_max que recebe todos os valores de todas as linhas da coluna energy_max via método iloc[].values. Por fim, foi criada a variável dataset_total que realiza a junção dos dados da coluna energy_max da base de treino e base de teste por meio da função .concat(). A Figura 38 exibe o trecho do código descrito.

Figura 39 - Código para carregamento da base de dados de testes

Dando sequência, foi criada uma variável chamada input que dentro de um laço de repetições recebe como atributos os últimos “n” registros, onde n é o valor definido para a variável window, em seguida são feitas as transformações de formato por cruzamento de dados. A Figura 40 exibe o trecho do código descrito.

Figura 40 - Código de transformação da base de dados de testes para haver compatibilidade de cruzamento

Para a criação da estrutura preditiva para a série temporal, foi criada a variável

X_test que recebe uma lista vazia como atributo, em seguida foi criado um laço de

repetição que irá percorrer, selecionar e copiar para o X_test os 10 (valor inicialmente atribuído à variável window) primeiros registros de entrada através da função

numpy, no formato necessário para haver compatibilidade de cruzamento. A Figura

40 exibe o trecho do código descrito.

Por fim, realizamos as previsões usando a função predict(). Na última linha da Figura 41, anteriormente havia feito a normalização dos números para um intervalo entre 0 e 1, agora após realizadas as devidas previsões, por meio da função

.inverse_transform() os dados foram transformados para o seu formato original de

valor máximo de consumo de energia.

Figura 41 - Código que realiza a previsão do consumo máximo de energia de Londres

Para a plotagem das informações em forma de gráfico foi utilizada a biblioteca

matplotlib. De forma simples, por meio da função .plot() foram passados como

parâmetro os dados reais de consumo máximo de energia do período e os dados previstos pelo modelo, onde com cores distintas e com o rótulo para cada uma facilita o entendimento do resultado. Também foram definidos o título do gráfico, assim como os rótulos para os planos X e Y. Por meio da função .show() o gráfico é exibido no

console. A Figura 42 exibe o trecho do código descrito.

Figura 42 - Código para a plotagem do resultado da previsão comparando como real (real x previsto)

ETAPA 4: MÉTRICAS DE AVALIAÇÃO

Para medir a confiança do modelo preditivo foram utilizadas as bibliotecas math e sklearn, onde foram calculadas as medidas de RMSE, MSE e MAPE, explicadas na Tabela 7. Abaixo, na Figura 43, estão exibidos os trechos do código para apresentação dos resultados das métricas utilizadas.

CAPÍTULO 5

5. RESULTADOS

5.1. 1º EXPERIMENTO REALIZADO

O 1º experimento do modelo preditivo recebeu os parâmetros de configurações da RNA LSTM conforme Tabela 9.

Tabela 9 - Parâmetros de configurações da RNA LSTM do 1º experimento realizado

1ª Configuração de Parâmetros window 10 1ª camada LSTM units=100 Dropout(0.2) 2ª camada LSTM units=80 Dropout(0.2) 3ª camada LSTM units=50 Dropout(0.2) optmizer ‘adam’ epochs 250 batch_size 32 loss ‘mean_squared_error’

Na Figura 44 é exibido o resumo da rede que foi treinada, onde temos 124971 parâmetros a serem treinados.

Após o treinamento da RNA tivemos um loss, medida de erro, de 0.0030, evidenciado na Figura 45.

Figura 45 - Resultado do treinamento do 1º experimento realizado

O gráfico apresentado na Figura 46 imprime a base de treino e teste, onde o modelo fez a previsão diária de 12/08/2013 a 28/02/2014, e o comparativo entre o real e o previsto. Nota-se que o real e o previsto estão bem aproximados, mostrando que o modelo está fazendo uma boa previsão.

Figura 46 - Gráfico de série temporal (Real x Previsto) do 1º experimento realizado

A Figura 47 exibe as medidas, que comprovam que o modelo teve uma margem de erro de aproximadamente 4,66%, ou seja, pode ser considerado um modelo confiável para realizar as previsões.

5.2. 2º EXPERIMENTO REALIZADO

O 2º experimento do modelo preditivo recebeu os parâmetros de configurações da RNA LSTM conforme Tabela 10, onde foi reduzido o parâmetro window de 10 para 5, comparado ao 1º experimento.

Tabela 10 - Parâmetros de configurações da RNA LSTM do 2º experimento realizado

2ª Configuração de Parâmetros window 5 1ª camada LSTM units=100 Dropout(0.2) 2ª camada LSTM units=80 Dropout(0.2) 3ª camada LSTM units=50 Dropout(0.2) optmizer ‘adam’ epochs 250 batch_size 32 loss ‘mean_squared_error’

Na Figura 48 é exibido o resumo da rede que foi treinada, onde temos 124971 parâmetros a serem treinados.

Após o treinamento da RNA tivemos um loss, medida de erro, de 0.0037, evidenciado na Figura 49.

Figura 49 - Resultado do treinamento do 2º experimento realizado

O gráfico apresentado na Figura 50 imprime a base de treino e teste, onde o modelo fez a previsão diária de 12/08/2013 a 28/02/2014, e o comparativo entre o real o previsto. Nota-se que o real e o previsto estão bem aproximados, mostrando que o modelo está fazendo uma boa previsão.

Figura 50 - Gráfico de série temporal (Real x Previsto) do 2º experimento realizado

A Figura 51 exibe as medidas, que comprovam que o modelo teve uma margem de erro de aproximadamente 4,32%, ou seja, foi obtido um resultado melhor que o primeiro experimento e pode ser considerado um modelo confiável para realizar as previsões.

5.3. 3º EXPERIMENTO REALIZADO

O 3º experimento do modelo preditivo recebeu os parâmetros de configurações da RNA LSTM conforme Tabela 11, onde foi mantido o parâmetro window igual a 5, foi reduzida uma camada oculta, mantendo a rede com duas camadas LSTM e o

Dropout foi aumentado de 0.2 para 0.3, em comparação ao 2º experimentos.

Tabela 11 - Parâmetros de configurações da RNA LSTM do 3º experimento realizado

3ª Configuração de Parâmetros window 5 1ª camada LSTM units=100 Dropout(0.3) 2ª camada LSTM units=50 Dropout(0.3) optmizer ‘adam’ epochs 250 batch_size 32 loss ‘mean_squared_error’

Na Figura 52 é exibido o resumo da rede que foi treinada, onde temos 71051 parâmetros a serem treinados.

Após o treinamento da RNA tivemos um loss, medida de erro, de 0.0034, evidenciado na Figura 53.

Figura 53 - Resultado do treinamento do 3º experimento realizado

O gráfico apresentado na Figura 54 imprime a base de treino e teste, onde o modelo fez a previsão diária de 12/08/2013 a 28/02/2014, e o comparativo entre o real o previsto. Nota-se que o real e o previsto estão bem aproximados, mostrando que o modelo está fazendo uma boa previsão.

Figura 54 - Gráfico de série temporal (Real x Previsto) do 3º experimento realizado

A Figura 55 exibe as medidas, que comprovam que o modelo teve uma margem de erro de aproximadamente 4,24%, ou seja, melhor que os dois primeiros experimentos e pode ser considerado um modelo confiável para realizar as previsões.

5.4. 4º EXPERIMENTO REALIZADO

Um último experimento do modelo preditivo com o otimizador ‘adam’ (optmizer=

‘adam’) foi realizado, recebendo os parâmetros de configurações da RNA LSTM

conforme Tabela 12, onde a tentativa de ajustes dos parâmetros foi objetivando obter um resultado ainda melhor que o 3º experimento, que até então obteve a melhor acurácia. Sendo assim, além do aumento do window de 5 para 10, também foram aumentadas as camadas LSTM de duas para três, o Dropout se manteve em 0.3 e o número de epochs foi aumentado de 250 para 400.

Tabela 12 - Parâmetros de configurações da RNA LSTM do 4º experimento realizado

4ª Configuração de Parâmetros window 10 1ª camada LSTM units=100 Dropout(0.3) 2ª camada LSTM units=80 Dropout(0.3) 3ª camada LSTM units=50 Dropout(0.3) optmizer ‘adam’ epochs 400 batch_size 32 loss ‘mean_squared_error’

Na Figura 56 é exibido o resumo da rede que foi treinada, onde temos 124971 parâmetros a serem treinados.

Após o treinamento da RNA tivemos um loss, medida de erro, de 0.0027, evidenciado na Figura 57.

Figura 57 - Resultado do treinamento do 4º experimento realizado

O gráfico apresentado na Figura 58 imprime a base de treino e teste, onde o modelo fez a previsão diária de 12/08/2013 a 28/02/2014, e o comparativo entre o real o previsto. Nota-se que o real e o previsto estão bem aproximados, mostrando que o modelo está fazendo uma boa previsão.

Figura 58 - Gráfico de série temporal (Real x Previsto) do 4º experimento realizado

A Figura 59 exibe as medidas, que comprovam que o modelo teve uma margem de erro de aproximadamente 4,15%, ou seja, pode ser considerado um modelo confiável para realizar as previsões.

Documentos relacionados