Oracle Statistical Functions 11g: statystyka dla dużych i małych

Transkrypt

Oracle Statistical Functions 11g: statystyka dla dużych i małych
XVI Konferencja PLOUG
Kościelisko
Październik 2010
Oracle Statistical Functions 11g:
statystyka dla dużych i małych
Mikołaj Morzy
Instytut Informatyki Politechniki Poznańskiej
[email protected]
Abstrakt. Baza danych Oracle 11g posiada wbudowany bardzo szeroki wachlarz narzędzi statystycznych. W połączeniu z narzędziami
Oracle OLAP i Oracle Data Mining zbiór narzędzi statystycznych, w które wyposażona jest baza danych Oracle 11g tworzy potężne
środowisko analityczne. W zależności od potrzeb użytkownicy mogą wykorzystywać tylko najprostsze funkcje, np. statystykę opisową
lub testowanie hipotez, funkcje analityczne lub funkcje regresji liniowej, ale mogą także sięgnąć po mocniejsze narzędzia: testowa-nie
dopasowania rozkładów, analizę wariancji (ANOVA), parametryczne i bezparemetryczne modele kore-lacji czy testy c2.
W niniejszym artykule przedstawiono przegląd narzędzi statystycznych oferowanych przez bazę danych Oracle 11g, ilustrując poszczególne narzędzia przykładami zastosowań..
Informacja o autorze. Dr hab. inż. Mikołaj Morzy jest adiunktem w Instytucie Informatyki Politechniki Poznańskiej. Jego zainteresowania naukowe koncentrują się przede wszystkim na tematyce eksploracji danych - jest on autorem ponad czterdziestu publikacji
dotyczących tej tematyki. Drugą dziedziną zainteresowań i głównym tematem działalności dydaktycznej Mikołaja Morzego są technologie aplikacji internetowych i rozproszonych oraz technologie związane z bazami danych i hurtowniami danych.
Oracle Statistical Functions 11g: statystyka dla dużych i małych
283
1. Analiza statystyczna w bazie danych
Historycznie, silniki zarządzania bazami danych były przeznaczone do wykonywania nieskomplikowanych obliczeń na danych relacyjnych. Język SQL został zaprojektowany w oparciu
o algebrę relacji i operatory relacyjne działające na zbiorach krotek. Początkowo, jedyna możliwość dokonywania jakichkolwiek obliczeń statystycznych ograniczała się do niewielkiego zbioru
podstawowych funkcji grupowych, takich jak wyznaczanie najmniejszej i największej wartości
w zbiorze, wyznaczanie wartości średniej, wariancji i odchylenia standardowego, czy wreszcie
wyznaczanie liczności zbioru. Oprócz pracy na całym zbiorze krotek zwróconym przez zapytanie,
język SQL oferował także klauzulę GROUP BY umożliwiającą dokonanie partycjonowania zbioru
krotek na rozłączne podgrupy i wyznaczenie wybranych statystyk niezależnie w każdej grupie.
Z biegiem lat okazało się, że tak proste możliwości analityczne są dalece niewystarczające i że
konieczne jest rozszerzenie funkcjonalności baz danych o nowe, silniejsze narzędzia analityczne.
Dostawcy systemów baz danych szybko dostrzegli możliwość zbudowania przewagi konkurencyjnej poprzez dostarczenie wraz z bazą danych narzędzi analitycznych. Tradycyjne podejście,
bazujące na eksportowaniu surowych danych z bazy danych i wykonywaniu analiz statystycznych
za pomocą narzędzi zewnętrznych, takich jak arkusze kalkulacyjne lub pakiety statystyczne, niosło
ze sobą wiele niedogodności. Po pierwsze, wymagało fizycznego przenoszenia danych pomiędzy
różnymi systemami. Po drugie, moment przeniesienia danych do systemu zewnętrznego zawsze
obarczony był dużym ryzykiem. Niezależnie od jakości procedur bezpieczeństwa implementowanych na poziomie bazy danych, dane „wyciekały” poza organizację w wyniku ich rozproszenia
pomiędzy różnymi narzędziami. Wreszcie, gwałtowny rozwój systemów informatycznych i gigantyczny wzrost wolumenów przetwarzanych danych postawił przed użytkownikami problem efektywności przetwarzania analitycznego za pomocą narzędzi uruchamianych na komputerach klasy
desktop.
Przeniesienie przetwarzania analitycznego bezpośrednio do silnika bazy danych niesie ze sobą
wiele zalet. System informatyczny wykorzystujący bazę danych jako środowisko przeprowadzania
analiz statystycznych jest bezpieczniejszy i solidniejszy, aplikacje krytyczne dla działania przedsiębiorstwa lub organizacji działają pewniej i cechują się zwiększoną dostępnością, przetwarzanie
statystyczne wykorzystuje zasoby obliczeniowe przydzielone do serwera bazy danych (najczęściej
te zasoby są wielokrotnie większe niż zasoby dostępne dla komputerów klasy desktop). Nie należy
także bagatelizować zysków wynikających z uproszczonej integracji przetwarzania statystycznego
z aplikacjami klienckimi: taka integracja jest dużo prostsza na poziomie serwera bazy danych niż
samej aplikacji.
Przetwarzanie statystyczne i analityczne realizowane na poziomie bazy danych może być bezpośrednio wplecione w złożone zapytania dostarczające dane do aplikacji desktopowych. W ten
sposób aplikacje mogą być wzbogacone o wartość dodaną wynikającą ze zwiększenia jakości
i użyteczności danych prezentowanych użytkownikowi końcowemu. Nawet najtrudniejsze i najbardziej zasobochłonne zapytania statystyczne mogą być efektywnie przetworzone, np. poprzez
wykorzystanie możliwości zrównoleglenia przetwarzania realizowanego na poziomie serwera
bazy danych. Realizowanie przetwarzania statystycznego na poziomie bazy danych umożliwia
także rozproszenie kosztownych obliczeń pomiędzy węzły systemu gridowego, jeśli baza danych
pracuje w takiej architekturze. Obliczenia mogą być realizowane praktycznie w trybie czasu rzeczywistego, dostarczając wymaganą informację (oraz wiedzę) do użytkowników końcowych
i umożliwiając im podejmowanie świadomych decyzji biznesowych. Wreszcie, architektura serwera bazy danych pozwala także na planowanie i szeregowanie zadań w postaci pakietów obliczeń
wsadowych, co umożliwia przeniesienie najkosztowniejszych obliczeń do najbardziej odpowiednich okien czasowych i pełniejsze wykorzystanie zasobów.
284
Mikołaj Morzy
2. Funkcje grupowe i analityczne
Jak już wcześniej wspomniano, poszczególni dostawcy systemów baz danych szybko rozpoczęli rozszerzanie możliwości analitycznych oferowanych przez siebie produktów poprzez dodawanie nowych, niestandardowych funkcji grupowych. Przykładowo, w bazie danych Oracle 11g
„wartość średnią” w zbiorze można wyznaczyć na trzy sposoby, w zależności od rozumienia pojęcia „wartość średnia” (użytego w sensie kolokwialnym):
SQL> SELECT AVG(sal), MEDIAN(sal), STATS_MODE(sal) FROM emp;
AVG(SAL) MEDIAN(SAL) STATS_MODE(SAL)
---------- ----------- --------------2073.21429
1550
1250
W powyższym przykładzie funkcja AVG(sal) wyznacza średnią arytmetyczną zbioru liczb
reprezentujących pensje pracowników, funkcja MEDIAN(sal) wyznacza medianę zbioru, natomiast funkcja STATS_MODE(sal) wyznacza wartość modalną w zbiorze. Dla przypomnienia,
medianą zbioru (wartością środkową, drugim kwantylem) nazywamy tę wartość cechy w szeregu
uporządkowanym, powyżej i poniżej której znajduje się dokładnie tyle samo wartości. Jeśli
w zbiorze mamy nieparzystą liczbę wartości n, to medianą zbioru będzie wartość elementu o numerze
, jeśli zaś zbiór zawiera parzystą liczbę elementów, to medianą zbioru jest średnia
arytmetyczna między elementami o numerach oraz (oczywiście mowa tu o numerach elementów zbioru w szeregu uporządkowanym). Wartość modalna (wartość najczęstsza, moda, dominanta) w zbiorze to wartość najczęściej występująca, zatem o ile wartość średnia i wartość środkowa nie muszą zawierać się w zbiorze, o tyle wartość modalna zawsze jest zawarta w zbiorze.
W trakcie analizy zbiorów liczb statystycy bardzo często posługują się pojęciami wariancji
i odchylenia standardowego. Wariancja zbioru liczb jest miarą zróżnicowania tego zbioru, tzn.
miarą odchylenia wartości w zbiorze od wartości średniej. Formalnie, wariancja jest zdefiniowana
jako Var[ X ] = E[( X − μ )] gdzie
oznacza wartość oczekiwaną zmiennej. Wariancję najczęściej estymuje się na podstawie reprezentatywnej próby, w takim wypadku wariancję populacji
można oszacować za pomocą następującego estymatora
Podstawową wadą wariancji jest fakt, że wariancja jest wyrażona w innych jednostkach niż
zmienna, której wariancja podlega badaniu. Przykładowo, jeśli zmienna reprezentuje pensje pracowników, to wariancja jest mierzona w PLN podniesionych do kwadratu. Z tego względu
w praktycznych zastosowaniach wygodniej jest posługiwać się pojęciem odchylenia standardowego. Odchylenie standardowe informuje, jak „szeroko” wartości zmiennej są rozproszone wokół
wartości średniej tej zmiennej. Pod pojęciem odchylenia standardowego kryją się w rzeczywistości
trzy różne pojęcia:
•
odchylenie standardowe w populacji: jeśli zbiór zawiera wszystkie wartości z badanej
populacji (np. jeśli dysponujemy wszystkimi pensjami pracowników), to odchylenie
standardowe zmiennej będzie identyczne z odchyleniem standardowym mierzonej cechy w populacji, ponieważ zmienna będzie miała identyczny rozkład co cecha w populacji
Oracle Statistical Functions 11g: statystyka dla dużych i małych
285
•
odchylenie standardowe w próbce: jeśli zbiór zawiera jedynie próbkę wartości cechy
z populacji, to odchylenie standardowe zmiennej stanowi jedynie oszacowanie (estymator) odchylenia standardowego cechy w populacji
•
odchylenie standardowe zmiennej losowej: stanowi informację o cesze wyliczoną na
podstawie rozkładu wartości badanej cechy, w rzeczywistości rozkład ten jest rzadko
znany, stąd wartość odchylenia standardowego zmiennej losowej jest w praktyce mało
przydatna.
Baza danych Oracle 11g zawiera funkcje do wyznaczenia każdego z rodzajów odchylenia standardowego. Przykładowo, wyznaczenie powyższych odchyleń standardowych dla pensji pracowniczych może być wyrażone w języku SQL w następujący sposób:
SQL> SELECT STDDEV(sal), STDDEV_SAMP(sal), STDDEV_POP(sal) FROM emp;
STDDEV(SAL) STDDEV_SAMP(SAL) STDDEV_POP(SAL)
----------- ---------------- --------------1182.50322
1182.50322
1139.48862
Funkcje STDDEV(sal) i STDDEV_SAMP(sal) wyliczają odchylenie standardowe zmiennej
losowej oraz odchylenie standardowe w próbce, odpowiednio. Jedyna różnica między tymi funkcjami polega na tym, że funkcja STDDEV(sal) zwraca wartość 0 dla zbioru składającego się
z jednego elementu, podczas gdy funkcja STDDEV_SAMP(sal) zwróciłaby w takim przypadku
wartość NULL. Funkcja STDDEV_POP(sal) zwraca wartość odchylenia standardowego w populacji, korzystając z estymatora nieobciążonego:
n
s=
∑ (x − x )
i =i
2
i
n −1
Dla wyznaczania wartości wariancji baza danych Oracle 11g oferuje analogiczne trzy funkcje:
VARIANCE(), VAR_SAMP() oraz VAR_POP().
Jednym z najciekawszych rozwiązań w domenie przetwarzania analitycznego i statystycznego
było wprowadzenie przez Oracle funkcji analitycznych. Jest to rozszerzenie standardu funkcji
grupowych o możliwości wyznaczania agregatów na różnych poziomach agregacji, raportowania,
oraz wyznaczania agregatów za pomocą okienek o zmiennym rozmiarze (tzw. funkcje okienkowe). Funkcje analityczne zrewolucjonizowały rynek i szybko zdobyły sobie ogromną popularność,
przede wszystkim ze względu na prostotę i bardzo dużą moc wyrażania. Poniżej przedstawiono
przykład funkcji analitycznej wyznaczającej procentowy udział poszczególnych wartości w sumie
oraz przykład zapytania wykorzystującego funkcje grupowe wyliczające agregaty na różnych poziomach agregacji.
SQL> SELECT job, SUM(sal), RATIO_TO_REPORT(SUM(sal)) OVER ()
FROM emp GROUP BY job;
JOB
SUM(SAL) RATIO_TO_REPORT(SUM(SAL))OVER()
--------- ---------- ------------------------------ANALYST
6000
.206718346
CLERK
4150
.142980189
MANAGER
8275
.285099053
PRESIDENT
5000
.172265289
SALESMAN
5600
.192937123
286
Mikołaj Morzy
SQL> SELECT ename, sal, job, deptno,
SUM(sal) OVER () AS S1,
SUM(sal) OVER (PARTITION BY job) AS S2,
SUM(sal) OVER (PARTITION BY deptno) AS S3
FROM emp
GROUP BY ename, sal, job, deptno;
ENAME
SAL JOB
DEPTNO
S1
S2
S3
---------- ---------- --------- ---------- ---------- ---------- ---------CLARK
2450 MANAGER
10
29025
8275
8750
KING
5000 PRESIDENT
10
29025
5000
8750
MILLER
1300 CLERK
10
29025
4150
8750
JONES
2975 MANAGER
20
29025
8275
10875
SCOTT
3000 ANALYST
20
29025
6000
10875
SMITH
800 CLERK
20
29025
4150
10875
FORD
3000 ANALYST
20
29025
6000
10875
ADAMS
1100 CLERK
20
29025
4150
10875
MARTIN
1250 SALESMAN
30
29025
5600
9400
BLAKE
2850 MANAGER
30
29025
8275
9400
ALLEN
1600 SALESMAN
30
29025
5600
9400
WARD
1250 SALESMAN
30
29025
5600
9400
TURNER
1500 SALESMAN
30
29025
5600
9400
JAMES
950 CLERK
30
29025
4150
9400
Równie interesująca jest możliwość wyznaczania wartości statystycznych za pomocą funkcji
okienkowych. Funkcje te umożliwiają dynamiczne wyznaczanie partycji danych, dla których wyliczane są statystyki, w zależności od bezwzględnej liczby krotek, różnicy w wartościach atrybutów, lub w zmiennych przedziałach czasu. Przykładowo, w wielu analizach statystycznych wygodnie jest posługiwać się pojęciem wygładzonej średniej, która zmienia się wolniej niż sama
zmienna lub trend. Wyznaczenie takiej statystyki przy wykorzystaniu okienkowych funkcji analitycznych staje się bardzo proste. Poniżej przedstawiono przykład zapytania wyznaczającego wygładzoną pensję pracowników, gdzie wygładzanie odbywa się w przedziałach o szerokości jednego roku.
SQL> SELECT ename, sal, hiredate, AVG(sal) OVER (ORDER BY hiredate
RANGE BETWEEN INTERVAL '1' YEAR PRECEDING AND CURRENT ROW) AS
smooth_sal
FROM emp;
ENAME
SAL
---------- ---------SMITH
800
ALLEN
1600
WARD
1250
JONES
2975
BLAKE
2850
CLARK
2450
TURNER
1500
MARTIN
1250
KING
5000
JAMES
950
FORD
3000
MILLER
1300
SCOTT
3000
ADAMS
1100
HIREDATE
--------17-DEC-80
20-FEB-81
22-FEB-81
02-APR-81
01-MAY-81
09-JUN-81
08-SEP-81
28-SEP-81
17-NOV-81
03-DEC-81
03-DEC-81
23-JAN-82
19-APR-87
23-MAY-87
SMOOTH_SAL
---------800
1200
1216.66667
1656.25
1895
1987.5
1917.85714
1834.375
2186.11111
2147.72727
2147.72727
2193.18182
3000
2050
Oracle Statistical Functions 11g: statystyka dla dużych i małych
287
3. Pakiet DBMS_STAT_FUNCS
Pakiet DBMS_STAT_FUNCS zawiera kilka przydatnych procedur, umożliwiających testowanie
zgodności rozkładu badanej cechy z jednym z popularnych rozkładów zmiennych losowych. Pakiet umożliwia sprawdzenie, czy badana cecha ma rozkład zgodny z rozkładem normalnym, rozkładem Poissona, rozkładem wykładniczym, rozkładem jednostajnym oraz rozkładem Weibulla.
Oprócz procedur do testowania zgodności rozkładów pakiet zawiera przydatną procedurę SUMMARY(), która zbiera i prezentuje ogólną charakterystykę wybranego atrybutu. Poniżej przedstawiono przykład zastosowania tej procedury.
DECLARE
l_sigma_value NUMBER;
l_summary DBMS_STAT_FUNCS.summaryType;
BEGIN
l_sigma_value := 2;
DBMS_STAT_FUNCS.SUMMARY('SCOTT','EMP','SAL', l_sigma_value, l_summary);
DBMS_OUTPUT.PUT_LINE('Count: '||l_summary.count);
DBMS_OUTPUT.PUT_LINE('Min: '||l_summary.min);
DBMS_OUTPUT.PUT_LINE('Max: '||l_summary.max);
DBMS_OUTPUT.PUT_LINE('Range: '||l_summary.range);
DBMS_OUTPUT.PUT_LINE('Mean: '||round(l_summary.mean));
DBMS_OUTPUT.PUT_LINE('Mode Count: '||l_summary.cmode.count);
DBMS_OUTPUT.PUT_LINE('Mode: '||l_summary.cmode(1));
DBMS_OUTPUT.PUT_LINE('Variance: '||round(l_summary.variance));
DBMS_OUTPUT.PUT_LINE('Stddev: '||round(l_summary.stddev));
DBMS_OUTPUT.PUT_LINE('Quantile 5 '||l_summary.quantile_5);
DBMS_OUTPUT.PUT_LINE('Quantile 25 '||l_summary.quantile_25);
DBMS_OUTPUT.PUT_LINE('Median '||l_summary.median);
DBMS_OUTPUT.PUT_LINE('Quantile 75 '||l_summary.quantile_75);
DBMS_OUTPUT.PUT_LINE('Quantile 95 '||l_summary.quantile_95);
DBMS_OUTPUT.PUT_LINE('Extreme Count: '||l_summary.extreme_values.count);
DBMS_OUTPUT.PUT_LINE('Extremes: '||l_summary.extreme_values(1));
DBMS_OUTPUT.PUT_LINE('Top 3: '||l_summary.top_5_values(1)||',
'||l_summary.top_5_values(2)||','||l_summary.top_5_values(3));
DBMS_OUTPUT.PUT_LINE('Bottom 3: '||l_summary.bottom_5_values(5)||',
'||l_summary.bottom_5_values(4)||','||l_summary.bottom_5_values(3));
END;
/
Count: 14
Min: 800
Max: 5000
Range: 4200
Mean: 2073
Mode Count: 2
Mode: 1250
Variance: 1398314
Stddev: 1183
Quantile 5 897.5
Quantile 25 1250
Median 1550
Quantile 75 2943.75
Quantile 95 3700
Extreme Count: 1
Extremes: 5000
288
Mikołaj Morzy
Top 3: 5000,3000,3000
Bottom 3: 800,950,1100
akiet DBMS_STAT_FUNCS służy jednak przede wszystkim do testowania zgodności rozkładu
badanej cechy z jednym z dobrze znanych rozkładów. Aby prawidłowo dokonać dopasowania,
konieczna jest znajomość podstawowych parametrów rozkładów, do których następuje dopasowanie. Przykładowo, dopasowując rozkład cechy do rozkładu normalnego konieczne jest podanie
wartości średniej i odchylenia standardowego dopasowywanego rozkładu, a dopasowując rozkład
cechy do rozkładu Poissona konieczne jest podanie wartości parametru λ. Poniżej przedstawiono
procedurę dopasowania rozkładu płacy pracowników do rozkładu normalnego i rozkładu Poissona.
DECLARE
l_fit NUMBER := 0;
l_mean NUMBER := 2073;
l_stddev NUMBER := 1182;
l_lambda NUMBER := 1;
BEGIN
DBMS_STAT_FUNCS.NORMAL_DIST_FIT('SCOTT','EMP','SAL','SHAPIRO_WILKS',
l_mean,l_stddev,l_fit);
DBMS_OUTPUT.PUT_LINE('Fit: ' || l_fit);
DBMS_STAT_FUNCS.POISSON_DIST_FIT('SCOTT','EMP','SAL','KOLMOGOROV_SMIRNOV',
l_lambda,l_fit);
DBMS_OUTPUT.PUT_LINE('Fit: ' || l_fit);
END;
/
W value : .8575388742601245725066612757922867898795
Fit: .0281580633742863600087274203642870442654
D value : .9285714285714285714285714285714285714286
Fit: .000000000009159987558715018
Jak widać, w obu przypadkach dopasowanie jest poniżej domyślnego poziomu istotności
(p=0.05), zatem możemy założyć, że badana cecha nie jest scharakteryzowana ani rozkładem
normalnym, ani rozkładem Poissona. W przypadku każdego z testów (oraz testów wykonywanych
przez procedury EXPONENTIAL_DIST_FIT(), UNIFORM_DIST_FIT() i WEIBULL_
DIST_FIT()) zakładana jest hipoteza zerowa o zgodności rozkładu badanej cechy z danym rozkładem. Niska wartość zwrócona przez każdą z procedur umożliwia odrzucenie hipotezy zerowej.
Procedury dopasowywania rozkładu cechy do zadanego rozkładu wykorzystują jeden z wielu dostępnych w literaturze testów. Przykładowo, testowanie zgodności z rozkładem normalnym może
być wykonane za pomocą standardowego testu Shapiro-Wilksa, ale można się też posłużyć testem
χ2, testem Kołmogorowa-Smirnowa, lub testem Andersona-Darlinga.
3. Testowanie hipotez
Jedną z najczęściej wykorzystywanych technik statystycznych jest przeprowadzanie testów parametrycznych dla wartości średnich i wariancji. Baza danych Oracle 11g umożliwia wykonywanie takich testów w kilku trybach. Dostępne są m.in. test t-Studenta zgodności ze średnią dla
zmiennej opisanej rozkładem normalnym, test t-Studenta na statystyczną istotność różnic średnich
z niezależnych próbek, a także sparowany test t-Studenta. Dla zbadania statystycznej istotności
różnicy w wariancjach można posłużyć się testem f-Fishera. Informację o statystycznej istotności
w różnicach średnich można także uzyskać stosując analizę wariancji, zaimplementowaną
w Oracle 11g jako ANOVA (do wykonania tego obliczenia należy posłużyć się funkcją STATS_
ONE_WAY_ANOVA()). Baza danych umożliwia także testowanie, czy dwie próbki pochodzą z tej
Oracle Statistical Functions 11g: statystyka dla dużych i małych
289
samej populacji, ew. czy dwie próbki są scharakteryzowane tym samym rozkładem. Należy przy
tym zaznaczyć, że nie chodzi tu o sprawdzenie dopasowania do konkretnego rozkładu (jak
w przypadku pakietu DBMS_STAT_FUNCS), a raczej sprawdzenie, czy dwie próbki mają ten sam
dowolny rozkład. Oracle 11g oferuje test Manna-Whitneya zgodności rozkładów oraz test Kołmogorowa-Smirnowa zgodności rozkładów. Wreszcie, można uruchomić także test Wilcoxona do
sprawdzenia, czy mediana różnic między próbkami jest istotnie różna od zera (ten test jest popularną alternatywą dla sparowanego testu t-Studenta w sytuacji, gdy nie można zakładać, że badane
próbki są opisane rozkładem normalnym). Poniżej zaprezentowano przykłady wykorzystania wybranych funkcji statystycznych. Pierwszy przykład pokazuje testowanie hipotezy dotyczącej średniej płacy pracowników (badamy, czy średnia pensja pracowników jest statystycznie istotnie różna
od 2000).
SQL> SELECT AVG(sal),
STATS_T_TEST_ONE(sal, 2000, 'STATISTIC') t_statistic,
STATS_T_TEST_ONE(sal, 2000,'TWO_SIDED_SIG') t_sig
FROM emp;
AVG(SAL) T_STATISTIC
T_SIG
---------- ----------- ---------2073.21429 .231663447 .820406047
Jak widać, niska wartość statystyki i duża istotność pozwalają na przyjęcie hipotezy, że średnia
płaca pracowników nie jest istotnie różna od 2000. Kolejne zapytanie przedstawia weryfikację
hipotezy o tym, czy średnia płaca pracowników jest istotnie różna od średniej płacy przełożonych.
W tym celu należy się posłużyć sparowanym testem t-Studenta.
SQL> SELECT AVG(sal), AVG(mgr_sal),
STATS_T_TEST_PAIRED(sal, mgr_sal, 'STATISTIC') t_statistic,
STATS_T_TEST_PAIRED(sal, mgr_sal, 'TWO_SIDED_SIG') t_sig
FROM ( SELECT e.sal, m.sal AS mgr_sal
FROM emp e JOIN emp m ON (e.mgr = m.empno) );
AVG(SAL) AVG(MGR_SAL) T_STATISTIC
T_SIG
---------- ------------ ----------- ---------1848.07692
3357.69231 -6.8903404 .000016737
W tym przypadku bardzo niska wartość istotności (poniżej domyślnego poziomu istotności)
pozwala jednoznacznie odrzucić hipotezę zerową o braku różnic między płacami pracowników
i ich przełożonych. Następny przykład pokazuje użycie testu t-Studenta w przypadku, gdy dysponujemy dwoma niezależnymi próbkami. Funkcja STATS_T_STAT_INDEP() pozwoli nam
sprawdzić, czy istnieje istotna różnica między średnimi płacami dla dwóch wybranych etatów.
SQL> SELECT
(SELECT AVG(sal) FROM emp WHERE job='SALESMAN') AS salesman_avg,
(SELECT AVG(sal) FROM emp WHERE job='CLERK') AS clerk_avg,
t_statistic, t_sig FROM (
SELECT
STATS_T_TEST_INDEP(job, sal, 'STATISTIC', 'SALESMAN') t_statistic,
STATS_T_TEST_INDEP(job, sal, 'TWO_SIDED_SIG') t_sig
FROM emp WHERE job IN ('SALESMAN','CLERK'));
SALESMAN_AVG CLERK_AVG T_STATISTIC
T_SIG
------------ ---------- ----------- ---------1400
1037.5 2.60778432 .040239811
290
Mikołaj Morzy
Wynik testu jest niejednoznaczny. Co prawda obserwowana istotność leży poniżej domyślnej
wartości progowej (p = 0.05), ale jest na tyle blisko progu, że należy wykazać ostrożność przy
decydowaniu o odrzuceniu hipotezy zerowej. Najprawdopodobniej należałoby wykonać dodatkowe testy, np. sprawdzić, czy badana cecha ma rozkład normalny (w przeciwnym wypadku należałoby się posłużyć innym testem na statystyczną istotność różnicy średnich).
4. Badanie korelacji
Przykłady narzędzi przedstawionych w poprzednim rozdziale umożliwiały analizę pojedynczej
cechy. W wielu aplikacjach interesujące jest zbadanie współzależności między dwoma lub więcej
cechami. W takich przypadkach najczęściej wykorzystywaną techniką statystyczną jest badanie
korelacji między zmiennymi. Baza danych Oracle 11g oferuje trzy różne metody badania korelacji
między zmiennymi dostępne z poziomu funkcji języka SQL. Najpopularniejszym narzędziem jeśli
chodzi o badanie korelacji jest bez wątpienia klasyczny współczynnik korelacji Pearsona, zdefiniowany jako
Jest to iloraz kowariancji zmiennych i iloczynu odchyleń standardowych tych zmiennych.
Współczynnik korelacji Pearsona przyjmuje wartości z przedziału
, przy czym wartość -1
reprezentuje pełną ujemną zależność liniową między zmiennymi, wartość 0 oznacza brak zależności liniowej, zaś wartość 1 oznacza pełną dodatnią zależność liniową. Należy przy tym podkreślić,
że wartość 0 nie pozwala stwierdzić, że między zmiennymi nie występuje żadna zależność. Oznacza ona jedynie brak występowania zależności liniowej. Do wyliczenia współczynnika korelacji
służy w bazie danych Oracle 11g funkcja CORR() przedstawiona na poniższym przykładzie.
SQL> SELECT CORR(sal, EXTRACT(YEAR FROM hiredate)) AS pearson_corr FROM emp;
PEARSON_CORR
-----------.006506407
Jak widać, między płacą pracownika a datą jego zatrudnienia nie występuje absolutnie żadna
zależność liniowa. Poza współczynnikiem korelacji Pearsona baza danych Oracle 11g oferuje także dwie dodatkowe metody wyznaczania współzależności między zmiennymi. Korelacja rangowa
jest realizowana za pomocą funkcji CORR_S(), która wylicza współczynnik korelacji ρ Spearmana. W przeciwieństwie do współczynnika korelacji Pearsona, współczynnik korelacji ρ Spearmana
nie bierze pod uwagę wartości badanych zmiennych, a jedynie ich numer porządkowy w rankingu.
W rezultacie, współczynnik korelacji ρ Spearmana informuje o istnieniu jakiejkolwiek zależności
monotonicznej między zmiennymi (a nie jedynie zależności liniowej). Poniższy przykład pokazuje
użycie korelacji rangowej.
SQL>
SELECT
FROM emp;
CORR_S(sal,DECODE(job,'PRESIDENT',5,'MANAGER',4,'ANALYST',3,
'SALESMAN',2, 'CLERK',1)) AS spearman_corr
SPEARMAN_CORR
------------.870057381
Bardzo podobny do współczynnika korelacji ρ Spearmana jest współczynnik korelacji τ Kendalla. Jest to miara badająca zgodność par wartości analizowanych zmiennych, przy czym para
obserwacji jest uważana za zgodną, jeśli większym wartościom jednej zmiennej odpowiadają
Oracle Statistical Functions 11g: statystyka dla dużych i małych
291
większe wartości drugiej zmiennej. W poniższym przykładzie zbadano, czy istnieje taki związek
między płacą pracownika i procentowym zyskiem ze sprzedaży.
SQL> SELECT CORR_K(sal, NVL(comm,0), 'COEFFICIENT') AS coeff,
CORR_K(sal, NVL(comm,0), 'TWO_SIDED_SIG') AS sig
FROM emp;
COEFF
SIG
---------- ----------.22966621 .252562432
Ostatnia metoda badania współzależności między dwoma zmiennymi wykorzystuje test χ2. Jest
ona dostępna w bazie danych Oracle 11g pod postacią funkcji STATS_CROSSTAB(). Funkcja ta
przyjmuje, jako parametry, nazwy badanych zmiennych, oraz trzeci argument definiujący zwracaną wartość. Funkcja może zwrócić obserwowaną wartość statystyki, istotność obserwowanej
statystyki, liczbę stopni swobody rozkładu, ale także współczynnik ϕ lub współczynnik κ Cohena.
Poniższy przykład pokazuje sposób odczytania wybranych wyników testu χ2
SQL> SELECT STATS_CROSSTAB(sal, NVL(comm,0), 'CHISQ_OBS') AS chi_obs,
STATS_CROSSTAB(sal, NVL(comm,0), 'CHISQ_SIG') AS chi_sig
FROM emp;
CHI_OBS
CHI_SIG
---------- ---------27.7857143 .724358321
5. Regresja liniowa
Ostatnią metodą statystyczną omawianą w niniejszym artykule jest regresja liniowa. Jest to bez
wątpienia jedna z najpopularniejszych i najczęściej stosowanych technik statystycznych. W dużym
uproszczeniu metoda regresji liniowej polega na znalezieniu zależności w postaci
między zmienną objaśnianą y (zwaną także zmienną zależną) a zmienną objaśniającą x (zwaną
także zmienną niezależną). Najczęściej do znalezienia konkretnych wartości współczynników a i b
wykorzystuje się metodę najmniejszych kwadratów. Istnieją także bardziej złożone rodzaje zależności, które mogą być wykrywane za pomocą metod takich, jak regresja logarytmiczna, regresja
logitowa, czy regresja wieloraka. W przypadku bazy danych Oracle 11g prosta regresja liniowa
jest dostępna z poziomu funkcji języka SQL, natomiast bardziej zaawansowane modele można
tworzyć przy wykorzystaniu opcji Oracle Data Mining (jest tam między innymi dostępny w postaci algorytmów Generalized Linear Models i Support Vector Machines). Poniższe zapytanie pokazuje sposób użycia prostych funkcji języka SQL do skonstruowania równania regresji. Wykorzystamy do tego celu funkcje REGR_SLOPE() i REGR_INTERCEPT(), zwracające wartości parametrów modelu a i b, odpowiednio.
SQL> SELECT REGR_SLOPE(sal, EXTRACT (YEAR FROM
EXTRACT (YEAR FROM
REGR_INTERCEPT(sal, EXTRACT (YEAR
EXTRACT (YEAR FROM
FROM emp;
sysdate) –
hiredate)) AS reg_slope,
FROM sysdate) –
hiredate)) AS reg_intercept
REG_SLOPE REG_INTERCEPT
---------- -------------3.4753363
2171.02018
Wynik powyższego zapytania oznacza, że aby oszacować pensję pracownika, który przepracował 35 lat, należałoby skorzystać z formuły
(w rzeczywistości
w przypadku tabeli EMP proste wykreślenie zmiennej objaśnianej i objaśniającej dobitnie wskazuje, że pomiędzy nimi nie występuje żadna zależność liniowa i w tym przypadku użycie modelu
regresji liniowej jest całkowicie nieuzasadnione.
292
Mikołaj Morzy
6. Podsumowanie
W niniejszym artykule przedstawiono przegląd podstawowych narzędzi oferowanych przez bazę danych Oracle 11g do przetwarzania statystycznego. Omówione zostały podstawowe funkcje
grupowe oraz funkcje analityczne, które umożliwiają wykonywanie zaawansowanych zapytań
bezpośrednio z poziomu języka SQL. Dalej, przedstawiono zawartość pakietu
DBMS_STAT_FUNCS który zawiera przede wszystkim procedury do testowania zgodności rozkładu badanej cechy z jednym z dobrze znanych rozkładów statystycznych. Baza danych Oracle
11g umożliwia także testowanie różnorakich hipotez, np. testowanie statystycznej istotności różnic
średnich. Przykładowe zapytania zawarte w artykule prezentowały podstawowe funkcje SQL wykorzystywane do przeprowadzania testów parametrycznych i bezparametrycznych. W drugiej części artykułu skupiono się na narzędziach umożliwiających badanie korelacji między cechami
i przedstawiono cztery różne funkcje realizujące to zadanie. Na koniec przedstawiono w dużym
skrócie prostą metodę wyliczania współczynników regresji liniowej.
Środowisko współczesnego systemu zarządzania bazą danych stanowi kompletne i bogate rozwiązanie dla przetwarzania statystycznego. Wiele zadań, w szczególności zadań nie wymagających najbardziej skomplikowanego aparatu statystycznego, może być z powodzeniem realizowane
wewnątrz bazy danych, bez konieczności eksportowania danych do zewnętrznych specjalizowanych narzędzi. Dodatkowo, dostępność narzędzi statystycznych umożliwia prostą integrację modeli statystycznych w aplikacjach bazodanowych, co może zaowocować znaczącym wzrostem
użyteczności tych aplikacji.
Bibliografia
[1]
Hastie, T., Tibshirani, R., & Friedman, J. (2001). Elements of Statistical Learning. New York: Springer.
[2]
Koronacki, J., & Ćwik, J. (2005). Statystyczne systemy uczące się. Warszawa: Wydawnictwa Naukowo-Techniczne.
[3]
Koronacki, J., & Mielniczuk, J. (2001). Statystyka dla studentów kierunków technicznych i przyrodniczych. Warszawa: Wydawnictwa Naukowo-Techniczne.
[4]
Lorentz, D., & Roese, M. B. (2009). Oracle Database SQL Language Reference, 11g Release 2
(11.2). Oracle Corporation.
[5]
Raphaely, D. (2009). Oracle Database PL/SQL Packages and Types Reference, 11g Release 2
(11.2). Oracle Corporation.

Podobne dokumenty