post-image

Existem vantagens ao implantar o horário de verão?


Neste post tentaremos avaliar se existe evidência estatística de redução do consumo de energia elétrica durante o horário de verão. Para isso utilizaremos as estatísticas de consumo elétrico divulgadas pelo Operador Nacional do Sistema Elétrico (ONS).

Introdução

Há algum tempo eu pensei em escrever um post sobre o horário de verão, porém outras notícias acabaram sendo priorizadas. Nesse final de semana ocorreu a prova do Exame Nacional do Ensino Médio (ENEM) e eu vi essa notícia, discutindo as preocupações sobre horário errado dos celulares e do relógio de rua, uma vez que o horário de verão não foi implementado no Brasil este ano. A notícia resgatou o meu interesse pelo tema.

O horário de verão é a prática de adiantar os relógios em uma hora durante os meses do verão, com o objetivo de economizar energia nas regiões que mais recebem luminosidade solar. No Brasil, o horário de verão esteve em vigor, ininterruptamente, de 1985 a 2018. Porém este ano o governo decidiu não instituir o horário de verão. A justificativa do governo foi de que:

“Após estudos técnicos que apontam para a eliminação dos benefícios por conta de fatores como iluminação mais eficiente, evolução das posses, aumento do consumo de energia e mudança de hábitos da população, decidimos que não haverá horário de verão na temporada 2019/2020.”

Eu não consegui encontrar os estudos técnicos citados pelo Governo como evidência para acabar com o horário de verão. Além disso, apesar de algumas estimativas do ganho energético histórico com a medida terem sido divulgadas, eu também não consegui encontrar os relatórios mostrando como esses cálculos foram feitos. Essas estimativas apontam um economia de R\$ 405 milhões em 2013, caindo para R\$ 159,5 milhões em 2017 - uma redução de 60% em 5 anos. Entre 2010 e 2015, as estimativas de economia em termos percentuais se mantiveram praticamente estáveis, em média de 0,5% no consumo de energia, chegando a 5% nos horários de pico. Essa energia poupada seria suficiente para abastecer uma cidade como Brasília, com 2,8 milhões de habitantes, por até um mês.

Indiretamente, o horário de verão pode também ter outros benefícios. O presidente da Associação Brasileira de Bares e Restaurantes (Abrasel), Percival Maricato, estima um aumento da ordem de pelo menos 5% no faturamento do setor em razão do adiantamento dos relógios. Segundo ele:

“As pessoas se sentem mais seguras quando a cidade ainda está clara. O horário de verão dá a impressão de estar saindo mais cedo do trabalho e estimula o happy hour.”

No site do Ministério de Minas e Energia há uma explicação simples para a redução da economia nos últimos anos do horário de verão. Antigamente a iluminação respondia por uma parcela significativa do consumo de energia elétrica no Brasil. Nas regiões Centro-Oeste, Sudeste e Sul, que são mais distantes da linha do equador, os dias de verão são mais longos que no Norte e Nordeste. Ao adiantar os relógios em uma hora, economizava-se energia ao adiar o uso da iluminação noturna (mesmo em algunas casos usando mais iluminação de manhã cedo pois ainda estava escuro). Além disso, diminuia a sobrecarga nas redes de transmissão elétrica, pois além das casas, a iluminação pública era acionada mais tarde, deixando de coincidir com o horário de consumo da indústria e do comércio.

Mais recentemente, porém, em grande parte devido ao uso de equipamentos de condicionamento de ar, os impactos energéticos associados ao horário de verão estão diretamente associados à temperatura e não somente aos aspectos de iluminação. Porém, temperatura e luminosidade são positivamente correlacionadas, ou seja, quanto maior a iluminação natural maior também a temperatura. Assim, o horário de verão reduz o consumo elétrico para iluminação, porém aumenta o consumo para equipamentos de condicionamento de ar.

Neste post, tentarei avaliar se a implatação do horário de verão realmente traz uma redução no consumo elétrico. Para fazer essa avalição, utilizaremos dados públicos sobre o consumo elétrico no país.

Dados do consumo elétrico

O consumo de energia elétrica é influenciado por vários fatores, tais como quantidade de luz e temperatura, dia da semana e presença de feriados. Para entender o comportamento do consumo elétrico no país, precisamos considerar todas essas informações na análise.

Para obter dados sobre o consumo elétrico no Brasil, recorremos ao site do Operador Nacional do Sistema Elétrico (ONS). O ONS é uma entidade brasileira de direito privado sem fins lucrativos que é responsável pela coordenação e controle da operação das instalações de geração e transmissão de energia elétrica do Sistema Interligado Nacional (SIN), sob a fiscalização e regulação da Agência Nacional de Energia Elétrica (Aneel) do Brasil. O site do ONS disponibiliza publicamente diversas estatísticas, com frequências anuais a diárias, sobre diferentes sistemas.

Neste post analisamos os dados de carga energética diária no período de 1999 a 2019, disponíveis nesse link. Esses dados revelam a quantidade diária de Carga Própria de Energia (MWmed) produzidos pelos quatro sistemas de geração de eletricidade do país (Norte, Nordeste, Sudeste/Centro-Oeste e Sul). A Carga Própria de Energia é definida como a demanda média requerida de uma instalação ou conjunto de instalações durante um período de referência (relação entre a eletricidade gerada em Megawatt-hora (MWh) e o tempo de funcionamento das instalações). Uma vez que esses dados só estão disponíveis para o total de cada sistema, não foi possível identificar o consumo em áreas mais refinadas.

Os dados sobre o clima foram obtidos no site do Instituto Nacional de Meteorologia (INMET): estatísticas diárias de precipitação, temperatura máxima, insolação e umidade relativa média. A grande dificuldade de utilizar esses dados se dá pela abrangência geográfica dos sistemas elétricos. Por causa disso, para cada sistema optamos por utilizar apenas os dados da estação meteorológica da maior cidade do sistema (Manaus, Salvador, Porto Alegre e São Paulo). A baixa resolução geográfica dos dados de consumo energético, e a utilização de apenas uma estação meteorológica para cada sistema, são claramente os dois pontos mais problemáticos das análises que serão feitas nesse post, e serão discutidos com mais detalhes na sessão posterior.

A lista com todos os feriados do Brasil nos últimos 20 anos foi obtida no site calendarr. Além disso, para realizar a nossa análise, também precisamos dos períodos exatos de vigência do horário de verão, disponíveis nessa página da Wikipedia.

O objetivo desse post é comparar o consumo energético durante o horário de verão com o de outros períodos, para avaliar o seu efeito. A dificuldade desse tipo de análise é que o ideal seria comparar o mesmo período, com e sem o horário de verão. Porém isso é impossível. É necessário fazer algum tipo de suposição ao comparar dois períodos de tempo distintos, e pressupor que as diferenças observadas são causadas pela presença/ausência do horário de verão.

Nesta sessão vamos fazer uma análise exploratória preliminar, considerando somente os dados relativos as datas onde o horário de verão começa a vigorar, e quando se encerra, porque não é possível realizar a comparação no mesmo período; a melhor alternativa então é comparar períodos próximos. Para isso, definimos uma janela de 14 dias antes e depois de cada mudança. Essa janela foi escolhida para garantir que todos os períodos sejam iguais com relação aos dias da semana incluídos: todos terão dois domingos, duas segundas-feiras, e assim por diante. Isso é importante porque o consumo é muito diferente dependendo do dia da semana.

Apesar de conseguir igualar os dias da semana, nessa análise não é possível controlar o número de feriados nas janelas (muitas vezes o Carnaval ocorre antes do final do horário de verão), nem a quantidade de luz e temperatura. Ou seja, apesar do fato de que essa comparação é interessante pela proximidade temporal, os resultados podem estar sofrendo a influência de outros fatores e não refletindo somente a presença/ausência do horário de verão. Além disso, talvez o ganho maior do horário de verão seja durante o auge do verão, nos meses de Dezembro/Janeiro, e não no início e final do mesmo. Pensando nisso, seria interessante utilizar um estimador que levasse em conta todo o período do horário de verão. Discutiremos uma outra opção para a avaliação da efetividade energética na sessão seguinte.

Na figura 1 ilustramos uma dessas janelas de comparação, referente ao final do horário de verão em 18/02/2019. Note que mesmo as regiões do Norte e Nordeste que não participaram do horário de verão, foram incluídas no gráfico. Visualmente, há pouca diferença perceptível no consumo e as oscilações parecem ser causadas principalmente pelos dias da semana.

Janela de comparação - 14 dias antes e depois do final do horário de verão em 18/02/2019

Figure 1: Janela de comparação - 14 dias antes e depois do final do horário de verão em 18/02/2019

Dados do ONS

Nesta sessão de código mostrarei como obter todos os dados utilizados nesse post, bem como criar as janelas utilizadas para criar o indicador de economia energética. Não escrevi um código para extrair os dados de consumo elétrico do ONS. Como precisei baixar apenas quatro arquivos, achei mais fácil fazer manualmente do que escrever um programa para baixar os dados automaticamente. Disponibilizei um arquivo zip. Pelo mesmo motivo, os dados do INMET das 4 estações consideradas no texto principal também foram disponibilizadas para download.

Os outros dados, com as datas dos feriados e com todos os períodos de implementação do horário de verão são baixados automaticamento pelo código no code chunck abaixo, das fontes originais.


require(tidyr)
require(dplyr)
require(tidyverse)
require(knitr)
require(kableExtra)
require(forecast)
require(broom)

dir = tempdir()

#############################
### Dados do ONS

url <- "http://www.pollingdata.com.br/blog/horario verao - 04-11-2019/dados_ons_1999_2019.zip"
file.data = tempfile(tmpdir=dir, fileext=".zip")
download.file(url,file.data,method="curl")
unzip(zipfile=file.data,exdir=dir,junkpaths=TRUE)

df <- tibble(
  files = dir(path=dir,pattern = "Simples_Carga_de_Energia_Dia_Hora_data - 1999 a 2019",full.names = TRUE),
  dados = map(files,~read_delim(.,delim = ";",col_names = TRUE,locale = locale(decimal_mark = ",",encoding = "UTF-8")))
)

df.reg <- reduce(df$dados,bind_rows)
names(df.reg) <- c('data1','data2','periodo','sistema','consumo')
df.reg$data <- as.Date(str_sub(df.reg$data2,1,10),format="%d/%m/%Y")
df.reg <- df.reg %>% select(sistema,data,consumo)

#############################
### Dados do INMET

url <- "http://www.pollingdata.com.br/blog/horario verao - 04-11-2019/dados_inmet_1999_2019.zip"
file.data = tempfile(tmpdir=dir, fileext=".zip")
download.file(url,file.data,method="curl")
unzip(zipfile=file.data,exdir=dir,junkpaths=TRUE)

df.inmet <- tibble(
  files = dir(path=dir,pattern = "Estação - [0-9]{5}.html",full.names = TRUE),
  dados = map(files,~read_delim(.,delim = ";",col_names = TRUE,locale = locale(decimal_mark = ".",encoding = "UTF-8"),skip = 47))
)
df.inmet <- reduce(df.inmet$dados,bind_rows)
df.inmet <- df.inmet %>% group_by(Estacao, Data) %>% summarise_at(vars(-Hora),list(~sum(.,na.rm = TRUE)))
df.inmet$X8 <- NULL
df.inmet$Data <- as.Date(df.inmet$Data,format="%d/%m/%Y")
df.inmet <- df.inmet %>% drop_na()
df.inmet <- df.inmet %>% arrange(Estacao,Data)
df.inmet <- df.inmet %>% rename(estacao=Estacao,data=Data,prec=Precipitacao, temp.max=TempMaxima, insolacao=Insolacao,umid=`Umidade Relativa Media`)

df.est <- tibble(
  estacao = c(82331,83229,83967,83781),
  cidade = c('MANAUS','SALVADOR','PORTO ALEGRE','SAO PAULO'),
  sistema = c('Norte','Nordeste','Sul','Sudeste/Centro-Oeste')
)
df.inmet <- df.inmet %>% left_join(df.est)

#############################
### Dados dos feriados

#função para extrair feriados do html do site

extrair_feriados <- function(ano,url){
  
  pag.fer <- read_html(url)
  mes = pag.fer %>% html_nodes(xpath="//div[contains(@class,'list-holiday-box')]//span[contains(@class,'holiday-month')]")
  day = map(mes,~html_text(html_nodes(.,xpath="./following-sibling::ul[1]//span[contains(@class,'holiday-day')]")))
  week = map(mes,~html_text(html_nodes(.,xpath="./following-sibling::ul[1]//span[contains(@class,'holiday-week')]")))
  name = map(mes,~html_text(html_nodes(.,xpath="./following-sibling::ul[1]//a[contains(@class,'holiday-name')]")))
  df.fer <- tibble(
    mes=html_text(mes),
    dia=day,
    semana=week,
    nome=name,
    ano = ano
  ) %>% unnest()
  
}

df.feriados <- tibble(
  anos = 1999:2019,
  url = paste0("https://www.calendarr.com/brasil/calendario-",anos,"/"),
  df = map2(anos,url,~extrair_feriados(.x,.y))
)

df.fer <- reduce(df.feriados$df,bind_rows)
df.fer <- df.fer %>% mutate(
  mes = case_when(
    mes == "Janeiro" ~ "Jan",
    mes == "Fevereiro" ~ "Feb",
    mes == "Março" ~ "Mar",
    mes == "Abril" ~ "Apr",
    mes == "Maio" ~ "May",
    mes == "Junho" ~ "Jun",
    mes == "Julho" ~ "Jul",
    mes == "Agosto" ~ "Aug",
    mes == "Setembro" ~ "Sep",
    mes == "Outubro" ~ "Oct",
    mes == "Novembro" ~ "Nov",
    mes == "Dezembro" ~ "Dec"
  ),
  data = dmy(paste(dia,mes,ano,sep = "-"))
) %>% select(data,nome)
df.fer <- df.fer %>% filter(!str_detect(nome,"(Copa|Quinta-feira santa|Crianças|Namorados|Bruxas|Black Friday|Início|Eclipse|Quaresma|Horário|Mulher|Equinócio|Hora|Ramos|Dia do |Dia da |Dia de )"))
df.fer <- df.fer %>% rename(nome.fer=nome)
#retirando feriados duplicados
df.fer <- df.fer %>% group_by(data) %>% summarise_all(list(~first(.)))

########################
#### Dias de horário de verão

url.hv <- "https://pt.wikipedia.org/wiki/Lista_de_períodos_em_que_vigorou_o_horário_de_verão_no_Brasil"
pag <- read_html(url.hv)
tabs <- pag %>% html_table()
tab <- tabs[[2]]

tab$ano <- as.numeric(str_sub(tab$Temporada,1,4))
tab <- tab %>% filter(ano >= 1999)

datas <- as.tibble(str_split_fixed(tab$Período,fixed(", à 0h de "),n=2))
datas$V1 <- str_replace(datas$V1,"0h de ","")
datas$V1 <- str_replace(datas$V1," de outubro de ","-10-")
datas$V1 <- str_replace(datas$V1," de novembro de ","-11-")
datas$V2 <- str_replace(datas$V2," de fevereiro de ","-02-")
datas$V1 <- as.Date(datas$V1,format="%d-%m-%Y")
datas$V2 <- as.Date(datas$V2,format="%d-%m-%Y")
datas$data <- map2(datas$V1,datas$V2,~seq(.x,.y,by = 1))
names(datas)[1:2] <- c("data.inic","data.fim")

#retirando mudanças no decreto de lei - ficando somente com o mais atual
tab <- tab %>% bind_cols(datas) %>% select(ano,data.inic,data.fim,data,`Onde vigorou`)
tab <- tab %>% rename(vigor=`Onde vigorou`)
tab <- tab %>% group_by(ano) %>% mutate(
  pos = row_number(),
  max = max(pos)
) %>% filter(pos==max) %>% select(-pos,-max)
tab <- tab %>% unnest() %>% ungroup()
tab$verao <- 1
tab <- tab %>% select(data,verao)

No code chunck abaixo, mostro como consolidar a base de dados e criar as variáveis que serão necessárias para determinar as janelas de análise utilizadas no indicador proposto. No dataframe df.ind selecionei os dados da última janela existente na base de dados, para o sistema Sudeste/CO. Esses são os dados mostrados no gráfico.

O código mostrado abaixo poderia ser bastante otimizado, pelo menos no que se refere as 28 linhas de código utilizadas para criar a variável periodo, que identifica todos os momentos de transição entre o horário de verão e o horário normal, além de contar a quantidade de dias antes e depois.

O segredo para criar a variável periodo é utilizar as funções lead e lag. A função lead procura registros depois do registro atual, e a função lag busca registros antes do registro atual. Para que elas funcionem corretamente, é importante ordenar o dataframe corretamente.


########################
#### Consolidando todos os dados

df.reg <- df.reg %>% left_join(tab)
df.reg$verao <- factor(ifelse(is.na(df.reg$verao),2,1),levels=1:2, labels=c('horario de verao','horario normal'))
df.reg$ano <- year(df.reg$data)
df.reg$dia_semana <- format(df.reg$data,"%a")
df.reg$mes <- format(df.reg$data,"%b")
df.reg <- df.reg %>% arrange(sistema,data)

### criando variáveis que identificam as janelas
df.reg <- df.reg %>% mutate(
  periodo = case_when(
    verao != lag(verao,1) ~ 1,
    verao != lag(verao,2) ~ 2,
    verao != lag(verao,3) ~ 3,
    verao != lag(verao,4) ~ 4,
    verao != lag(verao,5) ~ 5,
    verao != lag(verao,6) ~ 6,
    verao != lag(verao,7) ~ 7,
    verao != lag(verao,8) ~ 8,
    verao != lag(verao,9) ~ 9,
    verao != lag(verao,10) ~ 10,
    verao != lag(verao,11) ~ 11,
    verao != lag(verao,12) ~ 12,
    verao != lag(verao,13) ~ 13,
    verao != lag(verao,14) ~ 14,
    TRUE ~ 0
  ),
  periodo = case_when(
    verao != lead(verao,1) ~ -1,
    verao != lead(verao,2) ~ -2,
    verao != lead(verao,3) ~ -3,
    verao != lead(verao,4) ~ -4,
    verao != lead(verao,5) ~ -5,
    verao != lead(verao,6) ~ -6,
    verao != lead(verao,7) ~ -7,
    verao != lead(verao,8) ~ -8,
    verao != lead(verao,9) ~ -9,
    verao != lead(verao,10) ~ -10,
    verao != lead(verao,11) ~ -11,
    verao != lead(verao,12) ~ -12,
    verao != lead(verao,13) ~ -13,
    verao != lead(verao,14) ~ -14,
    TRUE ~ periodo
  ),
  semana = ifelse(periodo < 0 & verao == "horario de verao","Horario Verao - Últimas semanas",""),
  semana = ifelse(periodo > 0 & verao == "horario de verao","Horario Verao - Primeiras semanas",semana),
  semana = ifelse(periodo < 0 & verao == "horario normal","Horario normal - Últimas semanas",semana),
  semana = ifelse(periodo > 0 & verao == "horario normal","Horario normal - Primeiras semanas",semana),
  #ciclo = ifelse(semana == "Horario normal - Última semana" & periodo == -7,1,0),
  ciclo = ifelse(periodo == -14,1,0),
  ciclo = cumsum(ciclo)
)
df.reg <- df.reg %>% left_join(df.inmet)
df.reg <- df.reg %>% left_join(df.fer)

#considerando apenas feriados que não ocorrem no domingo
df.reg <- df.reg %>% mutate(
  feriado = ifelse(!is.na(nome.fer) & dia_semana != "Sun",1,0),
  ano = as.character(ano)
)

########################
#### Indicador Naive

df.ind <- df.reg %>% filter(semana != "")
df.ind <- df.ind %>% select(sistema:ciclo,nome.fer,feriado)
df.ind$sistema <- str_replace(df.ind$sistema,fixed("Sudeste/Centro-Oeste"),"Sudeste/CO")

df.plot <- df.ind %>% filter(data >= as.Date("2019-02-04"), data <= as.Date("2019-03-03")) 
gt <- ggplot(data=df.plot) + geom_line(aes(x=data,y=consumo,group=sistema,colour=sistema))
gt <- gt + facet_grid(sistema ~ verao,scales = "free")
gt <- gt + scale_x_date(date_breaks = 'day',date_labels = '%b %d (%a)')
gt <- gt + theme(axis.text.x = element_text(angle = 90, vjust=0.4))
gt <- gt + labs(title = "") + ylab("Consumo (MWmed)") + xlab("Dia")
gt


Ao todo, na base de dados sendo analisada, existem 40 períodos de início ou fim do horário de verão. Calculamos um indicador utilizando a média de todos esses períodos, e comparamos o gasto energético dentro e fora do horário de verão em todas as janelas. Na tabela 1, a coluna destacada em laranja apresenta os resultados desse indicador. Nos sistemas onde de fato houve horário de verão (CO, Sul e Sudeste), em média, o consumo energético foi maior nos períodos com horário de verão do que sem; por isso o indicador assume valores negativos. O inverso ocorre nos sistemas onde não houve horário de verão (Norte e Nordeste). Ou seja, os efeitos medidos, por mais irrisórios que sejam, indicam que de fato não há evidência de economia energética com a adoção do horário de verão. É importante ressaltar que nas janelas consideradas aqui, houveram 3 feriados a mais durante o horário de verão se comparado ao horário normal. Esse fato deveria diminuir ainda mais o consumo, visto que um feriado tem o comportamento muito similar ao domingo. Porém mesmo com essa vantagem não é possível observar algum efeito de economia energética no horário de verão.

Table 1: Índicador de economia energética.
Sistema Consumo
Horário Verão
Consumo
Horário Normal
Feriados
Horário Verão
Feriados
Horário Normal
Economia
Absoluta
Economia
Relativa
Diferença
Feriados
Nordeste 4.464.194 4.485.876 29 26 21.682 0.5% -3
Norte 2.141.439 2.156.947 29 26 15.508 0.7% -3
Sudeste/CO 18.227.541 18.203.706 29 26 -23.835 -0.1% -3
Sul 5.094.997 5.041.890 29 26 -53.107 -1.1% -3

Indicador de economia

No código abaixo mostro como calcular a tabela com o resultado final do indicador comparando o horário de verão com o horário normal. Para manipular bases de dados, faz anos que utilizo as função gather e spread, do pacote tidyr. A função gather muda o formato da base de dados de largo (com muitas colunas) para longo (com muitas linhas). A função spread faz a operação contrária. Nesse link existem muitos exemplos e explicações sobre como utilizar essas funções.

Apesar de achar essas funções super flexíveis e amigáveis, sempre me incomodou não conseguir transformar mais de uma variável com valores para o formato largo com uma única linha de comando; é necessário fazer três operações, a primeira aplicando a função gather para gerar um formato ainda mais longo, depois juntar duas variáveis que cujos valores serão os nomes das novas variáveis, e depois aplicar a função spread para chegar ao formato desejado.

Algum tempo atrás duas novas funções foram criadas para melhorar as funções gather e spread. A função pivot_wider, que substitui a função spread, e a função pivot_longer que substitue a função gather. Essas novas funções permitem fazer a operação que eu discuti aqui em um única linha de código, como é possível ver no code chunck abaixo.


df.ind.fim <- df.ind %>% group_by(sistema,verao) %>% summarise(  
  consumo = sum(consumo),
  feriados = sum(feriado)
)

df.ind.fim <- df.ind.fim %>% pivot_wider(names_from = verao, values_from = c(consumo,feriados))
df.ind.fim$dif <- df.ind.fim$`consumo_horario normal` - df.ind.fim$`consumo_horario de verao`
df.ind.fim$rel <- df.ind.fim$dif / df.ind.fim$`consumo_horario normal`
df.ind.fim$dif.fer <- df.ind.fim$`feriados_horario normal` - df.ind.fim$`feriados_horario de verao`

df.ind.fim <- df.ind.fim %>% mutate_at(vars(dif,starts_with('consumo')),list(~format(.,digits = 0,big.mark = ".",decimal.mark = ",",scientific = FALSE)))
df.ind.fim <- df.ind.fim %>% mutate_at(vars(rel),list(~paste0(round(100*.,1),"%")))

names(df.ind.fim) <- c('Sistema','Consumo<br>Horário Verão','Consumo<br>Horário Normal','Feriados<br>Horário Verão','Feriados<br>Horário Normal','Economia<br>Absoluta','Economia<br>Relativa','Diferença<br>Feriados')

tab <- knitr::kable(df.ind.fim, 
             align=rep('c', ncol(df.ind.fim)),
             escape = FALSE,
             booktabs = TRUE,
             caption = 'Índicador de economia energética.') %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),full_width = F, position = "center") %>%
  #column_spec(1, width = "60px") %>%
  column_spec(6, background="darkorange", bold = T, color = "white")


  #tab[1,6] <- tab[1,6] %>% cell_spec(bold = T, color = "blue")
  # cell_spec(11, bold = T, color = "red") %>%
  # cell_spec(11, bold = T, color = "blue") %>%
  # cell_spec(11, bold = T, color = "blue") %>%
  #row_spec(1, bold = T) %>% 
  #row_spec(6, bold = T)
  
  tab


Retirando os períodos dos últimos cinco anos (2014 a 2019), quando supõem-se que o efeito do horário de verão têm diminuido, a estimativa da região Sudeste troca de sinal, porém continua essencialmente zero. O sinal do processo é tão fraco que não é possível afirmar se há ou não um ganho energetico.

Um modelo estatístico para prever o consumo energético

Nesta sessão faremos uma análise estatística mais refinada do que aquela apresentada na sessão anterior. A ideia é utilizar a série temporal de consumo elétrico completa, além de considerar todos os fatores externos discutidos anteriormente que influenciam o consumo energético. Se conseguirmos explicar a variação do consumo elétrico com bastante precisão, além de isolar o impacto de cada fator, podemos obter uma estimativa do impacto do horário de verão no consumo energético do país.

Os dados de consumo são indexados pelo dia do ano. Quando dados são indexados no tempo, é comum analisá-los utilizando uma classe de modelos estatísticos denominada de Séries Temporais, a qual foi desenvolvida para levar em consideração, explicitamente, o índice de tempo ao fazer análises e previsões. Existem muitos tipos diferentes de modelos incluídos nessa classe, mas neste post utilizaremos uma sub-classe de modelos denominados de Auto-Regressive Integrated Moving Average (ARIMA). Não entrarei em muitos detalhes técnicos aqui, porém os modelos ARIMA são bastante úteis devida à sua flexíbilidade, como também à interpretação intuitiva.

A parte AR do modelo ARIMA significa Auto-Regressivo. Esse nome diz respeito a uma característica interessante desses modelos: o valor da série num instante de tempo t é explicado pelos valores da própria série em momentos anteriores. É como se a série se auto-explicasse. A parte MA se refere a média móvel e não tem uma explicação tão intuitiva. Ela se refere ao fato que desvios maiores do que esperados pela parte AR do modelo se acumulam para o próximo instante de tempo. A parte I se refere apenas ao fato de que a série pode ser transformada para que tenha um comportamento mais previsível, permitindo que processos com um comportamento que se altera ao longo do tempo (não-estacionários) também possam ser analisados com esse tipo de modelo.

A estratégia de análise dos dados de consumo nessa sessão terá duas etapas. Na primeira parte, analisaremos os dados de consumo independentemente dos outros fatores. Ajustaremos um modelo ARIMA para cada um dos quatro sistemas. A ideia é extrair todas as características da série que são auto-explicáveis e que representam um comportamento da série que se repete ao longo do processo. A segunda parte consiste no uso de um modelo de regressão tradicional para explicar o consumo energético em função da série ajustada extraída na primeira etapa e das outras covariáveis (fatores) discutidas anteriormente. É como se estivéssemos separando os fatores entre endógenos e exógenos. Os fatores endógenos explicam como a série funciona, e os exógenos explicam os impactos externos ao processo. Ou seja, ao retirar todas as características endógenas da série, quanto da variação de consumo elétrico pode ser explicada pelo fator exógeno horário de verão?

Na figura 2 mostramos as diferentes etapas do processo para auxiliar a compreensão do leitor. A série original, com o consumo elétrico do sistema Sudeste/CO, está em verde. A primeira etapa, que extrai apenas as características endógenas do processo, denominada de arima no gráfico, é identificada pela cor vermelha. Note que essa série prevê alguns picos de alto consumo mais altos do que na série original, porém nunca um pico de baixo consumo. Isso pode ser um indicativo da importância das variáveis exógenas. A série de previsão de consumo, levando em consideração tanto os aspectos endógenos quanto exógenos, está destacada em azul. É possível perceber que essa previsão se assemelha muito à série original, conseguindo prever picos em ambas as direções do processo.

Comparação da série original e suas previsões

Figure 2: Comparação da série original e suas previsões

Modelos ARIMA

Nesse code chunck mostro como gerar a previsão da série em dois estágios. Primeiro utilizando a função auto.arima do pacote forecast, a encontra automaticamente os parâmetros que melhor descrevem a série sendo analisada como um modelo ARIMA. Essa estimativa, denominada arima, representa a previsão da série que pode ser explicada apenas pela própria série em si, sem o uso de covariáveis.

O segundo estágio consiste em prever a série original de consumo em função das variáveis independentes descritas no texto, além de também incluir a previsão arima como uma variável independente. No fundo estamos usando as variáveis infependentes para prever os resíduos das série arima. O objetivo era levar em consideração tanto as informações que a série contém sobre o seu próprio comportamento, quanto incluir também covariáveis.


#fórmula do modelo
form <- consumo ~ arima + verao * ano + dia_semana + feriado + prec + temp.max + insolacao + umid

df.fim <- df.reg 
df.fim <- df.fim %>% group_by(sistema) %>% nest()

#calculando auto-arima para todos os sistemas
df.fim$arima <- map(df.fim$data,~auto.arima(y=.$consumo))
df.fim$df <- map2(df.fim$data,df.fim$arima,~{
  df <- .x
  df$arima <- .y$fitted
  return(df)}
  )
#rodando o modelo linear para todos os sistemas
df.fim$mod <- map(df.fim$df,~lm(form,data=.))

#extraindo os coeficientes
df.fim$coef <- map(df.fim$mod,~tidy(.))

#inserindo a previsão do modelo da base de dados
df.fim$df.fim <- map2(df.fim$df,df.fim$mod,~{
  df <- .x
  df$previsao <- predict(.y, df)
  return(df)}
)

#grafico exemplo
date="2019-01-01"
df.graf <- df.fim$df.fim[[3]] %>% select(data,consumo,arima,previsao) %>% gather(serie,val,-data)
df.graf <- df.graf %>% filter(data >= as.Date(date))
  
g1 <- ggplot(data=df.graf) + geom_line(aes(x=data,y=val,group=serie,colour=serie),alpha=0.8)
g1 <- g1 + scale_x_date(date_breaks = 'month',date_labels = '%m')
#g1 <- g1 + theme(axis.text.x = element_text(angle = 90, vjust=0.4))
g1 <- g1 + labs(title = "Série de consumo energético - Sistema Sudeste/CO", subtitle="Período de 01/01/2019 a 31/10/2019") + ylab("Consumo (MWmed)") + xlab("Mês")
g1


Cada sistema foi modelado separadamente, utilizando a mesma estratégia. A estatística \(R^2-ajustada\), a qual mede a qualidade do ajuste, é muito alta para os quatro sistemas, sendo de 98% para o Nordeste, 99% para o Norte, 96% para o Sudeste/Centro-Oeste e 95% para o Sul, indicando que o modelo de previsão consegue explicar uma grande parte da variação da série de consumo energético.

Como os modelos têm uma capacidade alta de replicar os valores passados da série, aumenta nossa confiança de que eles sejam capazes de extrair o impacto do horário de verão no consumo energético do Brasil. Consideramos inicialmente uma versão do modelo que supõem que o efeito do horário de verão será igual em todos os anos. Nessa versão do modelo não conseguimos identificar nenhuma economia de energia proveniente do horário de verão, em nenhum dos sistemas. Porém, ao utilizar uma versão alternativa do modelo, supondo que o efeito do horário de verão pode ser diferente para cada ano, é possível identificar economia energética durante o horário de verão para o sistema Sudeste/CO. Para este sistema, entre os anos de 1999 e 2013, o modelo estima uma economia energética média diária de 311 MWmed, que representa uma economia diária de, em média, 1% do total do sistema.

Todas as evidências encontradas neste post mostram que se a adoção do horário de verão gerou alguma economia energértica, ela foi pequena, e não occoreu mais nos últimos 5 anos. É importante ressaltar que pelo fato dessa economia ser tão pequena, é bastante provável que o modelo estatístico não consiga detectá-la em muito casos, como também explicaria porque as estimativas podem indicar economia em sistemas que não implementaram o horário de verão. Além disso, a questão geográfica pode ser bastante importante nesse contexto, pois talvez uma resolução geográfica maior do que a totalidade de cada sistema seja suficiente para identificar com mais precisão os efeitos do horário de verão.

Conclusão

Os temas que eu escolho pra escrever geralmente são temas sobre os quais eu ainda não tenho uma opinião formada1. Quero pensar sobre o assunto, investigar, e ver se consigo mais clareza. Quero saber quais dados (evidências) existem sobre isso e quais os resultados de outras pesquisas, no Brasil e no Mundo. Quais linhas de argumentação já foram usadas? Existe algum consenso? Quais aspectos do processo são geralmente mensurados?

Eu sou fã do horário de verão. Fiz meu mestrado na Unicamp, em Campinas. Ao terminá-lo, fui trabalhar em São Paulo. Tenho lembrança desse período como um dos mais difícieis da minha vida, tendo que me adaptar a uma nova cidade, e a ficar, no mínimo, 8 horas por dia dentro de um escritório. Lembro claramente da tristeza que sentia ao voltar para casa já na escuridão, e da alegria que eu senti quando começou o horário de verão naquele ano, permitindo que eu visse o sol no final do dia.

Eu confesso que escrevi esse post com a expectativa de mostrar que o horario de verão era, além de todo o resto, financeiramente interessante, porém ainda tenho dúvidas sobre a efetividade financeira da medida. Acho que há pouco sinal e muito ruído nesse processo. Difícil de medir, complexo, até subjetivo em algum sentido. Apesar de encontrar algumas evidências de que o horário de verão era financeiramente efetivo até 2013 no sistema do Sudeste/CO, existem também evidências contraditórias, como as estimativas também indicarem que o horário de verão foi efetivo na região Norte, onde nem foi utilizado (troca de energia entre os sistemas?). Sem falar que apenas cinco anos de redução da efetividade parecem cancelar, na média, 15 anos de efetividade. Ou seja, provavelmente o horário de verão nunca foi tão efetivo quanto acreditava-se.

Talvez até por essas dificuldades de avaliar a real efetividade do horário de verão, seja interessante não implementá-lo nesse ano. Talvez assim, quando o debate for reiniciado no ano que vem, consigamos evidências empíricas mais fortes ao comparar dois anos consecutivos, um com e outro sem o horário de verão. Por mais que eu pessoalmente goste do horário de verão, acho difícil justificar a complexidade logística que ele exige para ser implementado sem haver algum retorno econômico.

O horário de verão é utilizado em alguns países há mais de um século, e aparentemente sempre despertou o debate sobre sua efetividade. Se já é dificíl avaliar a efetividade financeira da medida, imagine para tentar avaliar o retorno emocional ou a melhoria da qualidade de vida das pessoas. Talvez nesse caso, as palavras do famoso escritor britânico Sir Arthur Conan Doyle, criador do Sherlock Holmes, sejam mais importantes que evidências estatísticas:

“Me parece muito estranho…que no curso da história mundial, uma melhoria tão óbvia nunca foi adotada. … Os Britânicos da próxima geração serão melhores por terem uma hora extra de luz solar na sua infância.”


  1. Eu ainda não tenho opinião 100% formada sobre o que quer dizer “opinião formada”…rsrsrs↩︎


comments powered by Disqus

Voltar ao blog