Previsão multivariada de séries temporais com conjunto de dados de 3 meses

12

Tenho 3 meses de dados (cada linha correspondente a cada dia) gerados e desejo realizar uma análise multivariada de séries temporais para o mesmo:

as colunas que estão disponíveis são -

Date    Capacity_booked Total_Bookings  Total_Searches  %Variation

Cada Data tem 1 entrada no conjunto de dados e 3 meses de dados e eu quero ajustar um modelo de série temporal multivariada para prever outras variáveis ​​também.

Até agora, essa foi minha tentativa e tentei fazer o mesmo lendo artigos.

Eu fiz o mesmo -

df['Date'] = pd.to_datetime(Date , format = '%d/%m/%Y')

data = df.drop(['Date'], axis=1)

data.index = df.Date

from statsmodels.tsa.vector_ar.vecm import coint_johansen
johan_test_temp = data
coint_johansen(johan_test_temp,-1,1).eig



#creating the train and validation set
train = data[:int(0.8*(len(data)))]
valid = data[int(0.8*(len(data))):]

freq=train.index.inferred_freq

from statsmodels.tsa.vector_ar.var_model import VAR

model = VAR(endog=train,freq=train.index.inferred_freq)
model_fit = model.fit()


# make prediction on validation
prediction = model_fit.forecast(model_fit.data, steps=len(valid))

cols = data.columns

pred = pd.DataFrame(index=range(0,len(prediction)),columns=[cols])
    for j in range(0,4):
        for i in range(0, len(prediction)):
           pred.iloc[i][j] = prediction[i][j]

Eu tenho um conjunto de validação e conjunto de previsão. No entanto, as previsões são muito piores que o esperado.

Os gráficos do conjunto de dados são - variação de 1.% insira a descrição da imagem aqui

  1. Capacity_Booked insira a descrição da imagem aqui

  2. Total de reservas e pesquisas insira a descrição da imagem aqui

A saída que estou recebendo são -

Dataframe de previsão -

insira a descrição da imagem aqui

Dataframe de validação -

insira a descrição da imagem aqui

Como você pode ver, as previsões estão longe do esperado. Alguém pode aconselhar uma maneira de melhorar a precisão. Além disso, se eu ajustar o modelo a dados completos e depois imprimir as previsões, ele não levará em consideração que o novo mês começou e, portanto, prever como tal. Como isso pode ser incorporado aqui. qualquer ajuda é apreciada.

EDITAR

Link para o conjunto de dados - Conjunto de dados

obrigado

dper
fonte
você pode postar o std de classes
Swarathesh Addanki 29/11/19
@SwaratheshAddanki Adicionei o link ao conjunto de dados na pergunta ... você pode dar uma olhada.
dper
Você pode tentar usar um algoritmo clássico de aprendizado de máquina usando recursos "caseiros". Você pode, por exemplo, tentar treinar um perceptron ou um SVM ou uma floresta aleatória por um único dia usando os últimos 7 dias (faça uma linha com os recursos 4 * 7). Você também pode levar em consideração o mesmo dia da última semana (quarta-feira, se quiser prever a quarta-feira) e uma média de todas as quartas-feiras do mês passado. Também usar validação cruzada, a fim de ter uma medida de desempenho realista mais
politinsa
@politinsa Você poderia compartilhar um exemplo para o mesmo?
dper
11
Acredito que você não possui dados suficientes para se ajustar a um bom modelo: a principal característica parece ser os saltos descendentes no final deste mês. Podemos ver apenas dois desses saltos no conjunto de dados e, com apenas duas observações, não será possível aprender muito sobre como é um salto típico. Da mesma forma, o crescimento durante os meses parece regular o suficiente para que o modelo tente descrever a forma dessas curvas, mas há poucas informações sobre quanto os valores crescerão em um mês típico. Diante disso, "o próximo mês é igual ao mês anterior" pode ser um modelo suficientemente bom?
jochen 16/02

Respostas:

1

Uma maneira de melhorar sua precisão é procurar a autocorrelação de cada variável, conforme sugerido na página de documentação do VAR:

https://www.statsmodels.org/dev/vector_ar.html

Quanto maior o valor de autocorrelação para um atraso específico, mais útil esse atraso será para o processo.

Outra boa idéia é consultar o critério AIC e o critério BIC para verificar sua precisão (o mesmo link acima tem um exemplo de uso). Valores menores indicam que há uma maior probabilidade de você encontrar o verdadeiro estimador.

Dessa forma, você pode variar a ordem do seu modelo autoregressivo e ver o que fornece o menor AIC e BIC, ambos analisados ​​juntos. Se o AIC indicar que o melhor modelo está com atraso de 3 e o BIC indicar que o melhor modelo tem um atraso de 5, você deve analisar os valores de 3,4 e 5 para ver o que tem melhores resultados.

O melhor cenário seria ter mais dados (já que três meses não são muitos), mas você pode tentar essas abordagens para ver se isso ajuda.

Danilo Nunes
fonte