3
respostas

Realizar previsões futuras

Boa tarde. Estou reproduzindo os scripts da aula para uma base própria de dados e me deparei com uma dúvida.

Na criação de um modelo com apenas uma camada de entrada e uma de saída (na aula foi chamado de regressão linear) somos capazes de realizar as previsões de treino e teste e comparar com os valores verdadeiros e avaliar a qualidade do modelo.

Como ficaria para eu inserir novos dados sequenciias de tempo para prever os resultados de y?

Exemplo: tenho uma base de dados com informação mensal de vendas no seguinte formato de sequencia, tempo e valor

Seqtempovalor
11-1-2023100
21-2-2023150
31-3-2023250
41-4-2023300
51-5-2023500
.........
121-12-2023700

para criar o modelo, utilizei o sequencial e o valor. Fiz a normalização e criei o modelo e realizei a predição. Até aí ok.

Agora quero fazer a previsão para os dados sequenciais aos dados iniciais...13,14,15,16,17...n

Ou seja, quais seriam os valores para 13,14,15,16....

Como inserir essas informações do novo x para o modelo já criado? Creio que antes devo fazer a normalização dessa nova base, correto?

3 respostas

Oi, Fernado, tudo bem?

Você está no caminho certo em pensar na normalização dos novos dados antes de inseri-los no modelo.

Aqui vou assumir que você utilizou a normalização. Notei que você está utilizando o valor sequencial como entrada, recomendo, você pode continuar a sequência. Se necessário, você pode adicionar os novos valores em uma estrutura que o modelo possa entender (normalmente um array numpy).

Após a normalização, use o método predict do seu modelo Keras para prever os novos valores.

Abaixo deixo uma sugestão de código, mas destaco que talvez seja necessário fazer alterações para se adequar ao seu projeto.

import numpy as np
from sklearn.preprocessing import MinMaxScaler

# Supondo que você já tenha o modelo treinado e o scaler usado para normalização
# model = ... (seu modelo treinado)
# scaler = ... (seu scaler treinado)

# Dados sequenciais futuros
novos_dados = np.array([[13], [14], [15], [16], [17]])
# Normalização dos novos dados
novos_dados_normalizados = scaler.transform(novos_dados)
# Realizando as previsões
previsoes_normalizadas = model.predict(novos_dados_normalizados)
# Invertendo a normalização para obter os valores reais
previsoes = scaler.inverse_transform(previsoes_normalizadas)
print("Previsões futuras:", previsoes)

Espero ter ajudado.

Qualquer dúvida, compartilhe no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Agradeço seu retorno...

Consegui resolver, porém, para fazer a transformação dos novos dados tive que saber qual era a média e desvio padrão da transformação inicial, pois, quando tentei utilizar o scaler treinado, dizia que a estrutura não era a mesma da origem (os dados originais possuem duas colunas e os dados novos, apenas uma).

É possível exportar o scaler original para ler futuramente e obter a média e desvio padrão ? (obs: utilizei o StandardScaler() )

Olá Fernando, tudo bem?

Fico feliz em saber que conseguiu resolver o problema inicial. Em relação à sua nova dúvida, sim, é possível salvar o scaler original para ler futuramente e utilizar a média e desvio padrão na normalização de novos dados. Ele pode ser salvo usando a biblioteca joblib ou a pickle.

Novamente, deixo uma sugestão de código. Reforço, que talvez seja necessário fazer algumas adaptações no código:

  • Salvando o Scaler
import joblib
from sklearn.preprocessing import StandardScaler

# Supondo que você já tenha o scaler treinado
scaler = StandardScaler()
# Treinando o scaler com os dados originais
# scaler.fit(original_data)

# Salvando o scaler treinado em um arquivo
joblib.dump(scaler, 'scaler.pkl')
  • Carregando
import joblib
import numpy as np

# Carregando o scaler treinado
scaler = joblib.load('scaler.pkl')

# Dados sequenciais futuros
novos_dados = np.array([[13], [14], [15], [16], [17]])

# Verificando a médias 
print(f"Média: {scaler.mean_}")

Espero ter ajudado e bons estudos!