|
Data Mining mit der Oracle-Datenbank und APEX: Die Modelle prüfen
Data Mining beschäftigt sich bekanntlich mit dem Auffinden bislang
unbekannter Zusammenhänge in Datenbeständen. Dazu werden statistische
Methoden wie Naive Bayes,
Support Vector Machines oder andere verwendet.
Kaum bekannt ist, dass auch die Oracle-Datenbank mit Data Mining-Funktionalität
ausgestattet ist - dieser Tipp stellt sie vor und zeigt auf, wie sie
aus einer Application Express-Anwendung heraus genutzt werden kann.
Hintergrundinformationen zum Thema finden Sie unter anderem
im Wikipedia-Artikel "Data Mining".
Data Mining in der Oracle-Datenbank ist Teil der Data Mining Option; um
die Funktion nutzen zu können, ist also die Lizensierung der Data Mining Option
erforderlich.
Nachdem Sie im
letzten Tipp erfahren haben, wie Sie mit einem
Datenbestand eine Data Mining-Analyse durchführen können, erfahren
Sie in diesem Tipp, wie Sie das gefundene Modell überpüfen und
bewerten können.
Ausgangssitutation
Abbildung 1: Ergebnis des letzten Tipps: ein Data Mining-Modell wurde erzeugt
Abbildung 1 zeigt das Ergebnis des letzten Tipps: Der Datenbestand
wurde in eine Trainings- und eine Testmenge unterteilt; mit dem
Trainingsbestand wurde das Data Mining-Modell DM_APEX erzeugt. Für
die Trainingsmenge wurde die View DM_APEX_TRAIN erzeugt; die Testmenge
wird von der View DM_APEX_TEST repräsentiert. Mit der
Testmenge wurde im letzten Tipp noch nicht gearbeitet.
Erzeugen Sie sich eine neue Anwendungsseite: Auf dieser werden die
Komponenten zum Test des Data Mining-Modells erzeugt. Fügen Sie
zuerst einen Bericht zum Anzeigen der Data Mining-Modelle hinzu. Die
SQL-Abfrage hierfür ist folgende.
Zum Testen lässt man das Data Mining-Modell Fälle schätzen, deren
Ergebnis man schon kennt. Anschließend werden Schätzung und
Wirklichkeit verglichen. Zum Erstellen der Schätzungen dient
die Prozedur DBMS_DATA_MINING.APPLY. Erstellen Sie also nun zur Auswahl des zu testenden Modells eine
Auswahlliste namens P4_MINING_MODELLE (mit Weiterleitung)
mit folgender Wertelistenabfrage:
Fügen Sie dann eine weitere Auswahlliste (P4_PK_COLUMN) zum Festlegen der
Primärschlüsselspalte (Case-Id Column) hinzu. Verwenden Sie hierfür folgende
Wertelistenabfrage:
Knüpfen Sie das Element an die Bedingung, dass das Element
P4_MINING_MODELLE nicht Null (NOT NULL) ist.
Abbildung 2: Bedingung für Element zur Auswahl des Primärschlüssels
Erzeugen Sie zum Schluß eine
Schaltfläche mit der Aufschift Modell testen und fügen Sie
einen neuen PL/SQL-Prozeß namens Modell testen hinzu. Der Prozeß soll bei Klick
auf die Schaltfläche ausgeführt werden. Hinterlegen Sie
folgenden PL/SQL-Code für den Prozeß.
Wenn Sie nun die Seite starten und auf die Schaltfläche klicken, wird das
System arbeiten und irgendwann fertig sein (Abbildung 3) - aber Sie sehen außer
der Erfolgsnachricht noch nichts.
Abbildung 3: Das Modell wurde (noch nicht) getestet
Das liegt daran, dass Sie bis hierhin nur Schätzungen durchgeführt haben.
Diese Schätzungen sind nun in der Tabelle DM_TEST_APPL (siehe Prozeßcode) gespeichert. Die
Güteprüfung des Modells kommt nun durch den Vergleich zwischen Schätzung
und tatsächlichen Daten zustande. Und dazu bietet die Oracle-Datenbank
drei Verfahren an:
- Confusion Matrix
- ROC (Receiver Operation Characteristic)
- Lift
Die Confusion Matrix und die ROC-Kurve werden im Folgenden näher erläutert.
Confusion Matrix
In der Confusion Matrix werden den bekannten Werten die Schätzungen
gegenübergestellt. Um die Confusion Matrix zu berechnen,
wird noch die Tabellenspalte benötigt, die in der Testdatenmenge
das tatsächliche Ergebnis enthält (also das, mit dem die Schätzung
verglichen werden soll). Erzeugen Sie also eine weitere Auswahlliste
mit Namen P4_TARGET_COLUMN und der folgenden Wertelistenabfrage:
Erzeugen Sie dann eine
weitere Schaltfläche namens Confusion Matrix berechnen und
nehmen Sie einen weiteren PL/SQL-Prozeß hinzu. Wie vorhin soll der Prozeß
bei Klick auf die Schaltfläche ausgeführt werden.
Bevor Sie die Seite nun starten, benötigen Sie noch ein APEX Element. Der
erste Parameter der Prozedur CONPUTE_CONFUSION_MATRIX ist ein "OUT-Parameter" -
die Prozedur gibt eine Kennzahl für die Gesamtgenauigkeit des Data Mining-Modells
zurück. Obiger Code übernimmt diese Kennzahl in das Element P4_ACCURACY. Fügen
Sie also ein weiteres Element P4_ACCURACY hinzu; die Darstellung kann
Read Only erfolgen. Anschließend können Sie die Seite starten und die
Schaltfläche Confusion Matrix berechnen ausprobieren ...
Abbildung 4: Die Confusion Matrix wurde berechnet
Sie sehen, dass im Element P4_ACCURACY nun ein Wert steht - die
0.27 sind ein Indikator für die Gesamtgenaugkeit des Modells:
Etwa 27 Prozent
der Fälle wurden korrekt geschätzt. Die Confusion Matrix selbst
wurde wiederum in einer Tabelle gespeichert - deren Name ist
(aus obigem Code ersichtlich) gleich {Name des Mining-Modells}||'_CONF'.
Diese Tabelle hat normalerweise drei Spalten, in diesen werden alle
Kombinationen zwischen geschätzten und tatsächlichen Werten nebst der
Anzahl der Fälle aufgeführt. Selektiert man die Tabelle im SQL Workshop,
so sieht das Ergebnis in etwa wie in Abbildung 5 aus.
Abbildung 5: Selektion der Confusion Matrix als Tabelle
Schöner wäre allerdings schon die Darstellung der Werte als
"richtige" Matrix. Dazu müssen die Daten als Kreuztabelle
dargestellt werden. Navigieren Sie dazu zum Community Tipp
Daten als Kreuztabelle darstellen,
navigieren Sie zum Abschnitt Kreuztabellen vor Oracle11g und spielen
Sie (per SQL Workshop) die Funktion getPivotSql in Ihr Datenbankschema
ein.
Erzeugen Sie dann den SQL-Bericht (keinen interaktiven Bericht)
zur Darstellung der Confusion Matrix;
hinterlegen Sie folgenden PL/SQL-Code als Berichtsquelle .
Stellen Sie sicher, dass Sie unterhalb des PL/SQL Code
Generic Columns als Spaltenüberschriften eingestellt
haben. Klicken Sie dann auf Region erstellen, starten Sie die Seite
aber noch nicht.
Navigieren Sie dann wiederum zu den Berichtsattributen (Abbildung 6).
Abbildung 6: Berichtsattribute der Confusion Matrix
Stellen Sie den Überschriftstyp auf PL/SQL um und hinterlegen
Sie im Feld für die PL/SQL-Funktion, die die Spaltenüberschriften zurückliefert, folgenden Code:
Speichern Sie die Angaben und starten Sie die Seite - Sie sollten in etwa
folgende Ausgabe sehen ...
Abbildung 7: Darstellung der Confusion Matrix
Abbildung 7 zeigt die Confusion Matrix: Auf der waagerechten sehen Sie
die tatsächlichen Werte aus der Testdatenmenge (Income Level). Auf der
Senkrechten sind die Schätzungen zugeordnet - die gelb markierten
Felder geben die korrekt durchgeführten Schätzungen wieder - alle anderen
Schätzungen waren fehlerhaft. Eine Erweiterung der Confusion Matrix
wäre die Berücksichtigung von Kosten: Jeder Fehlschätzung können (unterschiedliche) Kosten
zugeordnet werden, so dass man neben dem Prozentwert auch ein Kostenwert
entstehen kann.
Receiver Operation Characteristics (ROC)
Der nächste Indikator für die Güte des Data Mining-Modells ist die
ROC-Kurve - wie die Confusion Matrix muss Sie zunächst berechnet
werden. Die ROC-Kurve bezieht sich allerding stets auf einen
"bevorzugten" Wert; Sie benötigen also eine weitere Auswahlliste,
aus welcher der bevorzugte Wert (also hier das bevorzugte "Income Level")
ausgewählt werden kann. Erzeugen Sie also eine weitere Auswahlliste
namens P4_PREFERRED_VALUE mit folgendem SQL als Wertelistenabfrage:
Anschließend benötigen Sie wieder eine Schaltfläche ROC-Kurve berechnen
und einen PL/SQL-Prozeß. Und wiederum soll der Prozeß nur bei
Klick auf die Schaltfläche ausgeführt werden
Starten Sie Sie die Seite, treffen Sie in der Auswahlliste für das
"bevorzugte" Income Level eine Auswahl und klicken Sie die
Schaltfläche ROC-Kurve berechnen. Daraufhin vergehen wiederum einige
Sekunden und Sie sehen die Ausgangsseite nochmals (Abbildung 8).
Abbildung 8: Die ROC-Kurve wurde berechnet
Die Daten der ROC-Kurve wurden wie bereits vorhin die der
Confusion Matrix in einer Tabelle abgelegt:
Der Name ist
(aus obigem Code ersichtlich) gleich {Name des Mining-Modells}||'_ROC' .
Schauen Sie sich die Tabelle zunächst im SQL Workshop an (Abbildung 9).
Abbildung 9: Daten der ROC-Kurve
Die ROC-Daten geben, vereinfacht ausgedrückt, Aufschluß darüber, wieviele
Fehler man akzeptieren muss, wenn man eine bestimmte Anzahl Schätzungen
annehmen möchte.
Man sieht das in Abbildung 9 sehr schön an der
ersten Zeile. Da jede Data Mining-Schätzungen auch fehlerhaft sein kann,
muss man Fehler akzeptieren: Setzt man eine Wahrscheinlichkeit von 1 (100%)
voraus, so kann man keine der Schätzungen akzeptieren, denn deren Wahrscheinlichkeit
liegt stets unter 1. Setzt man nun mindestens 0,8 (80%) voraus, so kann
man in diesem Beispiel 49 True Positives akzeptieren,
denn deren Wahrscheinlichkeit liegt über 0,8. Alle anderen müsste man verwerfen. Dies
ließe sich nun bis zu einer Mindest-Wahrscheinlichkeit
von Null fortführen; dann könnte man alle Schätzungen akzeptieren.
Am besten visualisiert man die ROC-Kurve als Diagramm. Erstellen Sie
ein zweidimensionales Liniendiagramm und hinterlegen Sie folgende
Diagrammabfrage:
Stellen Sie das Aussehen des Diagramms nach Belieben ein; das Ergebnis sollte
wie in Abbildung 10 aussehen:
Abbildung 10: ROC-Kurve als Diagramm
Ein Data Mining-Modell ist umso besser, je mehr Schätzungen es
für eine bestimmte akzeptierte Fehlerrate liefert, also je mehr die
Kurve sich in die obere linke Ecke bewegt. Die Fläche unterhalb
der Kurve ist somit eine Kennzahl für die Güte des Modells; diese
wird ja von der Prozedur DBMS_DATA_MINING.COMPUTE_ROC
als OUT-Parameter
zurückgegeben. Die ROC-Kurve wird gerne mit der (hier blau eingezeichneten)
Linie verglichen; diese würde die zufällige Schätzung repräsentieren.
Berechnet man nun ROC-Kurven auch für die anderen Einkommensstufen, so lässt sich
feststellen, ob das Modell bei bestimmten Einkommensstufen besonders gut oder
besonders schlecht arbeitet.
Fazit
Allein mit Hilfe der Werkzeuge Confusion Matrix
und ROC bekommt
man schon einen recht guten Eindruck vom Data Mining-Modell. Noch besser
wird es, wenn man mehrere Modelle hat; diese lassen sich dann vergleichen.
Für den konkreten Fall
lässt sich feststellen, dass es zwar schon besser als der Zufall arbeitet,
aber noch lange nicht als optimal zu bezeichnen ist.
Allein aus der Confusion Matrix lässt sich ablesen, dass viele Schätzungen
"nur knapp" daneben liegen, also die Einkommensklasse jeweils direkt über
oder unter der richtigen getroffen haben. In der Statistik gilt das natürlich
als Fehlschätzung, denn etwas wie "in etwa richtig" gibt es nicht.
Man könnte sich also nun die Frage stellen, ob der Datenbestand die Klassifizierung
in 12 Einkommensklassen überhaupt erlaubt oder ob es vielleicht besser
wäre, sich auf weniger Klassen zu beschränken. Auch könnte ein anderer
Algorithmus zu besseren Ergebnissen führen. Diese Themen werden allerdings
in einem der nächsten Community Tipps behandelt.
Weitere Informationen zum Thema:
Zurück zur Community-Seite
|