Kleine Statistikvorlesung: Mit der Datenbank
Heute machen wir eine kleine Statistikvorlesung - mit der Oracle-Datenbank. Es geht um
die klassische, einfache lineare Regression. Das geht mit ganz einfachen SQL-Funktionen. Gegeben
sei eine Tabelle, welche die getätigten Umsätze und die Ausgaben für TV-Werbung enthält.
MONAT UMSATZ_EUR WERBUNG_TV_EUR ---------- ---------- -------------- 2009/11 130000 14000 2009/12 140000 13200 2010/01 100000 9000 2010/02 103000 9500 2010/03 112000 10000 2010/04 90000 12000 2010/05 98000 13000 2010/06 70000 4000 2010/07 109010 12000 2010/08 120000 10000 2010/09 130000 9000 2010/10 150000 15000 2010/11 170000 18000 2010/12 200000 18000 2011/01 10000 2011/02 10200 2011/03 15200
Die Statistikaufgabe wäre nun, den Umsatz der ersten drei Monate in 2011 anhand der
Ausgaben für TV-Werbung zu prognostizieren - eine schöne Statistikaufgabe. Und für diesen
Fall brauchen wir gar keinen Export nach Excel oder in eine Statistiksoftware - das
machen wir direkt mit SQL ...
Zunächst stellen wir mit der "Methode der kleinsten Quadrate" den "Betrag" und die
Steigung der linearen Funktion fest:
select REGR_INTERCEPT(UMSATZ_EUR, WERBUNG_TV_EUR) as A, REGR_SLOPE(UMSATZ_EUR, WERBUNG_TV_EUR) as B from verkauf
Wenn man das dann in eine Inline View packt (WITH-Klausel), dann kann man
Analyse und Prognose direkt mit einer SQL-Abfrage machen ...
with regr_koeffizienten as ( select REGR_INTERCEPT(UMSATZ_EUR, WERBUNG_TV_EUR) as A, REGR_SLOPE(UMSATZ_EUR, WERBUNG_TV_EUR) as B from verkauf ) select monat, umsatz_eur, werbung_tv_eur, a + b * WERBUNG_TV_EUR as UMSATZ_PROGNOSE from VERKAUF, REGR_KOEFFIZIENTEN / MONAT UMSATZ_EUR WERBUNG_TV_EUR UMSATZ_PROGNOSE ---------- ---------- -------------- --------------- 2009/11 130000 14000 138784 2009/12 140000 13200 132751 2010/01 100000 9000 101076 2010/02 103000 9500 104847 2010/03 112000 10000 108618 2010/04 90000 12000 123701 2010/05 98000 13000 131243 2010/06 70000 4000 63368 2010/07 109010 12000 123701 2010/08 120000 10000 108618 2010/09 130000 9000 101076 2010/10 150000 15000 146326 2010/11 170000 18000 168950 2010/12 200000 18000 168950 2011/01 10000 108618 2011/02 10200 110126 2011/03 15200 147834
Stellt man das dann in APEX mit Hilfe eines Diagramms dar, ergibt sich
ein schönes, quasi klassisches Statistikbild mit tatsächlichen und
prognostizierten Daten.
Man sieht sehr schön: Die Datenbank kann eine ganze Menge - und auch für
diese einfachen Fälle gibt es Anwendungsmöglichkeiten. Die Datenbank kann
seit 11g sogar die komplexere multiple Regression mit mehreren unabhängigen
Variablen - das ist dann aber Bestandteil der Data Mining Option, die
man separat lizensieren muss. Wäre ein Fall für ein anderes Blog-Posting.