Multivariate Zeitreihenprognose mit 3-Monats-Datensatz

12

Ich habe 3 Monate Daten (jede Zeile entspricht jedem Tag) generiert und möchte eine multivariate Zeitreihenanalyse für dieselbe durchführen:

Die verfügbaren Spalten sind -

Date    Capacity_booked Total_Bookings  Total_Searches  %Variation

Jedes Datum hat 1 Eintrag im Datensatz und Daten für 3 Monate. Ich möchte ein multivariates Zeitreihenmodell anpassen, um auch andere Variablen vorherzusagen.

Bisher war dies mein Versuch und ich habe versucht, dasselbe durch das Lesen von Artikeln zu erreichen.

Ich tat das gleiche -

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]

Ich habe einen Validierungssatz und einen Vorhersagesatz. Die Vorhersagen sind jedoch viel schlechter als erwartet.

Die Diagramme des Datensatzes sind - 1.% Variation Geben Sie hier die Bildbeschreibung ein

  1. Capacity_Booked Geben Sie hier die Bildbeschreibung ein

  2. Gesamtzahl der Buchungen und Suchanfragen Geben Sie hier die Bildbeschreibung ein

Die Ausgabe, die ich erhalte, ist -

Vorhersage-Datenrahmen -

Geben Sie hier die Bildbeschreibung ein

Validierungsdatenrahmen -

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, sind die Vorhersagen weit von den Erwartungen entfernt. Kann mir jemand einen Weg empfehlen, um die Genauigkeit zu verbessern. Wenn ich das Modell auf ganze Daten anpasse und dann die Prognosen drucke, wird auch nicht berücksichtigt, dass der neue Monat begonnen hat, und daher als solcher vorherzusagen. Wie kann das hier aufgenommen werden? Jede Hilfe wird geschätzt.

BEARBEITEN

Link zu dem Datensatz - Datensatz

Vielen Dank

dper
quelle
Können Sie den Standard
@SwaratheshAddanki Ich habe den Link zum Datensatz in der Frage hinzugefügt ... Sie können einen Blick darauf werfen.
dper
Sie könnten versuchen, einen klassischen Algorithmus für maschinelles Lernen mit "hausgemachten" Funktionen zu verwenden. Sie könnten beispielsweise versuchen, ein Perzeptron oder eine SVM oder einen zufälligen Wald für einen einzelnen Tag in den letzten 7 Tagen zu trainieren (machen Sie eine Zeile mit den 4 * 7-Funktionen). Sie können auch den gleichen Tag der letzten Woche (Mittwoch, wenn Sie den Mittwoch vorhersagen möchten) und den Durchschnitt jedes Mittwochs des letzten Monats berücksichtigen. Verwenden Sie auch die Kreuzvalidierung, um eine realistischere Leistungsmessung zu erhalten
politinsa
@politinsa Könnten Sie ein Beispiel dafür teilen?
dper
1
Ich glaube, dass Sie nicht genug Daten haben, um zu einem guten Modell zu passen: Das Hauptmerkmal scheinen die Abwärtssprünge am Ende dieses Monats zu sein. Wir können nur zwei dieser Sprünge im Datensatz sehen, und aus nur zwei Beobachtungen wird es nicht möglich sein, viel darüber zu lernen, wie ein typischer Sprung aussieht. In ähnlicher Weise sieht das Wachstum während der Monate regelmäßig genug aus, dass das Modell versuchen könnte, die Form dieser Kurven zu beschreiben, aber es gibt nur wenige Informationen darüber, wie stark die Werte in einem typischen Monat wachsen werden. In Anbetracht dessen könnte "nächster Monat gleich Vormonat" ein ausreichend gutes Modell sein?
Jochen

Antworten:

1

Eine Möglichkeit, Ihre Genauigkeit zu verbessern, besteht darin, die Autokorrelation jeder Variablen zu überprüfen, wie auf der VAR-Dokumentationsseite vorgeschlagen:

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

Je größer der Autokorrelationswert für eine bestimmte Verzögerung ist, desto nützlicher ist diese Verzögerung für den Prozess.

Eine weitere gute Idee ist es, das AIC-Kriterium und das BIC-Kriterium zu überprüfen, um Ihre Genauigkeit zu überprüfen (der gleiche Link oben enthält ein Anwendungsbeispiel). Kleinere Werte zeigen an, dass die Wahrscheinlichkeit größer ist, dass Sie den wahren Schätzer gefunden haben.

Auf diese Weise können Sie die Reihenfolge Ihres autoregressiven Modells variieren und das Modell anzeigen, das den niedrigsten AIC und den niedrigsten BIC liefert, die beide zusammen analysiert werden. Wenn AIC angibt, dass das beste Modell eine Verzögerung von 3 aufweist und der BIC angibt, dass das beste Modell eine Verzögerung von 5 aufweist, sollten Sie die Werte 3,4 und 5 analysieren, um das Modell mit den besten Ergebnissen zu erhalten.

Das beste Szenario wäre, mehr Daten zu haben (da 3 Monate nicht viel sind), aber Sie können diese Ansätze ausprobieren, um zu sehen, ob es hilft.

Danilo Nunes
quelle