Aprendizado de máquina - previsão de consumo de energia usando séries temporais XGBoost

Resumindo, a previsão de séries temporais é o processo de prever valores futuros com base em dados históricos anteriores. Uma das áreas mais quentes que usam a previsão de séries temporais no momento é o mercado de criptomoedas, onde as pessoas querem prever como o preço de criptomoedas populares como Bitcoin ou Ethereum irá flutuar nos próximos dias ou até mais. Outro caso do mundo real é a previsão do consumo de energia. Especialmente no mundo de hoje, onde a energia é um dos principais temas de discussão, ser capaz de prever com precisão as necessidades de consumo de energia é uma ferramenta vital para qualquer empresa de serviços públicos. No texto,

pergunta

Iremos concentrar-nos no problema do consumo de energia. Dado um conjunto de dados suficientemente grande sobre o consumo diário de energia por diferentes agregados familiares numa cidade, a nossa tarefa é prever a procura futura de energia com a maior precisão possível. Para efeitos deste tutorial, escolhi o conjunto de dados London Energy , que contém o consumo de energia de 5.567 residências selecionadas aleatoriamente em Londres, Inglaterra, entre novembro de 2011 e fevereiro de 2014. Para melhorar nossas previsões, combinamos esse conjunto de dados com o conjunto de dados meteorológicos de Londres , adicionando dados relacionados ao clima ao longo do caminho.

Esta é a primeira parte desta minissérie. Depois de ler este artigo, não deixe de conferir a próxima seção , que melhora significativamente os resultados ao incorporar recursos defasados.

pré-processando

A primeira coisa que fazemos em cada projeto é compreender totalmente os dados e pré-processá-los, se necessário. Para visualizar os dados usando pandas, podemos fazer o seguinte:

“LCLid” é uma string única que identifica cada domicílio, “Data” é autoexplicativo, “KWH” é o número total de quilowatts-hora consumidos naquela data e não há nenhum valor faltante. Como queremos prever o consumo de forma geral e não por domicílio, precisamos agrupar os resultados por data e kWh médio.

Neste ponto, seria ótimo se pudéssemos ver como o consumo mudou ao longo dos anos. Um gráfico de linha pode revelar isso:

Mapa de consumo de energia para todo o conjunto de dados

As características sazonais são muito óbvias. Durante o inverno, observamos maior demanda de energia, enquanto durante o verão o consumo de energia ficou em seu nível mais baixo. Este comportamento se repete todos os anos no conjunto de dados, com diferentes valores altos e baixos. Para visualizar as flutuações dentro de um ano, podemos fazer o seguinte:

Consumo anual de energia

Para treinar modelos como XGBoost e LightGB, precisamos criar recursos nós mesmos. Atualmente, temos apenas uma funcionalidade: data completa. Podemos extrair diferentes características com base na data completa, como dia da semana, dia do ano, mês, etc. Para conseguir isso, podemos fazer:

Portanto, a função "data" é atualmente redundante. Iremos usá-lo para dividir o conjunto de dados em conjuntos de treinamento e teste antes de removê-lo. Ao contrário do treinamento tradicional, em séries temporais não podemos simplesmente dividir o conjunto de forma aleatória porque a ordem dos dados é muito importante e só podemos mesclar os dados anteriores. Caso contrário, poderemos ser solicitados a prever um valor, levando também em consideração valores futuros! O conjunto de dados contém dados dos últimos 2,5 anos, portanto, para o conjunto de teste usaremos apenas dados dos últimos 6 meses. Se o conjunto de treinamento for maior, usamos todo o ano anterior como conjunto de teste.

Para visualizar novamente a divisão e distinção entre os conjuntos de treinamento e teste, podemos representar graficamente:

Visualizando a separação trem-teste

Agora podemos remover o recurso “data” e criar conjuntos de treinamento e teste:

modelo de treinamento

A otimização de hiperparâmetros será feita por pesquisa em grade. A pesquisa em grade pega um parâmetro e alguns valores como configuração e tenta todas as combinações possíveis. A configuração de parâmetros que alcançar os melhores resultados será a configuração de parâmetros que forma o melhor estimador. A pesquisa em grade também utiliza validação cruzada, por isso é crucial fornecer um mecanismo de divisão apropriado. Além disso, devido à natureza do problema, não podemos simplesmente usar a validação cruzada simples k-fold. O Scikit learn fornece o método TimeSeriesSplit que divide os dados de forma incremental de uma forma que respeita a continuidade.

Para o modelo LightGB, podemos fazer o mesmo fornecendo parâmetros diferentes:

Avalie

Para avaliar o melhor estimador no conjunto de teste, calcularemos algumas métricas. Eles são erro médio absoluto (MAE), erro quadrático médio (MSE) e erro percentual médio absoluto (MAPE). Cada um deles fornece uma perspectiva diferente sobre o desempenho real do modelo treinado. Além disso, desenharemos gráficos de linhas para visualizar melhor o desempenho do modelo.

Finalmente, para avaliar qualquer um dos modelos acima, devemos executar o seguinte comando:

Resultados do XGBoost

Resultados LightGBM

Embora o XGBoost possa prever o consumo de energia no inverno com mais precisão, para quantificar e comparar estritamente o desempenho, precisamos calcular uma métrica de erro. Olhando a tabela abaixo, fica claro que o XGBoost supera o LightGBM em todos os casos.

Pré-processar dados meteorológicos

O modelo tem um desempenho relativamente bom, mas existe uma maneira de melhorá-lo ainda mais? A resposta é sim. Existem muitas dicas e truques diferentes que você pode usar para obter melhores resultados. Uma delas é a utilização de recursos de acessibilidade que estão direta ou indiretamente relacionados ao consumo de energia. Por exemplo, os dados meteorológicos podem desempenhar um papel decisivo na previsão da procura de energia

Primeiro, vamos dar uma olhada na estrutura dos dados:

Existem vários tipos de dados faltantes que precisam ser preenchidos. Preencher os dados faltantes não é trivial e depende da situação. Como cada dia de nossos dados meteorológicos depende dos dias anteriores e seguintes, preencheremos esses valores por meio de interpolação. Além disso, converteremos a coluna “data” em “datahora” e, em seguida, mesclaremos os dois dataframes para obter um dataframe aumentado.

Lembre-se, depois de gerar o booster set, temos que executar novamente o processo de divisão e obter novos “training_data” e “testing_data”. Não se esqueça de incluir novos recursos também.

Não há necessidade de atualizar as etapas de treinamento. Depois de treinar o modelo no novo conjunto de dados, obtemos os seguintes resultados:

O XGBoost aumenta com base nos resultados meteorológicos

LightGBM aumentado com resultados meteorológicos

Os dados meteorológicos melhoraram significativamente o desempenho de ambos os modelos. Em particular, no cenário XGBoost, o MAE diminui quase 44%, enquanto o MAPE aumenta de 19% para 16%. Para LightGBM, o MAE cai 42% e o MAPE cai de 19,8% para 16,7%.

Conclusões e próximos passos

Os modelos Ensemble são ferramentas de aprendizado de máquina muito poderosas que podem ser usadas para problemas de previsão de séries temporais. Neste artigo vimos como isso é feito no contexto do consumo de energia. Primeiro, treinamos o modelo usando apenas o fator data. Posteriormente, consideramos dados adicionais relacionados à tarefa em questão durante o treinamento, a fim de melhorar significativamente os resultados.

Guess you like

Origin blog.csdn.net/qq_41929396/article/details/132456799