summaryrefslogtreecommitdiff
path: root/doc/document.asciidoc
blob: 0c426bb2023110cd2cc6ff5a08f0f6526dd745e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
DMC 2012
========
:author: Jan Klemkow, Benjamin Franzke
:lang: de
:doctype: book
// a2x: --dblatex-opts "-P latex.output.revhistory=0"
// a2x: --dblatex-opts "-P doc.publisher.show=0"

Vorbetrachung der Daten
-----------------------

Bei der Datenvorbetrachung konnten weitere Informationen herrausextrahiert
werden.
Die Summer aller Quantitäten abgetragen in einem Graphen ueber die Zeit ergab
eine deutliche periodische Schwankung ueber sieben Tage.
Aus dieser Erkenntniss herraus wurde das Sevenday-Verfahren(siehe unten)
entwickelt.

Verfahren und Programme
-----------------------

Zur Verarbeitung der Daten wurde das Programm Octave benutzt.
Dieses ist eine Open-Source alternative zu MATLab.
In dem Programm wurden die Daten in Form von Matriezen dagestellt.
Das Script 'get_products.m' liest die Datei ''

- Mittelwert
- Lineare-Approximation (preis -> quantität)
- Lineare-Approximation (zeit -> quantität)
- Mittlere-Wochen-Verhersagen

image::image/opt_pred_pie.svg[Anteil der Verfahren an der Gesammtloesung]

Mittelwert
~~~~~~~~~~
Beim Mittelwertverfahren wird fuer jedes Produkte ueber die Trainingsmenge
der Mittelwert gebildet und fuer den unbekannten Zeitraum Vorhergesagt.
Dabei wurde eine Fehlerpunktzahl von 489 erreicht.

Sevenday-Verfahren
~~~~~~~~~~~~~~~~~~
Wenn man die Summe ueber dem Absatz alle Produkte fuer alle 42 Tage in einem
Diagram abträgt, sieht man eine sehr deutliche periodische Schwankung der
Werte.
image::image/q_sum.svg[Quantitätssumme]
Diese Schwanken in einem Sieben-Tage-Rhythmus.
Unter der Anahme, das dieses Verhalten jedem oder zumindest in den meisten
Produkte zu grunde liegt, wurde das Sevenday-Verfahren entwickelt.
Der Ansazt geht davon aus, dass der Absatz im mittel ueber eine Woche immer
gleich ist und sich nur ueber Absatzstarke und -schwache Tage verteilt.

Beim Sevenday-Verfahren wird fuer jeden Wochentag ein Mittelwert gebildet und
Vorhergesagt.
In der Summer versucht man also ueber sieben Tage einen mittlere Schwingung
der Sieben-Tage-Schankung zu erzeugen und dieses dann fuer den unbekannten
Zeitraum vorherzusagen.
image::image/sevenday_pred.svg[Quantitätssumme mit Sevenday-Vorhersage]
In diesem Diagramm ist die mittlere kurve in den Vorhersagezeitraum abgetragen
worden.
Das Ergebniss sieht optisch gut aus, aber enttäuscht in der Fehlerzahl von 484
Punken.
Wenn fuer eine Produkt an einem Tage ein zu hoher Wert vorhergesagt wird und
fuer ein anderes Produkt ein zu niedriger im Vergleich zu den Realwerten,
dann gleichen sich die Negativen- und Positvenabstände in der Summer wieder
aus.
Daher kann das Verhalten der Siebentagesschwankung nicht alleine Auschlaggebend
fuer den Absatz eines Produktes sein.

Lineare-Approximation Zeit -> Quantität
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Bei der Approximation der Quantitätskurve zu einer geraden, wird versucht einen
allgemein steigenden oder fallenden Trend eines Produktes zu erkennen.
Hierbei wird davon ausgegangen, dass sich ein Produkt ueber eine grosseren
Zeitraum im mittelveränder.
Anders als beim Mittelwertverfahren, welches von einer immer gleichbleibenden
Grundabsatzmenge ausgeht, wird hier ein Trend mit bedacht.

Der Verlauft der Quantität ueber die Trainingsdaten wird linear angenähert und
fuer den die Vorhersage benutzt.

Das Ergebniss dieses Verfahrens lieferte fuer einige Produkte z. B. dem Ersten
eine etwas besseres Ergebniss als der Reine Mittelwert.
Fuer andere allerdings einen viel zu steilen Anstieg, der ziemlich grosse
Fehlerwerte verussachte.

TODO: Fehlerwerte noch mal bestimmen!

Lineare-Regresion (special)
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Am Produkt Nr. 335 kann man examplarisch sehr gut erkennen, dass der Absatz
von den beiden Einflussgroessen Siebentage-Schwankung sowie der Preisänderung
abhängt.
Mit diesem Verfahren wird versucht beide Einflussgroessen bei der Vorhersage
zu beachten.

Dabei wurde zunächte eine Fourie-Analyse der Kurve der Absatzsumme alle
Produkte ueber die 42 Tage der Vorhersagemenge durchfuehrt, um die Frequenzen
der Siebentagesschwankung empirisch zu bestimmen.
Es wurde jeweil einzelne Frequenzen entfernt und bei der Ruecktransformation
ein Digramm erwartet, welches dem mittelwert ähnelt.

...

Die so ermittelten Frequenzen wurden dann nach der normalen Preis -> Quantitäts
approxiamtion wieder hinzu genommen.


Grundidee:
- herrausrechnen der 7-Tage-Einbruche aus den Trainingsdaten fuer die Regression
	und eine Approximation fuer reinen Preis->Quantitäts-Zusammenhang.
- 7-Tage-Einbrueche hinein rechnen.

Der Absatz eines Produktes setzt sich aus verschiedenen Einflussfaktoren
zusammen.
Zum eine die Wochen- und die Preisschwankung.

Zufallsverfahren
~~~~~~~~~~~~~~~~
Dieses Verfahren wurde entwickelt um Plausibität der anderen Verfahren zu
Testen und um der Vermutung nach zu gehen, das es Produkte gibt, welche
gar nicht vorhersagbar sind.

Bei dieses Verfahren wurde fuer jedes Product der Mittelwert und die
Standardabweichung ermittelt.
Mit dieses Parametern konnten fuer jedes Product 14 Werte zufällig fuer die
Vorhersage bestimmt werden.
Zur Zufallsbestimmung wurden Octave-interen Zufallsfunktionen mit Normal- und
mit Chi-Verteilung benutzt.
Beide Verteiltungen lieferten ähnliche Ergebnisse.

Der Gesammtfehler bei diesem Verfahren schankte zwischen 640 und 590
Fehlerpunkten.
Im Vergleich mit anderen Verfahren (siehe Optimierungsverfahren) stellte sich
herraus, dass es immer wieder Produkte gab, welche mit diesesm Verfahren bessere
Werte lieferten.
Circa 7% der Podukte liessen sich mit Zufall besser vorhersagen, als duch die
Zuvor beschriebenen Verfahren.
Es stellte sich aber herraus, dass es bei jedem duchlauf andere Produkte waren,
welche mit dem Vergleich zu den Realendaten besser vorhergesagt wurden.
Somit war dieses Verfahren keine Option fuer eine serioese Vorhersage fuer
unbekannten Datensätze.

Optimierungsverfahren
~~~~~~~~~~~~~~~~~~~~~
Das Optmierungsverfahren ist Post-Clustering und wurde im Script 'opt_pred.m'
implementiert.
Dieses Meta-Verfahren bestimmt fuer jedes Produkt eines der oben genannten
Verfahren, welches den geringsten Fehlerwert bei der Vorhersage ueber der
Trainingsmenge ergab.
Dabei werden die Vorhersage-Matrizen der Verfahren mit den Real-Daten ueber die
Manhatten-Distanz verglichen.
Als Ergebnis erhält man nun einen Vektor, welches die Indizes der jeweils
besten Verfahren enthält.
Die Position des Indizes spiegelt dabei das Produkt wieder, fuer die dieses
Verfahren am besten geeignet ist.

Mit diesem Vektor koennen nun die Vorhersagen der einzelnen Produkte fuer den
unbekannten Zeitraum zusammen gelegt werden.

image::image/opt_pred_pie.svg[OptimizePie]

Dieses Verfahren wuerde sich auch gut zur Bestimmung des Abgabe-Datensatzes fuer
den Daten-Mining-Cup eignen.
Dabei koennten alle Teams fuer ihre Verfahren einmal ihre Vorhersage fuer die
Tage 29 bis 42 in Form der "train.txt" und ihre Vorhersagen fuer den unbekannten
Zeitraum abgeben.
Anhand der verschiedenen Fehler der Vorhersagen pro Produkt koennte wie oben
beschrieben ebenfalls ein Vektor mit den Indizes der Verschiedenen Einreichungen
erstellt werden und damit auch der Datensatz fuer die Einreichung im Wettbewerb.

// vim: set syntax=asciidoc: