Zeitreihenvorhersagemethoden | Arima in Python und R

Inhalt

Einführung

Stell dir das vor: Sie wurden damit beauftragt, den Preis des nächsten iPhones zu prognostizieren und erhalten historische Daten. Dazu gehören Funktionen wie Quartalsverkäufe, monatliche Ausgaben und eine Menge Dinge, die mit Apples Bilanz einhergehen. Als Datenwissenschaftler, In welche Art von Problem würden Sie das einordnen?? Zeitreihenmodellierung, Natürlich.

Von der Vorhersage des Produktverkaufs bis zur Schätzung des Stromverbrauchs im Haushalt, Zeitreihenvorhersage ist eine der Kernkompetenzen, die jeder Datenwissenschaftler kennen sollte, wenn nicht das dominiert. Es gibt viele verschiedene Techniken, die Sie anwenden können, und in diesem Artikel werden wir einen der effektivsten behandeln, genannt Auto ARIMA.

autoarimafeat-6048464

Wir werden zuerst das Konzept von ARIMA verstehen, was uns zu unserem Hauptthema führt: Auto ARIMA. Um unsere Konzepte zu festigen, wir nehmen einen Datensatz und implementieren ihn sowohl in Python als auch in R.

Inhaltsverzeichnis

  1. Was ist eine Zeitreihe?
  2. Methoden zur Vorhersage von Zeitreihen
  3. Einführung in ARIMA
  4. Schritte zur Implementierung von ARIMA
  5. Warum brauchen wir AutoARIMA?
  6. Automatische ARIMA-Implementierung (im Fluggastdatensatz)
  7. Wie wählt man die Auto-ARIMA-Parameter aus?

Wenn Sie mit Zeitreihen und deren Techniken vertraut sind (als gleitender Durchschnitt, exponentielle Glättung und ARIMA), Sie können direkt zum Abschnitt gehen 4. Für Starter, Beginnen Sie mit dem Abschnitt unten, Dies ist eine kurze Einführung in Zeitreihen und verschiedene Prognosetechniken. .

1. Was ist eine Zeitreihe?

Bevor Sie sich mit Techniken zum Arbeiten mit Zeitreihendaten vertraut machen, wir müssen zuerst verstehen, was eine Zeitreihe wirklich ist und wie sie sich von anderen Datentypen unterscheidet. Hier ist die formale Definition von Zeitreihen: ist eine Reihe von Datenpunkten in konstanten Zeitintervallen gemessen. Dies bedeutet einfach, dass bestimmte Werte in einem konstanten Intervall aufgezeichnet werden, das stündlich sein kann., Täglich, wöchentlich, jeden 10 Tage, etc. Der Unterschied zwischen Zeitreihen besteht darin, dass jeder Datenpunkt in der Reihe von den vorherigen Datenpunkten abhängt. Lassen Sie uns den Unterschied anhand einiger Beispiele besser verstehen.

Beispiel 1:

Angenommen, Sie haben einen Datensatz von Personen, die einen Kredit von einem bestimmten Unternehmen erhalten haben (wie in der folgenden Tabelle gezeigt). Glauben Sie, dass jede Zeile mit den vorherigen Zeilen verwandt ist?? Sicherlich nicht! Das von einer Person aufgenommene Darlehen richtet sich nach ihren finanziellen Bedingungen und Bedürfnissen (Es könnte andere Faktoren wie die Familiengröße geben, etc., aber zur Vereinfachung betrachten wir nur das Einkommen und die Art des Darlehens). Was ist mehr, Daten wurden nicht in einem bestimmten Zeitintervall gesammelt. Es hängt davon ab, wann das Unternehmen einen Kreditantrag erhalten hat.

autoarima1-2590281

Beispiel 2:

Nehmen wir ein anderes Beispiel. Angenommen, Sie haben einen Datensatz, der den CO2-Gehalt in der Luft pro Tag enthält (Screenshot unten). Können Sie die ungefähre CO2-Menge für den nächsten Tag vorhersagen, indem Sie sich die Werte der letzten Tage ansehen?? Gut, Natürlich. Falls du bemerkst, Daten wurden täglich aufgezeichnet, nämlich, das Zeitintervall ist konstant (24 Std).

auto-arima-4681520

Du musst schon eine Intuition dafür gehabt haben: der erste Fall ist ein einfaches Regressionsproblem und der zweite ein Zeitreihenproblem. Obwohl das Zeitreihenrätsel hier auch mit linearer Regression gelöst werden kann, das ist nicht wirklich der beste ansatz, da es das Verhältnis der Werte zu allen relativen Vergangenheitswerten vernachlässigt. Sehen wir uns nun einige der gebräuchlichen Techniken zur Lösung von Zeitreihenproblemen an..

2. Methoden zur Vorhersage von Zeitreihen

Es gibt mehrere Methoden für die Zeitreihenprognose, die wir in diesem Abschnitt kurz behandeln werden.. Detaillierte Erklärungen und Python-Codes für alle unten genannten Techniken finden Sie in diesem Artikel: 7 Techniken zur Vorhersage von Zeitreihen (mit Python-Codes).

  1. Naiver Ansatz: Bei dieser Prognosetechnik, der Wert des neuen Datenpunkts wird als gleich dem vorherigen Datenpunkt vorhergesagt. Das Ergebnis wäre eine flache Linie, da alle neuen Werte die vorherigen Werte annehmen.naiv-2432706
  2. Einfacher Durchschnitt: Der folgende Wert wird als Durchschnitt aller vorherigen Werte genommen. Die Vorhersagen hier sind besser als der "naive Ansatz", da es keine flache Linie ergibt, Aber hier, alle Vergangenheitswerte werden berücksichtigt, was nicht immer nützlich sein kann. Zum Beispiel, wenn wir gefragt werden, die heutige Temperatur vorherzusagen, Ich würde die Temperatur des letzten berücksichtigen 7 Tage statt der Temperatur von vor einem Monat.einfacher Durchschnitt-5477497
  3. Gleitender Durchschnitt : Dies ist eine Verbesserung gegenüber dem Stand der Technik. Anstatt den Durchschnitt aller oben genannten Punkte zu nehmen, der Durchschnitt von 'n’ obige Punkte wird als vorhergesagter Wert genommen.gleitender Durchschnitt-701970
  4. Gewichteter gleitender Durchschnitt: Ein gewichteter gleitender Durchschnitt ist ein gleitender Durchschnitt, bei dem die Werte n’ Vergangenheit werden unterschiedlich gewichtet.wmovingavg-5287626
  5. Einfache exponentielle Glättung: Bei dieser Technik, neueren Beobachtungen wird ein höheres Gewicht beigemessen als denen aus der fernen Vergangenheit.ses-3692119
  6. Holts lineares Trendmodell: Diese Methode berücksichtigt den Trend des Datensatzes. Nach Trend, wir meinen die zunehmende oder abnehmende Natur der Reihe. Angenommen, die Zahl der Hotelreservierungen steigt jedes Jahr, dann können wir sagen, dass die Zahl der Reservierungen einen steigenden Trend zeigt. Die Prognosefunktion in dieser Methode ist eine Niveau- und Trendfunktion.holttrend-3015737
  7. Holt Winters-Methode: Dieser Algorithmus berücksichtigt sowohl den Trend als auch die Saisonalität der Reihe. Zum Beispiel, Die Anzahl der Hotelreservierungen ist an Wochenenden hoch und an Wochentagen niedrig, und nimmt jedes Jahr zu; es gibt eine wöchentliche Saisonalität und einen wachsenden Trend.holtwinter-3922820
  8. ARIMA: ARIMA ist eine sehr beliebte Technik für die Zeitreihenmodellierung. Beschreibt die Korrelation zwischen Datenpunkten und berücksichtigt den Unterschied in den Werten. Eine Verbesserung gegenüber ARIMA ist SARIMA (o Saisonale ARIMA). Wir werden ARIMA im nächsten Abschnitt etwas genauer betrachten..

3. Einführung in ARIMA

In diesem Abschnitt werden wir eine kurze Einführung in ARIMA geben, die nützlich ist, um Auto Arima zu verstehen. Eine detaillierte Erklärung von Arima ist in diesem Artikel enthalten, Parameter (P, Q, D), Grafik (ACF PACF) und Umsetzung: Vollständiges Zeitreihen-Tutorial.

ARIMA ist eine sehr beliebte statistische Methode zur Vorhersage von Zeitreihen. ARIMA bedeutet Integrierte autoregressive gleitende Durchschnitte. ARIMA-Modelle arbeiten mit den folgenden Annahmen:

  • Die Datenreihe ist stationär, Das bedeutet, dass Mittelwert und Varianz im Laufe der Zeit nicht variieren sollten. Eine Reihe kann durch logarithmische Transformation oder durch Differenzieren der Reihe stationär gemacht werden.
  • Die als Eingabe bereitgestellten Daten müssen eine univariate Reihe sein, da arima vergangene Werte verwendet, um zukünftige Werte vorherzusagen.

ARIMA hat drei Komponenten: MIT (autoregressiver Begriff), ich (Differenzierungsbegriff) y MA (gleitender Durchschnitt Begriff). Lassen Sie uns jede dieser Komponenten verstehen:

  • Der Begriff AR bezieht sich auf die vergangenen Werte, die verwendet werden, um den nächsten Wert vorherzusagen. Der Begriff AR wird durch den Parameter 'p’ in arima. Der Wert von 'p’ ermittelt anhand des PACF-Diagramms.
  • Der Begriff MA wird verwendet, um die Anzahl vergangener Prognosefehler zu definieren, die verwendet werden, um zukünftige Werte vorherzusagen. Der 'q-Parameter’ in arima steht es für den Begriff MA. Das ACF-Diagramm wird verwendet, um den Wert 'q . zu identifizieren’ Richtig.
  • Die Differenzierungsreihenfolge gibt an, wie oft die serielle Differenzierungsoperation durchgeführt wird, um sie stationär zu machen. Tests wie ADF und KPSS können verwendet werden, um festzustellen, ob die Serie stationär ist und den d-Wert zu identifizieren.

4. Schritte zur Implementierung von ARIMA

Die allgemeinen Schritte zur Implementierung eines ARIMA-Modells sind:

  1. Laden Sie die Daten hoch: Der erste Schritt beim Modellbau ist, Natürlich, Datensatz laden.
  2. Vorverarbeitung: Abhängig vom Datensatz, die Vorverarbeitungsschritte werden definiert. Dazu gehört das Erstellen von Zeitstempeln, Datumsspaltentyp konvertieren / Zeit, mach die Reihe univariat, etc.
  3. Mach die Serie stationär: Um die Annahme zu erfüllen, es ist notwendig, die Reihe stationär zu machen. Dazu gehört die Überprüfung der Stationarität der Reihe und die Durchführung der notwendigen Transformationen.
  4. Bestimmen Sie den Wert d: Um die Serie stationär zu machen, die Anzahl der durchgeführten Differenzoperationen wird als Wert d . genommen
  5. ACF- und PACF-Diagramme erstellen: Dies ist der wichtigste Schritt bei der Implementierung von ARIMA. Die ACF PACF-Charts werden verwendet, um die Eingabeparameter für unser ARIMA-Modell zu bestimmen.
  6. Bestimmen Sie die p- und q-Werte: Lesen Sie die p- und q-Werte aus den Diagrammen des vorherigen Schritts
  7. Passen Sie das ARIMA-Modell an: Verwenden der verarbeiteten Daten und der Parameterwerte, die wir aus den vorherigen Schritten berechnet haben, passend zum ARIMA-Modell
  8. Vorhersagewerte im Validierungsset: Vorhersage zukünftiger Werte
  9. RMSE berechnen: Um die Leistung des Modells zu überprüfen, Überprüfen Sie den RMSE-Wert mithilfe von Vorhersagen und tatsächlichen Werten im Validierungssatz.

5. Warum brauchen wir Auto ARIMA?

Obwohl ARIMA ein sehr leistungsfähiges Modell für die Vorhersage von Zeitreihendaten ist, Datenaufbereitungs- und Parameter-Tuning-Prozesse nehmen viel Zeit in Anspruch. Vor der Implementierung von ARIMA, Sie sollten die Reihe stationär machen und die Werte von p und q mithilfe der zuvor besprochenen Grafiken bestimmen. Auto ARIMA macht uns diese Aufgabe wirklich leicht, da es die Schritte eliminiert 3 ein 6 die wir im vorherigen Abschnitt gesehen haben. Dann, die Schritte, die Sie befolgen müssen, um die automatische ARIMA zu implementieren, werden angezeigt:

  1. Lade Daten: Dieser Schritt wird der gleiche sein. Laden Sie die Daten auf Ihren Laptop hoch
  2. Datenvorverarbeitung: Eingabe muss univariat sein, Daher, Entferne die anderen Spalten
  3. Fit Auto ARIMA: passt das Modell auf die univariate Reihe
  4. Vorhersagewerte im Validierungsset: Vorhersagen über das Validierungsset treffen
  5. RMSE berechnen: Überprüfen Sie die Modellleistung anhand von vorhergesagten Werten im Vergleich zu tatsächlichen Werten

Wir ignorieren die Auswahl der Funktionen p und q . vollständig, Wie du siehst. Was für eine Erleichterung! Im nächsten Abschnitt, Wir implementieren Auto-ARIMA mit einem Spielzeugdatensatz.

6. Implementierung in Python und R

Wir verwenden den International-Air-Passenger-Datensatz. Dieser Datensatz enthält die monatliche Gesamtzahl der Passagiere (in Tausenden). Es hat zwei Spalten: Monat und Passagierzahl. Sie können den Datensatz herunterladen von dieser Link.

#lade die daten
data = pd.read_csv('international-airline-passengers.csv')

#in Zug- und Validierungsset unterteilen
Zug = Daten[:int(0.7*(len(Daten)))]
gültig = Daten[int(0.7*(len(Daten))):]

#Vorverarbeitung (da arima univariate Reihen als Eingabe verwendet)
train.drop('Monat',Achse=1,inplace=True)
gültig.drop('Monat',Achse=1,inplace=True)

#Plotten der Daten
Bahn[„Internationale Fluggäste“].Handlung()
gültig[„Internationale Fluggäste“].Handlung()

autoarimaplot1-3762053

#das Modell bauen
von pyramid.arima importieren auto_arima
model = auto_arima(Bahn, trace=Wahr, error_action='ignorieren', suppress_warnings=Wahr)
model.fit(Bahn)

prognose = model.predict(n_perioden = nur(gültig))
Prognose = pd.DataFrame(Vorhersage,index = valid.index,Spalten=['Vorhersage'])

#Zeichnen Sie die Vorhersagen für den Validierungssatz
plt.plot(Bahn, Etikett="Bahn")
plt.plot(gültig, Etikett="Gültig")
plt.plot(Vorhersage, Etikett="Vorhersage")
plt.zeigen()

Autoarimaplot-4372874

#rmse berechnen
aus mathe import sqrt
aus sklearn.metrics import mean_squared_error

rms = sqrt(mittlere quadratische Fehler(gültig,Vorhersage))
drucken(rms)
Ausgang -
76.51355764316357

Unten ist der R-Code für das gleiche Problem:

# Pakete laden
Bücherei(Vorhersage)
Bücherei(Messwerte)

# Daten lesen
data = read.csv("international-airline-passagers.csv")

# Aufteilen von Daten in Zug- und gültige Sätze
Zug = Daten[1:100,]
gültig = Daten[101:jetzt(Daten),]

# entfernen "Monat" Säule
train$Monat = NULL

# Trainingsmodell
model = auto.arima(Bahn)

# Modellzusammenfassung
Zusammenfassung(Modell)

# Vorhersage
vorhersagen = vorhersagen(Modell,44)

# Auswertung
rmse(gültig$International.Airline.Passagiere, Vorhersage$pred)

7. Wie wählt Auto Arima die besten Parameter aus?

Im obigen Code, wir benutzen nur die .hineinpassen() Befehl, um das Modell anzupassen, ohne die Kombination von p . auswählen zu müssen, Q, D. Aber, Wie hat das Modell die beste Kombination dieser Parameter gefunden?? Auto ARIMA berücksichtigt die generierten AIC- und BIC-Werte (wie du im Code sehen kannst) um die beste Kombination von Parametern zu bestimmen. AIC-Werte (Akaike-Informationskriterium) y BIC (Bayessches Informationskriterium) sind Schätzer, um Modelle zu vergleichen. Je niedriger diese Werte sind, desto besser das Modell.

Schauen Sie sich diese Links an, wenn Sie sich für die Mathematik dahinter interessieren AIC Ja BIC.

8. Abschließende Anmerkungen und weiterführende Literatur

Ich habe festgestellt, dass Auto-ARIMA die einfachste Technik ist, um Zeitreihenprognosen zu erstellen. Eine Abkürzung zu kennen ist gut, aber es ist auch wichtig, mit der Mathematik dahinter vertraut zu sein. In diesem Artikel, Ich habe die Details der Funktionsweise von ARIMA untersucht, aber schaut euch unbedingt die Links im Artikel an. Für Ihre einfache Referenz, hier nochmal die links:

Ich würde vorschlagen, das zu üben, was wir hier über dieses Übungsproblem gelernt haben: Übungsaufgabe mit Zeitreihen. Sie können auch unseren Schulungskurs besuchen, der zum gleichen Übungsproblem erstellt wurde, Prognosezeitreihen, um dir einen Vorsprung zu verschaffen.

Viel Glück und zögern Sie nicht, uns Ihre Kommentare zu senden und Fragen im Kommentarbereich unten zu stellen..

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.