Alexandre Marcondes
15/1/2021

Ciência de dados e energias renováveis: Facebook Prophet para a previsão de geração de energia solar

A participação da energia solar na matriz energética brasileira vem aumentando exponencialmente nos últimos anos. Um maior domínio das tecnologias envolvidas no processo de transformação de energia proveniente da radiação solar, além da necessidade de uma geração mais limpa via fontes renováveis, contribuíram fortemente para a adoção desse tipo de solução.

As aplicações são variadas: painéis solares podem ser utilizados tanto em grandes usinas fotovoltaicas quanto adquiridos por consumidores finais e instalados no nosso próprio telhado, sendo que o investimento no sistema se paga durante os anos devido à economia na conta de energia elétrica. Por conta das condições climáticas favoráveis, o Brasil tem um grande potencial na exploração dessa fonte de energia.

Modelos preditivos e energia solar

Modelos de machine learning podem ser muito úteis para previsões de séries temporais. Podemos prever volume de vendas, variações em valores de ações, grandezas climáticas entre outras várias possibilidades. Nos dias atuais, com o acesso a grandes volumes de dados em conjunto com o avanço no potencial dos hardwares, os modelos preditivos se tornam ferramentas muito úteis para a condução de um planejamento estratégico inteligente, utilizando dados históricos para a estimativa do comportamento futuro.

No setor energético, a situação não é diferente: os modelo preditivos podem ser grandes aliados no desenvolvimento do setor. Para os sistemas fotovoltaicos, cito algumas possíveis aplicações:

  • Previsão de geração — A previsão de geração em longos prazos pode ser útil para o planejamento energético em diferentes níveis (indústrias, estados ou países). Já previsões em curto prazo podem ser utilizadas para a operação de sistemas elétricos; por exemplo, quando se tem que tomar decisões rápidas sobre o acionamento ou não de uma unidade geradora de energia elétrica.
  • Manutenção preditiva — Quando se tem um histórico de falhas ou paradas, podemos identificar o padrão dessas falhas por meio de modelos de machine learning. Com um modelo treinado, é possível monitorar o comportamento dos componentes da usina e prever com antecedência possíveis falhas, permitindo a manutenção antecipada.
  • Detecção de anomalias — algoritmos podem identificar comportamentos não usuais nos componentes do sistema, permitindo a manutenção ou substituição deles.
  • Visão computacional — Algoritmos de visão computacional, com as conhecidas redes neurais artificiais, podem ser úteis também. Uma possível aplicação seria o monitoramento da temperatura de painéis fotovoltaicos com imagens de calor dos painéis. Uma rede neural treinada poderia identificar pontos de aquecimento não usual.

Sobre o Prophet

O Prophet foi desenvolvido pelo Facebook afim de obter um modelo robusto e facilmente escalável para séries temporais. No site do Prophet podemos encontrar a seguinte explicação para o a biblioteca:

O Prophet é uma biblioteca para previsões de séries temporais baseada em modelos aditivos. Com o Prophet os efeitos sazonais não-lineares, além de efeitos de feriados, são ajustados diariamente, semanalmente e anualmente. O Prophet funciona de maneira mais eficaz com dados fortemente sazonais e que contenham um grande histórico. O Prophet é robusto para lidar com valores nulos e mudanças nas tendências das séries, além de apresentar boa performance com outliers.

Além das informações no próprio site, a equipe do Facebook elaborou um artigo que descreve detalhadamente o desenvolvimento do modelo. Sobre ser escalável, as duas ideias principais descritas no artigo estão relacionadas a um modelo que um grande número de pessoas possa utilizar, possivelmente sem treinamento em métodos de séries temporais, e que seja adaptável a uma grande variedade de problemas.

A equação principal do modelo implementado no Prophet é a seguinte:


Onde g(t) é a função de tendência, que modela as mudanças não periódicas na série, s(t) representa as mudanças periódicas e sazonais, h(t) representa os efeitos de feriados e ϵ(t) nos traz as mudanças que não são abordadas nos termos anteriores.

A representação dos feriados não será útil em nosso problema, pois a geração de energia solar depende, principalmente, das condições climáticas. Porém, esse termo pode ser muito útil em séries temporais relacionadas a vendas, por exemplo, onde feriados podem ter um forte efeito na série temporal.

Vamos para a prática: prevendo a geração anual de um sistema fotovoltaico

Para demonstrar o Prophet e sua aplicação em energia solar, vamos prever a geração anual de um sistema fotovoltaico. Para isso, vamos utilizar um dataset disponibilizado no Kaggle. Trata-se de um sistema fotovoltaico de 5kWp instalado na cidade da Antuérpia, na Bélgica.

Na Figura 1, observamos todo o histórico de geração do sistema. Nota-se que existem muitas variações bruscas, que ocorrem principalmente por variações climáticas, nuvens ou manutenções. Esses pontos podem ser difíceis de prever, pois são situações que saem do padrão do histórico e não podemos representar esses eventos nas variáveis do modelo, visto que podem ocorrer de maneira inesperada.

Já na Figura 2, temos a média móvel em 30 dias para o histórico de geração. Nela, podemos observar de maneira mais clara o comportamento sazonal da geração solar: no inverno teremos menores níveis de geração, enquanto no verão observamos aumento, pois as condições climáticas favorecem uma maior incidência solar.

Figura 1: dados de geração diária do sistema fotovoltaico.
Figura 2: média móvel em 30 dias para os dados de geração.

Nos dados, temos duas colunas: uma de data e outra relacionada à produção de energia solar acumulada a cada dia. A ideia é prever diariamente a geração de energia solar no ano de 2019, com o objetivo de prever a geração acumulada para este ano.

Temos dados para esse sistema desde 2012 até a metade do ano de 2020. Para nosso modelo, utilizamos como base de treino os dados até o fim de 2018 e reservamos para o teste de desempenho do modelo o ano de 2019.

Variáveis climáticas

Para auxiliar na previsão dos valores de geração, adicionamos algumas variáveis climáticas como variáveis de nosso modelo. O Prophet permite adicionarmos séries temporais auxiliares com o método add_regressor().

Para obter os dados climáticos, foi utilizada o pacote wwo-hist, que permite extrair facilmente históricos de clima do site World Weather Online. O código abaixo foi utilizado para extrair as informações climáticas para nosso local de interesse. Com o script abaixo extraímos dados de janeiro de 2009 a dezembro de 2020.

from wwo_hist import retrieve_hist_data
frequency = 24
start_date = "01-JAN-2009"
end_date = "31-DEC-2020"
api_key = "YOUR_API_KEY"
location_list = ["antwerp"]
hist_weather_data = retrieve_hist_data(
   api_key,
   location_list,
   start_date,
   end_date,
   frequency,
   location_label=False,
   export_csv=True,
   store_df=True,
)

Entre os dados climáticos extraídos estão informações de temperatura, pressão, umidade do ar, encobrimento do céu por nuvens, horários do amanhecer e entardecer, nascer do sol entre outros.

Para utilizar essas variáveis no Prophet, temos que selecionar dados que sejam já conhecidos para os dias que faremos a previsão. Como queremos fazer a previsão para o ano de 2019, temos que utilizar somente dados históricos anteriores a esse ano.

Para utilizar as variáveis climáticas, portanto, trouxemos as informações de 1, 2 e 3 anos atrás em relação à data de interesse. Assim, podemos observar o comportamento padrão das variáveis climáticas desse dia do ano sem que haja vazamento de informações futuras.

Modelo

Para treinar o modelo no Prophet, é necessária a criação de um dataframe com duas colunas: ds e y, onde ds é nossa coluna de data e y é a coluna que queremos prever; ou seja, os valores de geração do sistema fotovoltaico. Em nosso caso, onde utilizaremos regressores extra (variáveis climáticas), as colunas com esses features devem ser também adicionadas ao dataframe. Na Tabela 1, temos uma visão do formato do nosso dataframe.

Tabela 1: formato do dataframe para o treinamento do modelo no Prophet.

O que chama bastante a atenção no Prophet é a relativa simplicidade para a criação de um modelo para séries temporais. Com o dataframe criado, utilizamos o script abaixo para treinar nosso modelo.

m = Prophet()
for col in df_treino.columns[5:]:
   m.add_regressor(col)
m.fit(df_treino)

A primeira linha cria uma instância da classe Prophet, a qual contém as funções necessárias para treinar o modelo. O laço logo abaixo adiciona os regressores extra. Por fim, na quarta linha, o modelo é treinado de acordo com os dados que preparamos anteriormente.

Para fazer a previsão para o ano de 2019, utilizamos o método make_future_dataframe(), que cria um dataframe no horizonte de tempo desejado e pode ser utilizado para fazer previsões no futuro utilizando o modelo criado. Ao selecionar o período que desejamos, automaticamente o Prophet criará um dataframe com datas superiores aos dados utilizados no treino. Abaixo, observamos o script utilizado para criar o dataframe e fazer as previsões para 2019.

future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)

Resultados obtidos

Ao fazermos a predição, o Prophet gera um dataframe com 3 informações principais:

  • yhat — valor previsto;
  • yhat_lower — intervalo inferior da incerteza da previsão;
  • yhat_upper — intervalor superior da incerteza da previsão.

Para observar graficamente a previsão, o Prophet contém também uma ferramenta de gráficos. A Figura 3 foi construída por meio do método plot() do Prophet e apresenta a comparação dia-a-dia dos valores reais, previstos e as incertezas. A linha vermelha indica o limite entre os dados de treino e teste.

Figura 3: valores previstos pelo Prophet comparados aos valores reais de geração.

Observamos acima que o Prophet consegue identificar muito bem a sazonalidade anual da geração solar, trazendo uma boa estimativa. Porém, notamos também que, em diversos pontos, há mudanças bruscas nos valores reais de geração que o Prophet não consegue acompanhar. Essas mudanças podem ter diversos fatores: dias extremamente nublados, painéis fotovoltaicos com sujeira ou neve, sistema inativo para manutenção etc.

Na Figura 4, temos um gráfico que compara a geração acumulada no ano de 2019 com os valores previstos. Notamos que, para a geração anual acumulada, os resultados são bastante satisfatórios. Com o Prophet, conseguimos identificar bem o padrão de crescimento, mesmo que os resultados para a geração a cada dia não tenham identificado as mudanças bruscas na geração em alguns dias.

Figura 4: comparação da geração acumulada prevista com os dados reais da base de teste.


Por fim, mostramos na Figura 5 a geração acumulada e prevista a cada mês no ano de 2019. Nota-se que nos primeiros e últimos meses do ano a performance foi pior, enquanto os resultados entre os meses de abril e agosto foram superiores.

Os melhores resultados ocorreram nos meses de maior geração. A melhor performance nesses meses ocorre justamente por causa do verão. No verão, temos um clima mais ameno, com céu aberto, menor nebulosidade e não há neve. Portanto, as condições climáticas favorecem a geração de energia fotovoltaica com menos interferências. Quando temos um comportamento com menos variações abruptas, o modelo tem uma maior facilidade para identificar os padrões.

Figura 5: comparação dos valores reais e previstos mês a mês.

Conclusão

O Prophet é uma ótima ferramenta para séries temporais, principalmente pela facilidade na criação de um modelo. No problema resolvido, os resultados foram satisfatórios para a geração acumulada no ano, porém para a previsão diária tivemos dificuldades para acompanhar as variações bruscas de geração que ocorrem em alguns dias.

Para tentar identificar essas variações bruscas com o modelo, podemos tentar trabalhar com previsões mais curtas, utilizando dados de previsão do tempo. Mesmo assim, sempre existirá a incerteza devido a situações que não podemos controlar nos sistemas de geração.

Modelos preditivos já são realidade em diferentes segmentos do mercado. No setor energético não será diferente.


Referências

https://facebook.github.io/prophet/

Artigo do Prophet.

https://pypi.org/project/wwo-hist/

Mais artigos da Datarisk

Ver todos os artigos
© Copyright 2017 - 2022 | Datarisk.io | Todos os direitos reservados