Optymalne binowanie w odniesieniu do danej zmiennej odpowiedzi

12

Szukam optymalnej metody binowania (dyskretyzacji) zmiennej ciągłej w odniesieniu do danej zmiennej binarnej odpowiedzi (celu) i maksymalnej liczby interwałów jako parametru.

przykład: mam zestaw obserwacji ludzi ze zmiennymi „wzrost” (ciągłe cyfry) i „has_back_pains” (binarne). Chcę dyskretyzować wzrost na 3 przedziały (grupy) co najwyżej z różnym odsetkiem osób z bólami pleców, aby algorytm maksymalizował różnicę między grupami (na przykład z określonymi ograniczeniami, że każdy przedział ma co najmniej x obserwacji).

Oczywistym rozwiązaniem tego problemu byłoby użycie drzew decyzyjnych (prosty model z jedną zmienną), ale nie mogę znaleźć w R żadnej funkcji, która miałaby „parametr maksymalną liczbę rozgałęzień” - wszystkie dzielą zmienną w 2 gropus (<= x i> x). SAS górnik ma parametr „maksymalna gałąź”, ale szukam rozwiązania niekomercyjnego.

niektóre z moich zmiennych mają tylko kilka unikalnych wartości (i mogą być traktowane jako zmienne dyskretne), ale chcę je również dyskretyzować w mniejszej liczbie przedziałów.

Najbliższe rozwiązanie mojego problemu jest zaimplementowane w pakiecie smbinning w R (który opiera się na funkcji ctree z pakietu party), ale ma dwie wady: nie można ustawić liczby interwałów (można to jednak obejść, zmieniając parametr p) i nie działa, gdy wektor danych ma mniej niż 10 unikalnych wartości. W każdym razie możesz zobaczyć przykładowe dane wyjściowe (kluczowe są punkty Cutpoint i Odds):

Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec BadRate   Odds  LnOdds     WoE     IV
1   <= 272   9081     169   8912      9081        169      8912 0.1874  0.9814 0.0190 -3.9653 -0.6527 0.0596
2   <= 311   8541     246   8295     17622        415     17207 0.1762  0.9712 0.0297 -3.5181 -0.2055 0.0068
3   <= 335   2986     163   2823     20608        578     20030 0.0616  0.9454 0.0577 -2.8518  0.4608 0.0163
4  Missing  27852    1125  26727     48460       1703     46757 0.5747  0.9596 0.0421 -3.1679  0.1447 0.0129
5    Total  48460    1703  46757        NA         NA        NA 1.0000  0.9649 0.0364 -3.3126  0.0000 0.0956

Och, jestem w pełni świadomy, że binowanie powoduje utratę informacji i że istnieją lepsze metody, ale zamierzam użyć go do wizualizacji danych i potraktować te zmienne jako czynnik.

Dominix
źródło
SPSS ma polecenie Optimal Binning. Google SPSS Algorithms Optimal Binning.
ttnphns
Czy widziałeś ten post stackoverflow.com/questions/7018954/... Wspomina o zużyciu informacji o wartości, ale nie wyjaśnia, co oznacza przez IV = 1, lub nie wyjaśnia, jak ją zdobyć
adam

Odpowiedzi:

7

Czytając tę ​​książkę tutaj (Nagarajan, 2103 [1]), natknąłem się na tę cenną informację, którą bezwstydnie cytuję tutaj:

  • Korzystanie z wcześniejszej wiedzy na temat danych. Granice przedziałów są zdefiniowane dla każdej zmiennej, tak aby odpowiadały znacząco różnym scenariuszom w świecie rzeczywistym, takim jak stężenie określonego zanieczyszczenia (nieobecne, niebezpieczne, śmiertelne) lub klasy wiekowe (dziecko, dorosły, osoby starsze).

  • Korzystanie z heurystyki przed poznaniem struktury sieci. Oto niektóre przykłady: reguły Sturges, Freedman-Diaconis lub Scott (Venables i Ripley, 2002).

  • Wybierając liczbę interwałów i ich granice w celu zrównoważenia dokładności i utraty informacji (Kohavi i Sahami, 1996), ponownie jedna zmienna na raz, zanim poznana zostanie struktura sieci. Podobne podejście z uwzględnieniem par zmiennych przedstawiono w Hartemink (2001).

  • Uczenie się i dyskretyzacja iteracyjnie, dopóki nie zostaną wprowadzone żadne ulepszenia (Friedman i Goldszmidt, 1996).

Strategie te reprezentują różne kompromisy między dokładnością dyskretnej reprezentacji oryginalnych danych a wydajnością obliczeniową transformacji.

Informacje te są podane, jeśli chcesz uzasadnić metodę binowania, której chcesz użyć, a nie tylko użyć pakietu bezpośrednio.

[1]: Nagarajan R. (2013),
Bayesian Networks in R, with Applications in Systems Biology
Springer

KarthikS
źródło
4

Wypróbuj pakiet informacyjny dla R. https://cran.r-project.org/web/packages/Information/Information.pdf https://cran.r-project.org/web/packages/Information/vignettes/Information-vignette .html

Pakiet informacyjny ma funkcję obliczania WoE i IV (liczba przedziałów jest parametrem elastycznym, domyślnie 10) i jest przydatnym narzędziem do eksploracji danych, a tym samym do binowania. Wynik nie zawiera jednak kursów; i nie jest możliwe określenie zera jako oddzielnego przedziału (dla moich zadań zero jest często osobnym prawidłowym przedziałem); i byłoby miło uzyskać wynik z pakietu informacyjnego, który byłby podobny do smbinowania. Jednak powiedziano o przyjemnych, ale wciąż niedostępnych funkcjach pakietu informacyjnego, inne pakiety R dla WoE i IV (biada, klaR) nie sprawiały wrażenia tak przydatnych instrumentów jak pakiet informacyjny, w rzeczywistości ja nie udało się uruchomić ich po 2-3 próbach. W przypadku zadania dscretization / binning pakiety informacyjne i smbinning mogą ze sobą dobrze współpracować,

Do faktycznego binowania użyłem tabeli data.table zamiast funkcji cut (). Zobacz link do mojego postu poniżej, zawiera on ogólny kod na samym dole pytania początkowego: /programming/34939845/binning-variables-in-a-dataframe-with-input-bin-data- from-another-dataframe

Mam nadzieję, że to pomoże.

Aktan
źródło
@kjetil, kjetil b halvorsen, masz rację. Pakiet informacyjny ma funkcjonalność do obliczania WoE i IV (liczba przedziałów jest parametrem elastycznym, domyślnie wynosi 10) i jest przydatnym narzędziem do eksploracji danych, a tym samym do binowania. Wynik nie zawiera jednak kursów. I nie jest możliwe określenie zera jako oddzielnego przedziału (dla moich zadań zero jest często prawidłowym przedziałem sam w sobie). Inne pakiety R dla WoE i IV (biada, klaR) nie sprawiały wrażenia tak przydatnych instrumentów jak pakiet informacyjny. Tak więc pakiet informacji i smbinowania może ładnie współpracować jako połączenie.
Aktan