Kurzdokumentation Data Mining Cup 2012

Commentaren

Transcriptie

Kurzdokumentation Data Mining Cup 2012
Kurzdokumentation
Data Mining Cup 2012
Valentina Rehpenning, Tom Kunzendorf
1. Datenanalyse
Im Folgenden wird aufgezeigt, welche Schritte unternommen worden sind, um Zusammenhänge in den Daten zu inden.
Gewählte Tools: Matlab, Excel
1.1 Darstellung aller Kurvenverläufe in je einem Koordinatensystem
 Preisänderung hat keinen sichtbaren Einluss auf Anzahl
 Suche von Regeln zur Vorhersage der Anzahl anhand des Preises verspricht keinen
Erfolg und kann verworfen werden
1.2 Darstellung in einem gemeinsamen Koordinatensystem
 Preise und Anzahlen stark verrauscht
 große Abweichungen zwischen den Kurven  Normierung hilfreich
Bild 1: Visualisierung der normierten Preise aller Produkte über alle Tage
Bild 2: Visualisierung der normierten Verkaufszahlen aller Produkte über alle Tage
1.3 Einordnung der Kurvenverläufe in Gruppen (Cluster)
a) Repräsentation der Kurven durch Berechnung von Mittelwert und Standardabweichung, Anwendung des kMeans-Verfahren zur Clusterbildung
 Normierung nun notwendig, da sonst ähnliche Kurvenverläufe aufgrund von Skalierungsproblemen (wenn zB der Preis eines Produktes sehr viel höher ist als der eines anderen, beide aber trotzdem ähnlichen Preisschwankungen unterliegen) in unterschiedliche Cluster fallen
 neues Problem: die Kurvenverläufe werden nicht sehr gut durch Mittelwert und Standardabweichung repräsentiert, da die Zeitabhängigkeit bei dieser Betrachtung verloren
geht, starkes Rauschen
Cluster 1: rote Kreise
Cluster 3: blaue Kreise
Cluster 4: blaue Kreuze
Cluster 2: grüne Kreise
Cluster 5: rote Kreuze
Bild 3: Visualisierung der mit kMeans gebildeten Cluster über die normierten Preise (30 Iterationsschritte)
b) Berechnung der Preis- und Anzahlanstiege relativ zum Vortag (im Folgenden: relative Werte)
erneute Clusterung auf Mittelwert und Standardabweichung dieser Werte, damit die
Zeitabhängigkeit (zumindest für jeweils zwei Tage) modelliert werden kann
 Geringere Streuung in den Werten
 Schon bei wenigen Clustern werden Kurvenverläufe gut repräsentiert (beispielhat
für Preise in Bild 6 zu sehen)
Bild 4: Visualisierung der relativen Preise aller Produkte über alle Tage
Bild 5: Visualisierung der relativen Verkaufszahlen aller Produkte über alle Tage
Cluster 5: rote Kreuze
Cluster 2: grüne Kreise
Cluster 4: blaue Kreuze
Cluster 3: blaue Kreise
Cluster 1: rote Kreise
Bild 6: Visualisierung der mit kMeans gebildeten Cluster über die relativen Preise (30 Iterationsschritte)
2. Datenvorbereitung
Die Daten liegen zum Ende der Vorüberlegungen in folgenden Formaten vor:
2.1 Originaldaten
Die Originaldaten werden nicht zum Einsatz kommen, da sie - je nach Produkt - in sehr
unterschiedlichen Wertebereichen vorliegen.
2.2 Normierte Daten
Das Umrechnen und anschließende Zurückrechnen der Daten bedeutet zunächst einen
Mehraufwand, der allerdings für ein gutes Clustering in Kauf genommen werden muss.
2.3 Relative Daten (2-Tage-Anstiege, ebenfalls normiert)
Bei dieser Umwandlung wurde versucht, die Zeitabhängigkeit der vorherzusagenden
Anzahlen mit einzubringen. Nachteil ist dabei, dass immer nur eine Abhängigkeit über
2 Tage vorliegt. Für spätere Experimente empiehlt es sich, die Anzahl der zu betrachtenden Tage anpassbar abzulegen.
2.4 Erweiterung der Originaldatenreihen um Preise und Anstiege der darauffolgenden Tage (ebenfalls normiert)
Hier wurde der in Punkt 2.3 angesprochene modiizierbare Zeitabschnitt umgesetzt.
Es wird für einen Tag ein Datenpaar aus dem Preis und der Verkaufsmenge gebildet.
In jedem Datensatz werden nun das Datenpaar eines Tages i mit weiteren Datenpaaren
für die Tage i+1, i+2,....i+n zusammengebracht. Dabei ist n variabel um die betrachtete
Anzahl der Tage pro Datensatzes in den späteren Tests zu variieren
Diese unterschiedlichen Datenstrukturen wurden mittels verschiedener Matlabskripte
berechnet und in Matrizen abgelegt. Sie können einem Data-Mining-Verfahren übergeben werden.
3. Lösungsansätze
Folgende Lösungsansätze wurden diskutiert.
3.1 kNN
• Ähnliche Objekte (Preis-Anzahl-Kombinationen der Tage) mit Distanzfunktion
(z.B. Euklid) ermitteln
• Mittelwert der ähnlichen Objekte übernehmen
Generell könnte die Zeitabhängigkeit verloren gehen, da die Ähnlichsten und nicht unbedingt zeitlich relevante Objekte in die Rechnung eingehen. Der Vergleich von umliegenden Tagen des Zielwertes und des ähnlichsten Wertes könnte Abhilfe schafen.
Eine Ähnlichkeit über mehrere „Nachbartage“ ist jedoch aller Wahrscheinlichkeit nicht
gegeben, da die Anzahl der gegebenen Tage (42) ziemlich klein ist. Der Lösungsansatz
wurde aus diesem Grund nicht weiter verfolgt.
3.2 Entscheidungsbaum
• Mit unterschiedlichen Anstiegen Klassen bilden (starker Anstieg, schwacher Anstieg...)
• Metrische Werte in Intervalle einteilen und den Klassen zuordnen (C4.5)
• Damit Entscheidungsbaum aufstellen
Mit den relativen Daten (siehe 2.3) kann die Klassiizierung ohne großen Aufwand realisiert werden. Die Auswahl geeigneter Anstiegsklassen für die Preise und Verkaufszahlen
ist entscheidend für den Erfolg. Sie bringt eine zusätzliche Unschärfe in die Vorhersage,
da verallgemeinert werden muss. Ein Problem bei Verwendung von Anstiegsklassen ist,
dass auch nur ein Anstieg einer deinierten Größe vorhergesagt werden kann. Bei n
Klassen, können auch nur n unterschiedliche Ergebnisse vorhergesagt werden. Die Vorhersage ist sehr statisch. Wenn der vorhergesagte Anstieg falsch ist, kann der Fehler sehr
viel größer werden als zum Beispiel bei einer einfachen Mittelwertvorhersage. Dieser
Ansatz wurde zugunsten eines neuronalen Netzes (siehe 3.3) nicht weiter verfolgt.
3.3 Neuronales Netz
• Zeitabhängigkeit durch Fensterfunktion bei Auswahl der Eingangswerte realisierbar, letzter vorhergesagter Wert geht in die Berechnung des neuen Wertes mit ein
• Ein Ausgabeneuron für eine vorhergesagte Anzahl (ein Tag, ein Produkt)
Eignet sich sehr gut für metrische Werte, Ergebnis kann durch verschiedene Optionen
(Lernrate, Lernverfahren, Anzahl Neuronen im Hidden Layer,...) und gewählte Eingangswerte (Trainingsmuster) sehr vielseitig angepasst werden. Dieser Ansatz wurde
weiter verfolgt.
3.4 Weitere Überlegungen
• Preise der zu klassiizierenden Tage als Peaks betrachten und in der bereits vorhandenen Menge ähnliche Peaks suchen (Korrelation)
• Anzahl dieser ähnlichen Tage übernehmen (Ähnlichkeitsmaße)
Dieser Ansatz benötigt zunächst sehr viel Programmieraufwand. Eine geeignete Funktion muss geschrieben werden, die die gegebenen Anstiege in verschiedene Untereinheiten einteilt und diese dann mit dem Gesamtsignal verknüpt. Die Gefahr, dass sich dabei
ein Fehler einschleicht, ist sehr hoch und Troubleshooting sehr mühsam. Aus Zeitgründen wurde dieser Lösungsansatz verworfen.
• Mittelwert der letzten n Tage als Ergebniswert setzen
• Lineare oder quadratische Approximation der Anzahl aus den vorangegangenen Tagen
Die letzten beiden Lösungen sind sehr unlexibel und für die stark schwankenden Kennlinien zu simpel. Außerdem würde bei den Berechnungen nur die gegebene Anzahl einließen und es sollte eine Lösung vorgezogen werden, die so viele der vorhandenen Informationen wie möglich in die Vorhersage einbezieht.
4. Lösungsvorschlag
Im Folgenden werden verschiedene Tools vorgestellt, die zum Aubau eines neuronalen
Netzes in Betracht gezogen wurden. Die Vorgehensweise bis zur Endlösung werden hier
kurz umrissen.
JavaNNS:
JavaNNS visualisiert Neuronale Netze, hilfreich beim Verständnis der Netze,
da Programmfunktionalitäten über eine GUI realisiert sind, war es zeitaufwendig in der
Benutzeroberläche in unterschiedlichen Menüs und Fenstern Konigurationen vorzunehmen, speziell wenn versucht wurde Netze mit kontinuierlich ändernden Parametern
zu testen. Eine Möglichkeit zur Batchverbeitung konnte nicht gefunden werden
 SNNS wäre angebrachter, aus Zeitgründen Umgang mit der SNNS-API ausgeschlossen
KNIME:
Ebenfalls ein Programm mit der alle Einstellungen und Verarbeitungsabläufe über eine
GUI zu erstellen sind. Mittels der Flow-Control Funktionen konnten Verarbeitungsabläufe erstellt werden, in denen sich die Paramter des Berechnungsprozesses dynamisch
änderten. Die Implementierungen der Neuronalen Netze ist stark gekapselt, weshalb
nur sehr beschränkte Möglichkeiten bestanden die Netze zu konigurieren. Bspw. konnten Parameter wie Aktivierungs- oder Trainingsfunktionen nicht koniguriert werden.
Ein Versuch den Lösungsansatz mittels KNIME in einer Form umzusetzen, dass der
Worklow noch im Nachhinein nachvollziehbar blieb, scheiterte, da zu viele Nodes verwendet werden mussten und der Worklow somit unüberschaubar wurde. Mit mehr
Zeit für die Einarbeitung und Erfahrung hätte dieses Problem evtl. gelöst werden können. Jedoch wurde stattdessen noch als dritte Alternative die Matlab Neuronal Network
Toolbox getestet.
Matlab Neuronal Network Toolbox:
Da der Umgang mit der Matlab-IDE von den Projektmitgliedern bereits beherrscht
wurde, musste eine Einarbeitung nur in die Neuronal Network Toolbox vorgenommen
werden. Als guter Einstieg dienten dafür die Menü-Assistenten ntool und nntool.
Das Tool ntool wurde genutzt, um einige Beispieldaten für ein Produkt hervorzusagen.
Die Einstellungsmöglichkeiten bei dieser Toolbox sind sehr beschränkt, Trainingsfunktionen und weitere Parameter sind fest voreingestellt. Trotzdem konnten, wie in Bild 8
angedeutet, gute Vorhersagen (Erwarteter Wert: target, erreichter Wert:output) gemacht werden.
Darauhin wurden Skripte in Matlab erstellt um ein neuronales Netz vielseitig konigurieren und die Daten lexibel einlesen und verrechnen zu können.
Bild 7: Nutzeroberläche zum Anlegen, Trainieren und Simulieren eines neuronalen Netzes mit ntool
Bild 8: Ergebnis ntool
4.1 Für jedes Produkt, für jeden Tag ein eigenes Netz
Bei diesem neuronalen Netz kann festgelegt werden, wie viele Folgetage mit in die
Betrachtung eingehen sollen (days_per_row). Für jedes Produkt wird dann eine Trainingsmenge (Anzahl und Preise über n-1 Tage und Preis für Tag n, Ausgabewert ist die
Verkaufsanzahl für Tag n) und eine Simulationsmenge (ist aufgebaut wie die Trainingsmenge nur mit anderen Werten, die nicht explizit gelernt worden sind; die Simulationsmenge entspricht den eigentlichen Vorhersage-Werten) aufgebaut.
Bei einer Vorhersage mehrerer Tage wird die zuletzt vorhergesagte Anzahl an die Trainingsmenge angehängt.
Experimente wurden mit verschiedenen Konigurationen unternommen. Je mehr Daten in die Berechnung des Zielwertes mit eingelossen sind (days_per_row > 15), desto
besser wurde das Ergebnis. Die Transferfunktionen purelin und tansig haben das Ergebnis verschlechtert, da dann auch negative Ergebnisse vorhergesagt wurden. Trainingsfunktionen mit konstanter Lernrate (traingd) und adaptiver Lernrate (trainlm) wurden
ausprobiert, doch die Ergebnisse unterlagen nur geringen Abweichungen. Die Funktionen mit konstanter Lernrate waren allerding erheblich langsamer. (siehe Experimentprotokolle)
Das beste Ergebnis mit einem Fehlerscore von 586,56 wurde mit folgender Koniguration erreicht:
days_per_row
verwendetes Datenformat
Anzahl Hidden Layer
Anzahl Neuronen im Hidden Layer
Netzfunktion
Transferfunktion
Trainingsfunktion
Maximale Anzahl Iterationen
21
normierte Daten
1
10
Feed Forward Back Propagation
logsig
trainlm (Levenberg-Marquardt)
1000
Da der ermittelte Fehlerscore noch nicht sehr gut ist, wurde eine Modiikation vorgenommen. Da in diesem Ansatz für jedes Produkt und für jeden Tag ein neues Netz
aufgebaut wird, fehlt dem Netz das Vermögen zu generalisieren. Nun wird ein Clustering auf allen Produkten vorgenommen und aus allen Vertretern des Clusters gemittelte
Anzahl und Preiswerte jeden Tages als Eingang eines neuronalen Netzes verwendet.
4.2 Neues Clustering
Wie in Punkt 1.3 wird ein Clustering mit kMeans verwendet. Diesmal wird das Clustering aber nicht auf Mittelwert und Standardabweichung jeder Kurve angewendet, sondern nach den Verkaufzahlen aller Tage eines Produktes.
4.3 Für jedes Cluster, für jeden Tag ein eigenes Netz
Dieses Netz funktioniert wie das Netz aus 4.1. Auch hier wird eine verschiedene Anzahl
von Tagen verarbeitet, die zeitlich vor dem hervorzusagenden Tag liegen, um eine Trainingsmenge und eine Simulationsmenge zu bilden. Für dieses neuronale Netz dienen
die gemittelten Preise und Verkaufszahlen eines Clusters als Eingangswerte. Vorherge-
sagt wird ein Wert für einen Tag aller im Cluster beindlichen Produkte.
Das beste Ergebnis mit einem Fehlerscore von 465,88 wurde mit folgender Koniguration erreicht:
days_per_row
Anzahl Cluster
verwendetes Datenformat
Anzahl Hidden Layer
Anzahl Neuronen im Hidden Layer
Netzfunktion
Transferfunktion
Trainingsfunktion
20
4
normierte Daten
1
10
Feed Forward Back Propagation
logsig
trainlm (Levenberg-Marquardt)
16.05.2012
Datenvorverarbeitung
train
class
day
itemID
price
quantity
1
1
P1,1
Q1,1
- Zusammenführen der Daten
- Dadurch leichtere Verarbeitung
(z.B. bei Normalisierung)
ぐ
1
570
P570,1
Q570,1
1
P1,42
Q1,42
Algorithmus
price
1
P1,43
570
P1,56
1
P570,43
570
P570,56
43
ぐ
56
ぐ
ぐ
42
itemID
43
ぐ
ぐ
42
day
570
P570,42
Q570,42
56
all_data
day
itemID
price
quantity
1
1
P1,1
Q1,1
1
P1,56
0
570
P570,1
Q570,1
570
P570,56
0
ぐ
56
ぐ
1
ぐ
56
Datenvorverarbeitung
Berechnung
all_data
day
itemID
price
quantity
1
1
P1,1
Q1,1
1
P1,56
0
Beispiel für ID==1 und 3 Tagen pro Spalte
ぐ
Schleife A: for ID = 1 : 570
56
ぐ
1
570
P570,1
Q570,1
ぐ
norm_all_data
56
570
day
itemID
price
quantity
1
1
NP1,1
NQ1,1
570
0
NN_input_data
quantityC
NP1,1
NQ1,1
NP1,2
NQ1,2
NP1,3
NQ1,3
NP1,2
NQ1,2
NP1,3
NQ1,3
NP1,4
NQ1,4
NQ1,40
NP1,41
NQ1,41
NP1,42
NP1,40
NP570,56 NQ570,56
min_max_data
itemID
min_price max_price min_quantity max_quantity
1
min(P1,n)
570
min(P570,n) max(P570,n) min(Q570,n)
max(P1,n)
NN_target_data
priceA quantityA priceB quantityB priceC
ぐ
Normalisierung
Normalisierte Daten
56
P570,56
- Normalisieren und
Abspeichern der min/maxWerte zum späteren
Rückrechnen
min(Q1,n)
max (Q1,n)
ぐ
Schleife B: for day = 42 : 56
max (Q570,n)
Berechnung
Berechnung
Schleife B: for day = 42 : 56
Schleife B: for day = 42 : 56
NN_input_data
NN_target_data
NN_sim_data
priceA quantityA priceB quantityB priceC
quantityC
priceA quantityA priceB quantityB priceC
NP1,1
NQ1,1
NP1,2
NQ1,2
NP1,3
NQ1,3
NP1,41
NP1,2
NQ1,2
NP1,3
NQ1,3
NP1,4
NQ1,4
NQ1,40
NP1,41
NQ1,41
NP1,42
ぐ
NP1,40
NQ1,42
- Erzeugen der Input und Target
Datensätze für die Netzerstellung
und にtraining
NQ1,41
NP1,42
ぐ
NQ1,42
Erstellen und Training eines neuronalen Netzes
NQ1,42
NP1,43
Netzkonfiguration
Wertvorhersage berechnen
- Auf das erstellte Netz den
Vorhersagedatensatz
anwenden
NN_result_data
Netzkonfiguration
- Netzkonfiguration (beinhaltet
Anzahl der Neuronen, Layers,
Trainings- / Aktivierungsfkt.,
u.v.m.
quantityC
NQ1,43
1
16.05.2012
Berechnung
Berechnung
Schleife B: for day = 42 : 56
NN_input_data
Schleife A: for ID = 1 : 570
NN_target_data
NN_result_data
priceA
quantityA
priceB
quantityB
priceC
quantityC
NP1,1
NQ1,1
NP1,2
NQ1,2
NP1,3
NQ1,3
quantityC
NP1,2
NQ1,2
NP1,3
NQ1,3
NP1,4
NQ1,4
NQ1,43
NP1,40
NQ1,40
NP1,41
NQ1,41
NP1,42
NQ1,42
NP1,41
NQ1,41
NP1,42
NQ1,42
NP1,43
NQ1,43
ぐ
Schleife B: for day = 42 : 56
- Den vorhergesagten
Wert in die Trainingsdaten
fügen
ぐ
NN_result_data
- Ergenisse aller Tage des
aktuell zu verarbeitenden
Produktes
quantity
Training
Vorhersage
NQ1,43
NQ1,56
NN_sim_data
- Darstellung einer Iteration für das
Vorhersagen eines Tageswertes
priceA
quantityA
priceB
quantityB
priceC
NP1,41
NQ1,41
NP1,42
NQ1,42
NP1,43
Berechnung
Optimierung
norm_all_data
Schleife A: for ID = 1 : 570
day
itemID
price
quantity
1
1
NP1,1
NQ1,1
CLUSTERING
Normalisierte Daten
56
570
NP570,56
- Cluster bilden
- Anhand aller Daten eines
Produktes
NQ570,56
Schleife A: for cluster = 1 : N
itemID
quantity
1
NQ1,43
ぐ
1
NQ1,56
570
NQ570,43
ぐ
570
NQ570,56
Schleife B: for day = 42 : 56
results
NN_results
- Ergebnisse für alle Tage
und aller Produkte
- Denormalisieren
Denormalisierung
min_max_data
itemID
min_price
max_price
itemID
quantity
1
Q1,43
ぐ
NN_results
1
Q1,56
clusterID
quantity
570
Q570,43
1
NQ1,43
ぐ
ぐ
570
Q570,56
1
NQ1,56
N
NQN,43
- Verarbeiten und
vorsagen der Daten
für die Cluster
results
- Die vorhergesagten
Werte des Clusters den
Produkten zuweisen
Ergebnisse den
ID zuordnen
Denormalisierung
itemID
quantity
1
Q1,43
ぐ
1
Q1,56
570
Q570,43
ぐ
ぐ
N
570
NQN,56
Ergebnis
Q570,56
Ergebnis
Ansatz 1:
für jedes Produkt, für jeden Tag ein neues Netz
Ansatz 2:
für jedes Cluster, für jeden Tag ein neues Netz
586 Punkte
Punkte:
586
465 Punkte
Punkte:
465
- Tabelle mit den gewählten Parametern des
Netzes
2