Szkolenie drzewa decyzyjnego względem niezrównoważonych danych


43

Jestem nowy w eksploracji danych i staram się trenować drzewo decyzyjne względem zestawu danych, który jest wysoce niezrównoważony. Mam jednak problemy ze słabą dokładnością predykcyjną.

Dane obejmują studentów studiujących kursy, a zmienną klasową jest status kursu, który ma dwie wartości - Wycofany lub Bieżący.

  • Wiek
  • Pochodzenie etniczne
  • Płeć
  • Oczywiście
    ...
  • Status kursu

W zestawie danych znajduje się o wiele więcej instancji, które są aktualne niż wycofane. Wycofane wystąpienia stanowią tylko 2% wszystkich wystąpień.

Chcę być w stanie zbudować model, który może przewidzieć prawdopodobieństwo, że dana osoba wycofa się w przyszłości. Jednak podczas testowania modelu na podstawie danych treningowych dokładność modelu jest straszna.

Miałem podobne problemy z drzewami decyzyjnymi, w których dane są zdominowane przez jedną lub dwie klasy.

Jakie podejście mogę zastosować, aby rozwiązać ten problem i zbudować dokładniejszy klasyfikator?


4
Jedną rzeczą do rozważenia jest zmiana warunków kary za różne rodzaje złej klasyfikacji. Nie mówisz, jakiego oprogramowania używasz, ale uważam, że każde dobre oprogramowanie drzewne powinno zawierać sposoby na zrobienie tego.
Peter Flom - Przywróć Monikę

Odpowiedzi:


61

Jest to interesujący i bardzo częsty problem w klasyfikacji - nie tylko w drzewach decyzyjnych, ale praktycznie we wszystkich algorytmach klasyfikacji.

Jak ustalono empirycznie, zestaw treningowy składający się z różnej liczby przedstawicieli z każdej klasy może skutkować klasyfikatorem, który jest tendencyjny do klasy większościowej. Po zastosowaniu do zestawu testowego, który jest podobnie niezrównoważony, ten klasyfikator daje optymistyczne oszacowanie dokładności. W skrajnym przypadku klasyfikator może przypisać każdy pojedynczy przypadek testowy do klasy większościowej, uzyskując w ten sposób dokładność równą proporcji przypadków testowych należących do klasy większościowej. Jest to dobrze znane zjawisko w klasyfikacji binarnej (i naturalnie rozciąga się na ustawienia wielu klas).

Jest to ważna kwestia, ponieważ niezrównoważony zestaw danych może prowadzić do zawyżonych oszacowań wydajności. To z kolei może prowadzić do fałszywych wniosków na temat znaczenia, z jakim algorytm działał lepiej niż przypadek.

Literatura na temat uczenia maszynowego na ten temat zasadniczo opracowała trzy strategie rozwiązań.

  1. Można przywrócić równowagę na planie treningowym przez undersampling dużą klasę lub przez oversampling małą klasę, aby zapobiec powstawaniu uprzedzeń w pierwszej kolejności.

  2. Alternatywnie możesz zmodyfikować koszty błędnej klasyfikacji, jak zauważono w poprzedniej odpowiedzi, ponownie, aby zapobiec stronniczości.

  3. ϕ:=12(π++π),π+π

Dokładność vs. zrównoważona dokładność

Poleciłbym rozważyć co najmniej dwa z powyższych podejść łącznie. Na przykład, możesz przelicytować swoją klasę mniejszości, aby zapobiec uzyskaniu przez twój klasyfikator uprzedzeń na korzyść klasy większościowej. Następnie, oceniając wydajność klasyfikatora, możesz zastąpić dokładność zrównoważoną dokładnością. Te dwa podejścia się uzupełniają. Zastosowane razem powinny pomóc zarówno uniknąć pierwotnego problemu, jak i uniknąć wynikających z niego fałszywych wniosków.

Z przyjemnością opublikuję dodatkowe odniesienia do literatury, jeśli zechcesz to kontynuować.


3
Broder - dzięki za szczegółowe informacje. To było naprawdę pomocne! Początkowo próbowałem użyć funkcji eksploracji danych w SQL Server, jednak zgodnie z twoją radą przestawiłem się na korzystanie z R. Użyłem algorytmu SMOTE, aby ponownie zbalansować zestaw danych i spróbowałem użyć zarówno drzew decyzyjnych, jak i SVM. DT zapewniają zrównoważoną dokładność na poziomie 81%, a jeszcze lepiej dzięki SVM. Jedno pytanie - czy powinienem przetestować model w stosunku do zestawu danych, który zawiera również dane rebalancd? A może powinien być testowany z danymi bardziej jak oryginał?
chrisb

2
Miło to słyszeć. Jeśli chodzi o twoje pytanie: nie chcesz bilansować danych testowych. Spowodowałoby to odchylenie twojej oceny wydajności, ponieważ testowałbyś niektóre przykłady dwa razy (w przypadku nadpróbkowania) lub pominąłeś niektóre przykłady z testowania (w przypadku niedopróbkowania). Podsumowując, chcesz zbilansować swój zestaw treningowy (osobno w ramach każdej zakładki cross-validation), ale następnie przetestować niezmodyfikowane (potencjalnie niezrównoważone) dane testowe.
Kay Brodersen,

Dzięki, Broder. Robi to inny obraz rzeczy. Zrównoważona dokładność spada do około 56%. Czułość spada do 17% w moim najlepszym modelu (odpowiadającym klasie, której potrzebuję, aby uzyskać lepsze prognozy). Wydaje mi się, że ma to sens, ponieważ klasa z nadpróbkowaną klasą jest tą klasą, więc te przykłady będą liczone wiele razy. Spróbuję zwiększyć równoważenie zestawu danych treningowych, aby zobaczyć, czy to robi jakąkolwiek różnicę.
chrisb

Po przetestowaniu go z różnymi proporcjami zrównoważonych danych, najlepszą zrównoważoną dokładnością, jaką mogę uzyskać, jest Ada Boost z 60%. Próbuję jednak ustalić, co jest „dobre”. Moim głównym celem jest przewidzenie studentów, którzy mogą wycofać się z kursu. Ponieważ wycofanie jest moją pozytywną klasą, staram się zmaksymalizować liczbę prawdziwych pozytywów (tj. Zwiększyć wrażliwość). Ponowne zrównoważenie danych robi to ze szkodą dla liczby fałszywych negatywów. 60% nie wydaje mi się dużo lepsza niż przypadkowa - ale nie mam podstaw do tego, co w tym przypadku jest „dobre”.
chrisb

2
@chrisb, To jest nieco (!) późny komentarz. Na stycznej możesz wypróbować regresję Cox Proportional Hazards ( cran.r-project.org/doc/contrib/Fox-Companion/... ), aby modelować przeżycie swoich uczniów. Może nie być konieczne zmniejszenie lub nadmierne próbkowanie.
Zhubarb

8

Poniższe cztery pomysły mogą pomóc rozwiązać ten problem.

  1. 2PrecisionRecallPrecision+Recall

  2. Użyj parametru „wcześniejszego” w drzewach decyzyjnych, aby poinformować algorytm o wcześniejszej częstotliwości klas w zbiorze danych, tj. Czy istnieje 1000 pozytywów w zbiorze 1000,0000 zbiorów danych prior = c(0.001, 0.999)(w R).

  3. Użyj argumentu „wagi” w funkcji klasyfikacji, której używasz, aby surowo ukarać algorytm za błędne klasyfikacje rzadkich przypadków dodatnich

  4. Użyj argumentu „koszt” w niektórych algorytmach klasyfikacyjnych - np. rpartW R -, aby zdefiniować koszty względne błędnych klasyfikacji prawdziwie pozytywnych i prawdziwie negatywnych. Oczywiście powinieneś ustawić wysoki koszt błędnej klasyfikacji rzadkiej klasy.

Nie jestem zwolennikiem nadpróbkowania, ponieważ wprowadza on zależne obserwacje do zbioru danych, co narusza założenia niezależności przyjęte zarówno w statystyce, jak i uczeniu maszynowym.


2

Odpowiedziałem w ostatnim temacie :

Wybieramy próbkę o różnych proporcjach. W powyższym przykładzie byłoby to 1000 przypadków „TAK” i na przykład 9000 przypadków „NIE”. Takie podejście daje bardziej stabilne modele. Jednak musi zostać przetestowany na prawdziwej próbce (z milionem wierszy).

Nie tylko zapewnia to bardziej stabilne podejście, ale modele są ogólnie lepsze, jeśli chodzi o środki dotyczące wzrostu.

Możesz go przeszukać jako „nadpróbkowanie statystyk”, pierwszy wynik jest całkiem niezły: http://www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf


1

Dodanie do odpowiedzi @Kay. Strategia pierwszego rozwiązania: Syntetyczne pomniejszanie nadpróbkowania ( SMOTE ) zwykle działa lepiej niż niedostateczne lub nadmierne próbkowanie z mojego doświadczenia, ponieważ myślę, że stanowi to pewien kompromis między nimi. Tworzy syntetyczne próbki klasy mniejszości przy użyciu punktów danych wykreślonych w przestrzeni predyktorów wielowymiarowych i w przybliżeniu przyjmuje punkty środkowe między sąsiednimi punktami w tej przestrzeni, aby tworzyć nowe punkty syntetyczne, a zatem równoważy obie wielkości klas. (nie jestem pewien co do punktów środkowych, szczegóły algorytmu tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.