OD POJEDYNCZYCH DRZEW DO LOSOWEGO LASU Tomasz Demski, StatSoft Polska Sp. z o.o. Zgłębianie danych (data mining) Obecnie coraz częściej dysponujemy dużą liczbą danych opisujących interesujące nas zjawisko lub proces. Z drugiej strony rosną wymagania odnośnie dokładności i trafności opisu czy modelu danego zjawiska. Dotyczy to zarówno zastosowań naukowo-badawczych, jak i wspierających bieżącą działalność rozmaitych przedsiębiorstw i organizacji. W rezultacie tradycyjne techniki analizy danych często przestają dawać zadowalające i użyteczne wyniki, a na popularności zyskuje zgłębianie danych (data mining). Najważniejsze różnice między zgłębianiem danych a tradycyjną statystyką to: w zgłębianiu danych hipotezy raczej formułujemy, a nie testujemy, mamy ograniczony wpływ na układ danych, stosujemy dane gromadzone w celu innym niż analiza danych, mamy ograniczone możliwości zaplanowania i przeprowadzenia doświadczenia, nie znamy i nie zakładamy postaci zależności, badamy duże zbiory danych, często stosujemy specjalne metody modelowania, model oceniamy pod kątem działania dla nowych danych. Podstawową cechą narzędzi zgłębiania danych jest możliwość odtworzenia nieznanego lub niezałożonego z góry wzorca zależności. Innymi słowy metody te są zdolne odtworzyć nieomal dowolną zależność między zmiennymi, jeśli tylko będziemy mieli odpowiednio dużo danych dobrej jakości. Proces znajdowania modelu w zgłębianiu danych nazywa się uczeniem, ponieważ w wielu metodach przebiega ono podobnie jak uczenie na przykładach znane z codziennego życia. Algorytmowi pokazuje się przykłady (dane), a on na ich podstawie ma być w stanie przewidywać wartości dla nowych danych. 66
` Drzewa decyzyjne Wśród typowych metod data mining jedną z najpopularniejszych są drzewa decyzyjne. Metoda ta polega na podziale przestrzeni cech na rozłączne części (kostki), w których zmienna zależna przyjmuje pewną wartość, innymi słowy, części te są jednorodne ze względu na zmienną zależną. Podział odbywa się iteracyjnie: najpierw dzielimy przestrzeń cech według jednej zmiennej, a potem uzyskane w ten sposób zbiorowości podlegają kolejnym podziałom, aż do uzyskania jednorodnych segmentów lub do momentu, gdy dalsze podziały nie mają sensu, np. ze względu na liczność zbiorów podlegających podziałom. Wynikowy model przedstawiany jest w postaci drzewa. Dla przykładu rozważmy proste zadanie. Mamy koszyk różnych owoców i chcemy każdy z nich przypisać do jednego z trzech gatunków: jabłko, śliwka lub gruszka na podstawie ich masy, kształtu i koloru. Zatem zmienną zależną jest gatunek, predyktorami cechy owocu. Jak to zadanie zrealizują drzewa? Najpierw sprawdzą, która z tych cech umożliwia podzielenie wejściowego koszyka na najbardziej jednorodne części. W naszym przypadku na podstawie masy możemy oddzielić śliwki od dwóch pozostałych gatunków. Jeden z wynikowych zbiorów zawiera tylko śliwki i nie ma potrzeby dalej go dzielić, ale postaje nam drugi zbiór zawierający jabłka i gruszki. Ponieważ wszystkie jabłka mają przypisany taki sam kształt: kulisty, a mają różne kolory (a niektóre odmiany jabłek i gruszek mają taki sam kolor), to najlepszy podział uzyskamy, stosując warunek na kształt owocu. Zauważmy, że w wyniku takiej procedury dostaliśmy doskonały podział wszystkie wynikowe zbiory (węzły) zawierają tylko jeden gatunek owocu. 67
Nasz model, czyli regułę klasyfikowania nowych owoców do danego gatunku przedstawiamy w postaci drzewa takiego jak na rysunku poniżej. Zalety drzew to wspomniana już prostota i szybkość działania, ale również zdolność odtworzenia nieznanej, nieliniowej zależności. Użyteczność modelu dodatkowo poprawia możliwość zastosowania różnych kosztów błędnych klasyfikacji dla klas. Warto podkreślić to, że drzewo stanowi bardzo przejrzysty model. Dzięki temu jesteśmy w stanie określać przyczyny prowadzące do zaklasyfikowania obiektu do pewnej klasy, np. dla pewnej osoby mamy wysokie zagrożenie odejścia, ponieważ zgłosiła reklamację, która nie została uznana, ma stary aparat itd. Kolejną, bardzo ważną z praktycznego punktu widzenia zaletą jest radzenie sobie z obserwacjami odstającymi i zmiennymi bez znaczenia. Zalety te powodują, że dobrze jest zacząć analizę właśnie od drzew. Niestety drzewa mają też wady. Przede wszystkim ich odpowiedź ma skokowy charakter. Całemu segmentowi przypisujemy jedną wartość zmiennej zależnej. Dodatkowo drzewa działają na zasadzie ostrego cięcia : bardzo niewielka zamiana wartości jednej z cech może prowadzić do dużego skoku wartości przewidywanej, dokładnie takiego samego, jak znacznie większe przesunięcie. Drzewa nie są w stanie opisać złożonych zależności tak dokładnie, jak inne, bardziej skomplikowane procedury. Kolejną wadą drzew jest ich niestabilność: nawet niewielka zmiana danych (np. usunięcie kilku przypadków) może skutkować zupełnie innym drzewem. Zastanówmy się teraz, jak udoskonalić drzewa decyzyjne, tak aby zachować choć część ich zalet, a zmniejszyć wady. 68
` Co dwie głowy, to nie jedna Pomysł jest bardzo prosty: zamiast stosować jedno drzewo, tworzymy ich wiele. Jako przewidywanie modelu stosujemy: średnią, gdy przewidujemy wartości liczbowe (np. zapotrzebowanie na energię elektryczną w danej godzinie), wynik głosowania zespołu drzew, gdy przewidujemy przynależność do klasy (np. zły kredyt ). Oczywiście drzewa w zespole powinny się różnić i dlatego budujemy je na różnych losowo utworzonych próbach. Takie podeście można uzasadnić w bardziej formalny sposób (zob. [1]). Przyjmijmy, że modelowana wielkość Y jest pewną funkcją zmiennych objaśniających (predyktorów) X, przy czym występuje pewne wahania losowe, o średniej 0 i wariancji σ ε 2 : Y = φ(x) + ε (1) Zauważmy, że w praktyce zawsze będziemy mieli do czynienia ze składnikiem (o σ ε 2 > 0), choćby ze względu na niepewność pomiaru Y. Jako miarę błędu przyjmijmy błąd kwadratowy. Wtedy w punkcie x 0 wartość oczekiwana błędu modelu M wyniesie 18 : B(x 0 ) = [Y M(x 0 )] 2 (2) M oznacza model dopasowany do danej próby uczącej i może się zmieniać wraz ze zmianą danych uczących. Jeśli podstawimy wzór na Y (1) do równania (2), to po kilku przekształceniach uzyskamy wyrażenie na błąd: B(x 0 ) = σ ε 2 + [ M(x 0 ) φ(x 0 )] 2 + M(x 0 ) M(x 0 ) 2 (3) Wyodrębniliśmy trzy składniki. Pierwszy z nich: σ ε 2, to błąd losowy lub naturalna zmienność procesu, której nie możemy zmniejszyć, stosując techniki modelowania. Drugi składnik: [ M(x 0 ) φ(x 0 )] 2 to kwadrat różnicy między wartością oczekiwaną przewidywań modeli (tworzonych dla różnych prób) a prawdziwą wartością. Składnik ten nazywamy obciążeniem (ang. bias). Zazwyczaj im bardzie złożony model, tym mniejsze jest obciążenie. Jest to zgodne ze zdrowym rozsądkiem: im bardziej złożony model, tym większa jest szansa, że wyłapiemy wszystkie przyczynowe zależności. Z drugiej strony znajdziemy też pewne przypadkowe, pozorne zależności, ale wartość oczekiwana powinna je wyśredniować do niewielkiej liczby. W trzecim składniku w (3) łatwo rozpoznać wariancję. Mierzy ona zmienność modeli. Zazwyczaj bardziej złożone modele cechują się większą wariancją. 18 Nawiasy oznaczają wartość oczekiwaną. 69
Chcemy uzyskać jak najmniejszy błąd modelu, jednak mamy problem: jeśli będziemy zwiększać złożoność modelu, to spadnie nam obciążenie, ale wzrośnie wariancja. Z kolei upraszczanie modelu redukuje wariancję, ale powoduje wzrost obciążenia. Jeśli jednak utworzymy zespół drzew, to obciążenie zespołu będzie takie, jak pojedynczego drzewa, natomiast wariancja spadnie (mamy tu analogię z wielokrotnym wykonywaniem pomiaru pewnej wielkości, np. długości). W idealnym przypadku, gdyby drzewa były całkowicie niezależne, to wariacja dla modelu zespołowego, spadłaby tyle razy, ile mamy drzew składowych. W rzeczywistości drzewa zawsze będą skorelowane, im większa jest korelacja, tym słabsze jest polepszenie modelu. W najprostszym przypadku, gdy wyznaczamy średnią N zmiennych o takim samy rozkładzie (z wariancją σ 2 ) i współczynniku korelacji dla każdej z par równym ρ, wariancja średniej wyniesie ([1]): Var(M śr ) = ρσ 2 + 1 ρ N σ2 (4) Podsumowując nasze rozważania, możemy zaproponować następujące rozwiązanie: tworzymy zespół złożonych drzew, tak aby uzyskać jak najmniejsze obciążenie, staramy się uzyskać drzewa jak najbardziej niezależne od siebie, aby zmniejszyć wariancję modelu. Niezależność drzew składowych uzyskujemy, ucząc je na próbach powstałych przez losowanie ze zwracaniem ze zbioru, którym dysponujemy. Aby dodatkowo zmniejszyć korelację między drzewami, przed znajdowaniem każdego podziału w drzewie losujemy pewną liczbę zmiennych objaśniających spośród wszystkich dostępnych w danych. Następnie najlepszy podział znajdujemy, korzystając tylko z tych wylosowanych zmiennych (pozostałe pomijamy). Zauważmy, że w wielu przypadkach losując zmienne dla każdego podziału, a nie stosując wszystkie dostępne cechy, w modelu rzeczywiście wykorzystamy wszystkie zmienne. Wyobraźmy sobie, że mamy dwie skorelowane zmienne objaśniające. Jeśli jedna z nich prowadzi do lepszych podziałów, to właśnie ona zawsze będzie wybierana do drzew, niezależnie od losowego wyboru przypadków do analizy. W ten sposób w modelu korzystamy tylko z jednej z tych zmiennych. Natomiast jeśli przed znajdowaniem podziału losujemy predyktory, to dajemy szansę słabszej zmiennej na wejście do modelu. Opisane powyżej postępowanie nosi nazwę losowego lasu (ang. random forest). Zostało ono zaproponowane przez Breimana [2]. Drzewa składające się na losowy las uzyskujemy w następujący sposób: 1. Wylosuj ze zwracaniem podzbiór danych (przypadków) z dostępnej próby uczącej. 2. Utwórz drzewo dla wylosowanego podzbioru. - Sprawdź, czy dzielony zbiór jest jednorodny lub zbyt mały, aby go dzielić. - Wylosuj pewną liczbę zmiennych objaśniających. - Znajdź najlepszy podział z wykorzystaniem wylosowanego podzbioru zmiennych. - Podziel zbiór na dwie części i dla każdej z nich przejdź do punktu 2.1. 70
` 3. Jeśli liczba drzew osiągnęła zadane maksimum lub błąd w próbie testowej przestał maleć zakończ uczenie, jeśli nie to przejdź do punktu 1. Najważniejsze zalety losowego lasu, to: Odporność na rozmaite problemy z danymi: braki danych, zmienne objaśniające bez znaczenia, powiązanie zmiennych objaśniających, duża liczba zmiennych objaśniających, wartości odstające. Możliwość dokładniejszego odtworzenia złożonych zależności, niż są to w stanie zrobić drzewa decyzyjne. Siła predykcyjna losowego lasu jest zwykle nieco mniejsza, ale porównywalna ze wzmacnianiem i sieciami neuronowymi (zob. [1]). Odporność na przeuczenie (autor metody twierdzi, że przeuczenie w ogóle nie występuje, co wydaje się zbyt optymistycznym stwierdzeniem, zob. [1] i [3]). Stabilność. Możliwość wykrycia interakcji między zmiennymi. Możliwość określenia różnych kosztów błędnych klasyfikacji. Losowy las jest popularny w badaniach genetycznych (analiza mikromacierzy), przewidywaniu aktywności biologicznej cząsteczek (QSAR), analizie dokumentów tekstowych, zdjęć, analizach przestrzennych itp. tam gdzie mamy do czynienia z dużą liczbą cech. Przykład Przedmiotem naszej analizy będą raporty o wypadkach lotniczych z lat 2001 2003 opracowane przez National Transportation Safety Board (amerykańską agencję rządową zajmującą się bezpieczeństwem transportu). Przykładowy źródłowy raport widzimy na rysunku poniżej. 71
Na podstawie takiego raportu będziemy chcieli przewidzieć, czy wśród pasażerów i załogi ktoś odniósł poważne obrażenia. Pierwszym krokiem analizy był text mining, dzięki któremu przekształciliśmy pozbawione struktury dokumenty tekstowe w arkusz ze zmiennymi liczbowymi. Każdy dokument został scharakteryzowany pewną miarą częstości występowania w nim słów, tzw. odwrotną częstością dokumentową (ang. inverse document frequency, IDF). Wielkość ta uwzględnia zarówno liczbę wystąpień danego słowa w danym dokumencie (n), jak i stosunek liczby wszystkich dokumentów do częstości dokumentów, w których słowo wystąpiło (f). Poniżej widzimy wzór na odwrotną częstość dokumentową (IDF). 0; gdy n 0 IDF 1 (5) 1 ln( n) ln ; gdy n 0 f Po przygotowaniu danych, redukcji do rdzenia itp. dokumenty zostały opisane przez IDF dla 200 słów. Wstępne przetworzenie dokumentów opisane jest w artykule Czy leciał z nami pilot, czyli text mining na przykładzie opisów wypadków lotniczych zawartym w [5] oraz w podręczniku [4]. Oprócz wyników przetworzenia opisów w modelu wykorzystamy również informację o warunkach lotu (pogoda i widoczność), typie samolotu i rodzaju lotu. Ostatecznie mamy 204 zmienne objaśniające na ich podstawie będziemy tworzyć model. Zauważmy, że nasze zadanie jest bardzo trudne: na podstawie samego opisu wypadku pisanego luźnym tekstem i kilku zmiennych dodatkowych, chcemy przewidzieć, czy ktoś odniósł poważne obrażenia. W naszym zadaniu napotkamy też mnóstwo trudności technicznych: bardzo dużą liczbę zmiennych o nietypowych rozkładach. Wydaje się, że do rozwiązania problemu odpowiedni będzie losowy las. Model tworzymy w STATISTICA Data Miner. Po otwarciu pliku danych naciskamy przycisk Losowy las na karcie Data mining wstążki. Na ekranie pojawi się okno: Wybieramy tu rodzaj zadania. My przewidujemy przynależność do klasy: wystąpiły poważne obrażenia lub nie. Oznacza to że mamy do rozwiązania zadanie klasyfikacyjne. Po wybraniu rodzaju zadania na karcie Podstawowe okna Ustawienia losowego lasu określamy zmienne do analizy (zob. poniżej). 72
` W naszym przykładzie tylko w ok. 15% przypadków wystąpiły poważne obrażenia. Aby uzyskać użyteczny model określamy różne koszty błędnych klasyfikacji dla klas Tak i Nie. Zwykle koszty te ustala się metodą prób i błędów w naszym przypadku odpowiednie koszty to 1 do 2,5 (tzn. błędne przypisanie do klasy Nie obiektu w rzeczywistości należącego do klasy Tak, powoduje dwuipółkrotnie większą karę niż przeciwny błąd). 73
Koszty błędów ustalamy po wciśnięciu przycisku Użytkownika w polu Koszty błędnych klasyfikacji i kliknięciu przycisku na karcie Klasyfikacja. Na ekranie pojawi się okno, w którym wpisujemy koszty błędnych klasyfikacji. Na karcie Więcej określamy ustawienia poszukiwania modelu. Pozostawimy domyślną liczbę predyktorów losowanych dla każdego podziału równą 8. Natomiast zmienimy Minimalną liczność i Minimalną liczność potomka na 5 i 2. W literaturze można spotkać różne sugestie odnoszące się do ustawień tych parametrów. W zadaniach klasyfikacyjnych zaleca się, żeby liczba losowanych predyktorów była równa pierwiastkowi z liczby zmiennych objaśniających w zbiorze danych, a minimalna liczność węzła powinna być 1 ([1]). Dobrze jest wykonać tu kilka eksperymentów i znaleźć najlepszą wartość dla naszego zadania. Dane podzielimy na próbę ucząca i testową według wartości zmiennej Próba. 74
` Po kliknięciu przycisku OK w oknie Ustawienia losowego lasu rozpocznie się tworzenie modelu. Program domyślnie tworzy 100 drzew i kończy proces uczenia. Na poniższym rysunku widzimy, jak zmieniał się błąd w próbie uczącej i testowej. Wydaje się, że warto rozbudować model o kolejne 100 drzew wystarczy w tym celu kliknąć przycisk Więcej drzew w oknie Wyniki losowego lasu. Dobroć modelu możemy ocenić za pomocą macierzy pomyłek (ang. confusion matrix) w próbie testowej. Obserwowana Klasa przewid. Nie Klasa przewid. Tak Łącznie w wierszu 803 93 896 Procent z kolumny 95.37% 49.47% Nie Procent z wiersza 89.62% 10.38% Procent z ogółu 77.96% 9.03% 86.99% 39 95 134 Procent z kolumny 4.63% 50.53% Tak Procent z wiersza 29.10% 70.90% Procent z ogółu 3.79% 9.22% 13.01% Ogół grup 842 188 1030 Procent łącznie 81.75% 18.25% Jak widać, model ma zadowalającą trafność. Frakcja błędów liczona ogółem wynosi około 13%. Spośród wszystkich wypadków z poważnymi obrażeniami (obserwowana klasa Tak), model wychwycił około 71%. Jednocześnie w grupie wypadków wskazanych przez model 75
jako prowadzące do obrażeń w około 51% przypadków faktycznie takie obrażenia wystąpiły: jest to ponad 3 razy więcej niż przy czysto losowym wyborze. Innym sposobem oceny trafności i użyteczności modelu jest wykres przyrostu (ang. lift chart). Pokazuje on, o ile częściej w grupie wskazanej przez model występuje klasa Tak, w porównaniu z cała zbiorowością, w zależności od stopnia pewności modelu. Na poniższym wykresie widać, że przyrost dla percentyla 10 wynosi prawie 4,4 (co oznacza, że w grupie przypadków, dla których wyznaczone z modelu prawdopodobieństwo przynależności do klasy Tak należy do górnych 10%, mamy o 4,4 razy większą gęstość przypadków rzeczywiście należących do klasy Tak, niż w całym zbiorze). Ponadto krzywa przyrostu łagodnie spada w dół, tak jak powinno to być dla dobrego modelu. Używając zwykłego algorytmu C&RT przy takich samych kosztach błędnych klasyfikacji i ustawieniach domyślnych STATISTICA, uzyskujemy model, który ma frakcję błędów w próbie testowej wynoszącą około 22%, a maksymalny przyrost dla klasy Tak równy 3,8. Literatura 1. Hastie, T., Tibshirani R., Friedman J., 2009, The Elements of Statistical Learning, Springer-Verlag. 2. Breiman, L. (2001), Random forests, Machine Learning 45: 5 32. 3. Breiman, L., Cutler, A., Random Forests, http://www.stat.berkeley.edu/~breiman/ RandomForests. 4. Nisbet, R., Elder, J., Miner, G. (2009), Statistical Analysis and Data Mining Applications, Elsevier. 5. Zastosowania statystyki i data mining, (2006), StatSoft Polska. 76