Dies ist der 19. Artikel des Gunosy Advent Calender 2015. Dieses Jahr ist auch vorbei.
Ich habe im November bei Gunosy angefangen und es hat viel Spaß gemacht. Da ich normalerweise Datenanalyse und Algorithmusentwicklung mache, werde ich dieses Mal kurz die in der Geschäftsanalyse verwendete Zeitreihenanalyse vorstellen.
"Die Zeitreihenanalyse ist ein Versuch, Schwankungen eines bestimmten Phänomens in Bezug auf vergangene Bewegungen zu erfassen." [Aus "Einführung in die Zeitreihenanalyse" von Genshiro Kitagawa](http://www.amazon.co.jp/%E6%99%82%E7%B3%BB%E5%88%97%E8%A7%A3%E6 % 9E% 90% E5% 85% A5% E9% 96% 80-% E5% 8C% 97% E5% B7% 9D-% E6% BA% 90% E5% 9B% 9B% E9% 83% 8E / dp / 4000054554)
Die Begriffe "datengesteuertes Management" und "Big Data" beginnen Wurzeln zu schlagen, und ich denke, dass viele Unternehmen Entscheidungen treffen, um ihre Produkte basierend auf den Daten zu verbessern. Daten, die sich täglich ändern (insbesondere Indikatoren, die als Verkäufe und KPIs bezeichnet werden), variieren jedoch stark, und es kann schwierig sein, Änderungen richtig zu erfassen. Daher kann eine Zeitreihenanalyse verwendet werden, um Änderungen richtig zu erfassen und Vorhersagen genau zu machen.
Dieses Mal werde ich die saisonalen Anpassungsdaten vorstellen.
Grob gesagt Zeitreihendaten
Beobachteter Wert = Trendkomponente + saisonale Komponente + Rauschkomponente
Dies ist das in erläuterte Modell.
Die Apps, die wir anbieten, werden auch vom Rhythmus des menschlichen Lebens beeinflusst, solange sie eng mit dem menschlichen Leben verbunden sind. Es gibt ungefähr "Monatsfaktor", "Tagesfaktor" und "Zeitfaktor", aber dieses Mal werde ich mich auf den Tag konzentrieren und die Stichprobe implementieren.
Ich möchte es mit den Daten von Tokyo Electric Power implementieren. Zuerst mache ich es mit R. Geben Sie zunächst die Rohdaten aus.
data <- read.csv("tokyo2015_day.csv", header=T) #Holen Sie sich Daten von CSV
power <- data[,2] #Zahlen extrahieren
plot(power, type="l") #Handlung
Es ist gezackt. R hat eine "ts-Funktion", die Daten in periodische Daten umwandelt, und eine "stl-Funktion", die sie in saisonbereinigte Zeitreihendaten umwandelt. Mit diesen können Sie problemlos ein saisonbereinigtes Modell erstellen.
data <- read.csv("tokyo2015_day.csv", header=T) #Holen Sie sich Daten von CSV
power <- data[,2] #Zahlen extrahieren
plot(power, type="l") #Handlung
ts <- ts(power, frequency=7) #Der Zyklus beträgt 7 Tage(1 Woche)
stl <- stl(ts, s.window="periodic") #Erstellung von Zeitreihendaten für die saisonale Anpassung
plot(stl, type="l") #Handlung
Der obere Teil der vier Diagramme enthält die Rohdaten (beobachtete Werte), die in der Reihenfolge von oben in "Trendkomponente", "saisonale Komponente" und "Rauschkomponente" unterteilt werden können.
Bei der Datenanalyse können langfristige Änderungen anhand von Trendkomponenten erfasst werden.
Immerhin sind Sommer und Winter hoch und der Einfluss des Tages scheint groß zu sein (man kann sehen, dass viele Menschen in einem ähnlichen Zyklus leben). Die Hauptelemente für die Tageskomponente sind wie folgt. Da der 1. Januar 2015 der Start und der 1. Januar der Donnerstag ist, können Sie sehen, dass die saisonale Komponente der Feiertage (Samstag, Sonntag) negativ ist.
$ print(stl$time.series[,1]) #Saisonale Komponenten ausgeben
2321.9288 1927.3324 -2517.1524 -6122.9112 293.1919 1872.1087 2225.5017...
Wenn Sie sehen, dass der Stromverbrauch im Sommer stark sinkt, denken Sie: "Es ist wahr, dass es dieses Jahr ab September plötzlich kühler wurde." (* Ich kann nichts sagen, wenn ich es nicht mit anderen Jahren vergleiche)
Ich mache es auch in Python. Das ist Jupyter. Was wir tun, ist dasselbe.
import csv
import datetime as datetime
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
%matplotlib inline
filename = "tokyo2015_day.csv"
with open(filename, 'rt') as f:
data = list(csv.reader(f))
headers = data.pop(0)
df = pd.DataFrame(data, columns=headers)
dataFrame = DataFrame(df['power'].values.astype(int), DatetimeIndex(start='2015-01-01', periods=len(df['power']), freq='D'))
ts = seasonal_decompose(dataFrame.values, freq=7)
plt.plot(ts.trend) #Trendkomponente
plt.plot(ts.seasonal) #Saisonale Zutaten
plt.plot(ts.resid) #Geräuschkomponente
Ein Teil des Python-Codes wurde von @moyomot von R nach Python umgeschrieben.
Das Ende
[Genshiro Kitagawa "Einführung in die Zeitreihenanalyse"](http://www.amazon.co.jp/%E6%99%82%E7%B3%BB%E5%88%97%E8%A7%A3%E6% 9E% 90% E5% 85% A5% E9% 96% 80-% E5% 8C% 97% E5% B7% 9D-% E6% BA% 90% E5% 9B% 9B% E9% 83% 8E / dp / 4000054554)
Recommended Posts