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.
źródło
SPSS Algorithms Optimal Binning
.Odpowiedzi:
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
źródło
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.
źródło