Ważenie najnowszych danych w modelu Losowy las

14

Trenuję model klasyfikacyjny z Random Forest, aby rozróżnić 6 kategorii. Moje dane transakcyjne zawierają około 60 000 obserwacji i 35 zmiennych. Oto przykład, jak to w przybliżeniu wygląda.

 _________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay  |
|-------|----------------|-------|-------|--------|
|111    | 2013-04-01     | 12    | US    | group1 |
|222    | 2013-04-12     | 6     | PNG   | group1 |
|333    | 2013-05-05     | 30    | DE    | group2 |
|444    | 2013-05-10     | 78    | US    | group3 |
|555    | 2013-06-15     | 15    | BR    | group1 |
|666    | 2013-06-15     | 237   | FR    | group6 |

Po utworzeniu modelu chciałbym ocenić obserwacje z ostatnich kilku tygodni. Ponieważ nastąpiły zmiany w systemie, nowsze obserwacje będą bardziej przypominały środowisko obecnych obserwacji, które chciałbym przewidzieć. Dlatego chcę utworzyć zmienną wagi, aby Losowy Las przywiązywał większą wagę do ostatnich obserwacji.

Czy ktoś wie, czy pakiet randomForest w R jest w stanie obsłużyć wagi na obserwację?

Czy możesz również zasugerować, jaka jest dobra metoda tworzenia zmiennej wagi? Na przykład, ponieważ moje dane pochodzą z 2013 r., Pomyślałem, że mogę wziąć liczbę miesięcy od daty jako wagę. Czy ktoś widzi problem z tą metodą?

Z góry bardzo dziękuję!

Nikolay Nenov
źródło
Możesz rozważyć opublikowanie pytania dotyczącego przepełnienia stosu. Pomogą ci bardziej w kwestiach związanych z implementacją. Ta strona koncentruje się bardziej na teorii.
Alex Williams
Prawdopodobnie nie piszę wystarczająco jasno, ale moje pytania nie dotyczą kwestii związanych z implementacją. Na przykład w części, w której pytam o utworzenie zmiennej wagi, nie zamierzam pytać, jakie polecenie w R może mi w tym pomóc. Po prostu zastanawiałem się, czy przez to naruszyłbym którekolwiek z założeń losowego lasu.
Nikolay Nenov
1
Odpowiedź brzmi: nie, wierzę. Możesz przypisywać wagi różnym grupom, jak wyjaśniłem w mojej odpowiedzi poniżej. Rozumiem, że nie interesuje Cię to, ale jest to podobny pomysł. Możesz spróbować użyć duplikatów obserwacji, jak sugeruję.
Alex Williams

Odpowiedzi:

5

Zrobi to rangerpakiet w R ( pdf ), który jest stosunkowo nowy. Implementacja losowych lasów przez leśniczego ma case.weightsargument, który przyjmuje wektor z indywidualnymi wagami obserwacji / obserwacji.

GrantRWHumphries
źródło
Schludny! Szwy jak rozwiązanie, którego szukałem. Czy masz link do szczegółów, w jaki sposób obliczane jest prawdopodobieństwo case.wagi?
Nikolay Nenov
1
Nie jestem w 100% pewien, jak obliczają prawdopodobieństwa - ale myślę, że jeśli chcesz zacząć, spójrz na ten artykuł: Malley, JD, Kruppa, J., Dasgupta, A., Malley, KG i Ziegler , A. (2012). Maszyny prawdopodobieństwa: spójne oszacowanie prawdopodobieństwa za pomocą nieparametrycznych maszyn uczenia się. Methods Inf Med 51: 74-81. dx.doi.org/10.3414/ME00-01-0052
GrantRWHumphries
7

Możesz ponownie próbkować dane, aby reprezentować nowsze punkty danych. Rf i tak obejmuje etap sampela z zastąpieniem i „zgrubnie zbalansowane tworzenie worków” dla klas niezrównoważonych wykorzystuje próbkowanie do nadreprezentacji klasy mniejszości i daje wyniki lepsze lub lepsze niż losowy las ważony klasą z mojego doświadczenia.

Możesz zmienić próbkę na poziomie konstruowania macierzy treningowej ( referencji ) zamiast podczas tworzenia worków, aby ułatwić implementację, ale w takim przypadku sugerowałbym wykonanie wielu powtórzeń.

Wewnętrznie niektóre implementacje losowego lasu, w tym scikit-learn, faktycznie używają odważników do śledzenia, ile razy każda próbka znajduje się w torbie, i powinno to być równoważne z nadpróbkowaniem na poziomie workowania i zbliżone do nadpróbkowania na poziomie szkolenia w ramach walidacji krzyżowej.

Ryan Bressler
źródło
4

Powinieneś zajrzeć do parametru „classwt”. To nie wydaje się być tym, czym jesteś bezpośrednio zainteresowany, ale może dać ci poczucie tego, co chcesz zrobić.

Zobacz tutaj: Stos wymiany pytanie nr 1

A tutaj: Stos wymiany pytania nr 2

Artykuł o ważonych losowych lasach: PDF

Podstawową ideą jest takie ważenie klas, aby rzadziej obserwowane grupy / klasyfikacje były częściej wybierane w próbkach bootstrap. Jest to pomocne w przypadku niezrównoważonych danych (gdy wcześniejsze prawdopodobieństwa różnych klas są bardzo różne).

Wydaje mi się, że chcesz zrobić coś podobnego, ale dla ostatnich wydarzeń (nie dla niektórych grup / klasyfikacji). Prostym sposobem na zrobienie tego byłoby utworzenie duplikatów obserwacji (tj. Umieszczenie w powtarzających się, identycznych wierszach) dla nowszych obserwacji. Może to jednak być potencjalnie nieefektywne. Nie znam sposobu bezpośredniego ważenia każdej obserwacji w R, ale mogłem być tego nieświadomy.

Możesz spróbować rozejrzeć się za alternatywnymi implementacjami, np. W C - w najgorszym przypadku można je dostosować przy odrobinie kodowania.

Alex Williams
źródło
1
Wielkie dzięki za linki, Alex. Artykuł podaje dobre przykłady przypadków, w których chciałbyś rozważyć swoje klasyfikatory. Obawiam się, że to nie działa, ponieważ nie można użyć parametru „classwt” do niczego innego niż ważenie klasyfikatorów - tzn. Potrzebujesz jednej wagi na klasę, w przeciwnym razie randomForest zwróci błąd.
Nikolay Nenov
1
Tak, nie sądzę, abyś mógł bezpośrednio używać „classwt”. Chcesz jakiś parametr, taki jak „waga obserwacyjna”, ale nie sądzę, żeby istniał.
Alex Williams