Wie ich schon damals sagte, möchte ich den Blog auch gerne für eigene Themen nutzen. Darunter fallen natürlich auch Gebiete, die mir während meiner Arbeitszeit begegnen und die ich recht interessant finde. An dieser Stelle möchte ich mich mit einem exponentiellen Glättungsverfahren auseinandersetzen, welches in der Lagerverwaltung eine größere Rolle spielt.
Definition
Doch was sind eigentlich Glättungsverfahren? In der Mathematik beziehungsweise Statistik werden solche Verfahren genutzt, um Trendkomponenten, welche sich durch keine funktionale lineare oder nichtlineare Beziehung darstellen lassen, durch eine sogenannte glatte Komponente mit Hilfe gleitender Durchschnitte zu bestimmen.
Beschreibung
Klingt nun alles sehr theoretisch und unverständlich? Ist es aber letztenendes garnicht. Im Prinzip habt Ihr eine Kurve mit einem festem Beobachtungszeitraum. Zu jedem dieser Zeitpunkte liegt ein beliebiger Wert vor (y1, y2, y3 … yn). Jetzt errechnen wir einfach geglättete Schätzwerte, die sich auf Ergebnisse der vorherigen Zeitpunkte beziehen. Neben unseren Zeitreihenwerten y(t) brauchen wir noch einen Glättungsfaktor alpha, der größer null aber kleiner eins sein muss (0 <= a <= 1). Daraus ergibt sich die Formel, y’(t) ergibt dabei den geglätteten Wert:
y’(t) = a * y(t) + (1-a) * y’(t-1)
Der Schätzwert y’(t) liefert hier den Prognosewert für den Zeitpunkt t+1. Liegt im Zeitpunkt t+1 eine weitere Beobachtung vor, so kann dir Prognose für t+2 ermittel werden, usw.
Beispiel
Es seien insgesamt zehn Zeitreihenwerte (y0 bis y10) gegeben. Diese sollen nun mit einem Glättungskoeffizienten von alpha (a) = 0,3 geglättet werden. Der Anfangswert y’0 soll 19 betragen.
y’1 = 0,3 * 20 + 0,7 * 19 = 6 + 13,3 = 19,3
y’2 = 0,3 * 18 + 0,7 * 19,3 = 5,4 + 13,51 = 18,91
y’3 = 0,3 * 21 + 0,7 * 18,91 = 6,3 + 13,24 = 19,54
…
Dadurch ergibt sich folgende Tabelle und Grafik:

Die Grafik zeigt die Glättung für α = 0,6 sowie α = 0,3 und α = 0,1. Man sieht, dass der kleinere Glättungsfaktor die Zeitreihe stärker glättet, denn hier geht der aktuelle Wert nur mit einem Gewicht von 0,3 ein, wogegen die „mittleren“ Vergangenheitswerte mit 0,7 berücksichtigt werden.
Programmcode
// yt = (19, 20 , 18 , 21 , 22 , 19 , 21 , 18 , 20 , 21 , 17 )
// result = (19, 19.3, 18.91, 19.54, 20.28, 19.89, 20.23, 19.56, 19.69, 20.08, 19.16)
// Exponentielle Glättung: yt = Zeitwerte, a = alpha, result = geglättete Werte
privatestaticdouble[] expsmoothing(double[] yt, double a) {
double[] result = newdouble[yt.length];
result[0] = yt[0];
for (int i = 0; i < yt.length – 1; i++) {
if (i == 0) { result[i+1] = a * yt[i+1] + (1-a) * yt[i]; }
else { result[i+1] = a * yt[i+1] + (1-a) * result[i]; }
}
return result;
}
Fazit
Diese Methode ist sehr nützlich, um Kurvenverläufe zu beeinflussen und kann ohne größere Umstände implementiert werden. Da ich mich gerade mit Java beschäftige, ist der Code in dieser Programmiersprache geschrieben. Dieser funktioniert allerdings auch ohne viel Modifikation in anderen Sprachen, also viel Spaß!
Die Grafik zeigt die Glättung für α = 0,6 sowie α = 0,3 und α = 0,1. Man sieht, dass der kleinere Glättungsfaktor die Zeitreihe stärker glättet, denn hier geht der aktuelle Wert nur mit einem Gewicht von 0,3 ein, wogegen die „mittleren“ Vergangenheitswerte mit 0,7 berücksichtigt werden.
2 Responses to Exponentielle Glättungsverfahren
Obelix 04.08.2011
Formel falsch, da Rekursion fehlt:
y’(t) = a * y(t) + (1-a) * y’(t-1)
Dustin Klein 16.02.2012
Oh stimmt, da ist mir das kleine Zeichen doch glatt durchgegangen. Danke sehr! :-)