|
Data Mining mit der Oracle-Datenbank und Application Express
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-Funktionalität in Oracle: Grundlagen
Die Data Mining-Funktionalität ist in den Kern der Oracle-Datenbank
integriert - im Gegensatz zu spezieller Data Mining-Software müssen
die Daten also nicht aus der Datenbank herausbewegt werden, um eine
Analyse zu machen - alles geschieht direkt in der Datenbank. Da Data Mining-Analysen
einerseits auf mitunter sehr großen Datenbeständen durchgeführt werden,
andererseits teilweise aufwändige Datentransformationen nötig sind,
ist das Arbeiten in der Datenbank hier von großem Vorteil.
Abbildung 1: Data Mining-Funktionalität in der Datenbank
Einer der wichtigsten Aspekte,
den Data Mining in der Datenbank mit sich bringt, ist allerdings die Tatsache,
dass das Data Mining-Modell in der Datenbank
bekannt ist. Demnach können die Ergebnisse auch direkt im Online-Betrieb
genutzt werden. Wenn bspw. mit einer Data Mining-Analyse ein Modell zur
Klassifizierung von Kunden gefunden wurde, kann dieses Modell direkt
auf neu erstellte Daten angewendet werden - ein neue Kunde wird also
in dem Moment, in dem die Daten in die Datenbank gespeichert werden,
klassifiziert.
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.
Oracle stellt zur Nutzung der Data Mining-Funktionen eine Java- und eine
PL/SQL-Programmierschnittstelle bereit - in diesem Tipp wird die Nutzung
der PL/SQL-API mit Application Express vorgestellt. Daneben steht im
Oracle Technet ein grafisches Werkzeug (Oracle Data Miner)
zum Download
bereit. Dieser Tipp wurde mit einer Oracle11g-Datenbank erstellen;
Data Mining steht allerdings auch schon in Oracle9i und Oracle10g bereit.
Abbildung 2: Grafisches Werkzeug: Oracle Data Miner
Zunächst wird das recht einfache PL/SQL-Paket
DBMS_PREDICTIVE_ANALYTICS vorgestellt - es
erlaubt die Durchführung standardisierter
Data Mining-Analysen ohne große Vorbereitungen. Anschließend wird auf die weitergehenden
Möglichkeiten des Pakets DBMS_DATA_MINING eingegangen -
damit können Data Mining-Analysen
bis ins Detail parametrisiert werden.
Die wichtigste Voraussetzung für eine Data Mining-Analyse ist eine
klar formulierte Aufgabenstellung. Als erstes Beispiel soll anhand eines
Datenbestandes mit Informationen zu Kunden herausgefunden werden,
welche Attribute welchen Einfluß (statistisch!) auf das Einkommen des
Kunden haben ...
Data Mining mit Application Express nutzen: Vorbereitungen
Wenn Sie in einer Oracle11g-Datenbank arbeiten, benötigt Ihr
APEX Parsing Schema
das Privileg CREATE MINING MODEL
zur Durchführung von Data Mining-Analysen.
Die Daten befinden sich im Beispielschema SH;
wenn dieses Schema in Ihrer
Datenbank nicht vorhanden ist, können Sie es mit dem Skript mksample.sql
im Verzeichnis $ORACLE_HOME/demo/schema einspielen.
Im Schema SH befinden
sich unter anderem die Tabellen CUSTOMERS,
SALES und PRODUCTS.
Stellen Sie
sicher, dass Ihr APEX Workspace Zugriffsrechte (SELECT-Privilegien) an der
Tabelle CUSTOMERS hat. Spielen Sie
anschließend folgendes SQL-Skript ein, um im
APEX Parsing Schema
die Tabelle CUSTOMERS_MINING zu erzeugen.
Erzeugen Sie nun eine Application Express-Anwendung mit einer
Berichtsseite - somit können Sie einen Blick auf die Daten
werfen (Abbildung 3).
Abbildung 3: Mining-Daten in der Berichtsansicht
Data Mining ganz einfach: DBMS_PREDICTIVE_ANALYTICS
Nun führen wir eine erste Data Mining-Analyse auf den Testdaten
durch - wir möchten wissen, welches der Attribute eines Kunden
("MARITAL_STATUS",
"YEAR_OF_BIRTH", etc.) den (statistisch) stärksten
Einfluß auf das Einkommen ("INCOME_LEVEL") hat.
Dazu gibt es die Prozedur
EXPLAIN im PL/SQL-Paket
DBMS_PREDICTICVE_ANALYTICS.
Fügen Sie Ihrer Application Express also zunächst eine neue
Schaltfläche mit Titel Analysieren zu. Bei Klick auf die
Schaltfläche soll die Seite Weitergeleitet werden.
Danach erzeugen
Sie einen neuen
Prozeß vom Typ PL/SQL. Er soll
beim Weiterleiten der Seite
(onSubmit) gestartet werden und folgenden PL/SQL-Code ausführen.
Achten Sie darauf, den Prozeß an eine Bedingung zu knüpfen; er soll
natürlich nur dann ausgeführt werden, wenn die Schaltfläche geklickt
wurde.
Die Prozedur DBMS_PREDICTIVE_ANALYTICS
schreibt die Ergebnisse der Analyse
in eine Tabelle - der Name der Tabelle wird als Parameter
result_table_name
übergeben und die Tabelle darf noch nicht existieren - aus diesem Grund versucht
obiger Prozeßcode, sie vorher zu löschen.
Wenn Sie die Seite nun starten und auf die neue Schaltfläche klicken,
sehen Sie zunächst noch nichts (Abbildung 4). Das liegt daran, dass
die Ergebnisse des Data Minings nun in der Tabelle
MINING_ERGEBNIS
vorliegen; an der Oberfläche ist noch nicht passiert ...
Abbildung 4: Die Data Mining-Analyse wurde durchgeführt
Es bleibt die Visualisierung der Ergebnisse übrig: Erzeugen Sie also
(je nach Geschmack) einen Bericht oder ein Diagramm auf die Tabelle
MINING_ERGEBNIS - am besten
knüpfen Sie die Darstellung an die Bedingung,
dass die Tabelle vorhanden ist (Abbildung 5).
Abbildung 5: Bedingung für Ergebnisbericht: Die Tabelle MINING_ERGEBNIS muss existieren
Das Ergebnis sieht dann in etwa wie in Abbildung 6 aus ...
Abbildung 6: Ergebnis der Data Mining-Analyse
Den größten Einfluß aus statistischer Sicht hat demnach das Attribut
CUST_CREDIT_LIMIT. Bereits hier
ist erkennbar, dass man fachliches Know How
benötigt, um Data Mining-Ergebnisse interpretieren zu können. Denn
das Kreditlimit ist wohl eher eine Folge des Einkommens und nicht dessen
Ursache. Das "zweitwichtigste" Attribut YEAR_OF_BIRTH
ist einleuchtend; in vielen Berufen ist es normal, dass mit
dem Lebensalter die Einkommen steigen.
Die Prozeduren des Pakets
DBMS_PREDICTIVE_ANALYTICS dienen der "Schnellanalyse";
die Prozedur EXPLAIN bietet
keinen Parameter zum Einschließen oder Ausschließen
von Attributen oder zum Festlegen des konkreten Algorithmus an - das ist
allerdings mit dem Paket DBMS_DATA_MINING möglich -
das Modell zur Vorhersage der Umsatzerwartung aufgrund gegebener Attribute
erzeugen wir daher mit DBMS_DATA_MINING.
Data Mining im Detail mit DBMS_DATA_MINING
Wir setzen wieder auf dem Stand von Abbildung 3 auf. Erstellen Sie also ggfs.
eine neue Anwendungsseite und kopieren Sie den Bericht mit den Mining-Daten
auf diese.
Wenn Sie mit Oracle Data Mining arbeiten, werden Einstellungen vielfach
nicht als Parameter zu einer PL/SQL-Prozedur übergeben, sondern aus Tabellen
gelesen. So bspw. die Einstellung, welcher Algorithmus verwendet werden soll.
Erstellen Sie sich also eine "Einstellungstabelle" a
(Settings Table) im
SQL Workshop mit folgendem Kommnado:
In diesem Beispiel wollen wir mit dem
Naive Bayes-Algorithmus arbeiten; die
entsprechende Einstellung tätigen wir der Einfachheit halber nun ebenfalls
im SQL Workshop
(natürlich könnte man dies auch in die Oberfläche zur
Anwendung einarbeiten, dies würde hier aber zu weit führen). Lassen Sie
daher (ebenfalls im SQL Workshop) zusätzlich dieses Skript laufen.
Navigieren Sie nun zurück zu Ihrer Anwendungsseite. Im Gegensatz zu vorhin
möchten wir nun die Attribute, welche in die Analyse einbezogen werden,
auswählen können. Um diese
Einstellungen tätigen zu können, benötigen wir einige APEX-Formularelemente
in einer neuen Region vom Typ HTML.
Beginnen Sie mit einer einfachen Auswahlliste
(Element PX_TARGET_COL) zum Festlegen der
abhängigen Variable
(hier: TARGET_COLUMN).
Verwenden Sie als Wertelistenabfrage folgendes SQL:
Der Naive Bayes-Algorithmus erwartet (wie alle anderen Klassifizierungsalgorithemn)
die Angabe der Case-ID bzw. des Primärschlüssels.
Erzeugen Sie also eine
entsprechende Auswahlliste (PX_ID_COL) -
der Einfachheit halber nehmen Sie obiges SQL als
Wertelistenabfrage. Hier haben wir es eigentlich mit
abhängigen Auswahllisten (cascading LOV's)
zu tun; wenn Sie eine intuitivere Oberfläche erstellen möchten, finden Sie in
diesem Tipp Hinwiese zur Implementierung mit AJAX-Technologie.
Alle anderen Spalten können als unabhängige
Variablen (input attributes)
verwendet werden. Erstellen Sie also ein weiteres Element vom Typ
Shuttle
(PX_INPUT_COL) mit wiederum derselben
SQL-Abfrage. Das vorläufige Ergebnis
sollte dann wie in Abbildung 7 aussehen.
Abbildung 7: Parameter für die Data Mining-Analyse
Es fehlt noch ein letzter Parameter: Wir möchten die Daten in
eine Trainingsmenge und eine Testmenge unterteilen können. Mit
der Trainingsmenge erstellen wir das Modell, mit der Testmenge
wird später die Güte des gefundenen Modells geprüft: Man lässt
das Modell die Fälle schätzen, die man schon kennt -
anhand der Differenzen kann das Modell beurteilt werden.
Erzeugen Sie also ein einfaches Texteingabefeld (PX_TRAINING),
in welches man einen Prozentwert eingeben kann. Fügen Sie zum
Abschluß noch eine Schaltfläche zum Absenden hinzu.
Abbildung 8: Alle Parameter für die Data Mining-Analyse
Mit Klick auf die Schaltfläche geht es los: Anhand der ausgewählten
Spalten und der Angabe für die Trainingsmenge werden zunächst zwei Views
erzeugt - eine repräsentiert die Trainingsmenge - die andere die Testmenge.
Der Code generiert mit den in den Auswahllisten
und dem Shuttle-Element ausgewählten Tabellenspalten
zwei CREATE VIEW -Kommandos
und führt sie mit EXECUTE IMMEDIATE aus.
Anschließend wird mit der Prozedur
DBMS_DATA_MINING.CREATE_MODEL das
Data Mining-Modell erzeugt.
Erstellen Sie also einen neuen Prozeß mit Namen
Mining Modell erstellen
und hinterlegen Sie folgenden PL/SQL-Code.
Achten Sie darauf, dass der Prozeß nur ausgeführt wird, wenn
die Schaltfläche geklickt wurde. Fügen Sie der Seite nun noch
einen weiteren Bericht für die bereits vorhandenen Data Mining-Modelle
hinzu - hinterlegen Sie dazu folgendes SQL:
Starten Sie die Seite nun, wählen Sie die Zielspalte
(TARGET_COLUMN),
die Fall-ID-Spalte (CUST_ID) und
die in die Analyse einzubeziehenden
Attribute ein und klicken Sie die Schaltfläche. Sie sollten dann
folgendes Bild erhalten ...
Abbildung 9: Ein Data Mining-Modell wurde erstellt
Doch was tut man nun damit?
Der nächste Schritt wäre das Anwenden auf den Testdatenbestand (welcher
durch den PL/SQL-Prozeß als View von der Trainingsmenge abgegrenzt wurde),
das Ermitteln von Kennzahlen und die Bewertung des gefundenen Modells. Diese
Themen werden mitsamt einem weiteren Algorithmus
(Decision Tree) in einem
der nächsten Community-Tipps behandelt. Dieser Tipp
schließt mit der konkreten Anwendung des Data Mining-Modells.
Nutzung des gefundenen Data Mining-Modells
Das erstellte Data Mining-Modell kann nun genutzt werden, um anhand
gegebener Attribute eine Abschätzung zu liefern. Dazu dienen die SQL-Funktionen
PREDICTION und
PREDICTION_PROBABILITY. Einen ersten Test können Sie bereits
im SQL Workshop durchführen.
Sie sehen in etwa folgende Ausgabe ...
Abbildung 10: Nutzung des Data Mining Modells: Online-Schätzung
Spielen Sie ein wenig mit den Eingabeattributen herum; Sie werden feststellen,
dass Sie mit anderen Attributen andere Schätzungen bekommen. Die Funktion
PREDICTION_PROBABILITY gibt Ihnen
eine Einschätzung über die statistische
Sicherheit der jeweiligen Abschätzung.
Dieser Funktionalität kann nun beliebig in Application Express-Prozesse
oder Formulare eingebaut werden ...
Abbildung 11: Nutzung des Data Mining Modells: Online-Schätzung in einer APEX-Anwendung
Damit ist das Thema Data Mining noch lange nicht abgeschlossen - man kann
nun darüber nachdenken ...
- Zunächst die Güte des gefundenen Modells zu überprüfen; dies wird in einem
der nächsten Community-Tipps betrachtet.
- Einen anderen Algorithmus zu verwenden (bspw. Support Vector Machines oder Decision Trees)
-
Die Daten anders aufzubereiten; so könnte das Einteilen des Attributs
Geburtsjahr in wenige Klassen zu
anderen (vielleicht besseren?) Ergebnissen bei
der Abschätzung führen
Weitere Informationen zum Thema:
Zurück zur Community-Seite
|