Pełne ujawnienie: To zadanie domowe. Zamieściłem link do zestawu danych ( http://www.bertelsen.ca/R/logistic-regression.sav )
Moim celem jest zmaksymalizowanie prognozy osób spłacających zaległości kredytowe w tym zbiorze danych.
Każdy model, który do tej pory wymyśliłem, przewiduje> 90% domyślnych, ale <40% domyślnych, co daje ogólną skuteczność klasyfikacji ~ 80%. Zastanawiam się więc, czy między zmiennymi występują efekty interakcji? Czy w ramach regresji logistycznej oprócz testowania każdej możliwej kombinacji istnieje sposób na zidentyfikowanie potencjalnych efektów interakcji? Lub alternatywnie sposób na zwiększenie efektywności klasyfikacji osób naruszających prawo.
Utknąłem, wszelkie zalecenia byłyby pomocne w wyborze słów, kodu R lub składni SPSS.
Moje podstawowe zmienne są przedstawione na poniższym histogramie i wykresie rozrzutu (z wyjątkiem zmiennej dychotomicznej)
Opis podstawowych zmiennych:
age: Age in years
employ: Years with current employer
address: Years at current address
income: Household income in thousands
debtinc: Debt to income ratio (x100)
creddebt: Credit card debt in thousands
othdebt: Other debt in thousands
default: Previously defaulted (dichotomous, yes/no, 0/1)
ed: Level of education (No HS, HS, Some College, College, Post-grad)
Dodatkowe zmienne są tylko przekształceniami powyższego. Próbowałem także przekonwertować kilka zmiennych ciągłych na zmienne kategorialne i zaimplementować je w modelu, ale nie ma tam szczęścia.
Jeśli chcesz szybko wstawić go do R, oto on:
## R Code
df <- read.spss(file="http://www.bertelsen.ca/R/logistic-regression.sav", use.value.labels=T, to.data.frame=T)
źródło
Odpowiedzi:
W niezrównoważonych zestawach danych, takich jak ten, zwykle można poprawić wydajność klasyfikacji, odchodząc od stosowania dopasowanego prawdopodobieństwa 0,5 jako punktu odcięcia do klasyfikowania spraw do sprawców niewykonania zobowiązania i sprawców niewykonujących zobowiązania. Na przykład otrzymuję prawidłowe współczynniki klasyfikacji 0,88 i 0,58 z punktem odcięcia 0,4 dla glm ze wszystkimi interakcjami drugiego rzędu. (Co prawdopodobnie prowadzi do przeregulowania i wydaje się mieć pewne problemy z rangą, ale to inna historia.)
Kod:
częściowa wydajność:
źródło
Nie jestem ekspertem od regresji logistycznej, ale czy nie jest to tylko problem niezrównoważonych danych? Prawdopodobnie masz znacznie więcej osób, które nie wykonują domyślnie, niż domyślnie, co może zmienić przewidywanie, by lepiej sobie radzić z większą klasą. Spróbuj wykopać niektórych użytkowników, którzy nie wywiązują się ze zobowiązań, i zobacz, co się stanie.
źródło
W regresji logistycznej, bardzo wypaczone rozkłady zmiennych wynikowych (w przypadku znacznie większej liczby nie-zdarzeń dla zdarzeń lub odwrotnie), punkt odcięcia lub wyzwalacz prawdopodobieństwa muszą zostać dostosowane, ale nie będzie to miało większego wpływu na ogólną klasyfikację efektownie. To zawsze pozostanie mniej więcej takie samo, ale obecnie nie doceniasz zdarzeń, ponieważ prawdopodobieństwo „szansy” w takim zbiorze danych zawsze zwiększa prawdopodobieństwo zaklasyfikowania do zdarzeń niebędących zdarzeniami. Należy to dostosować. W rzeczywistości w takiej sytuacji nierzadko obserwuje się spadek ogólnej wydajności klasyfikacji, ponieważ wcześniej była ona zawyżona przez błędne obliczenia z powodu przypadku.
Pomyśl o tym w ten sposób, jeśli masz wydarzenie, w którym 90% tego nie robi, a 10% to robi, to jeśli umieścisz wszystkich w grupie „nie rób tego”, automatycznie otrzymujesz 90% racji, i że było nawet bez próby, po prostu czysty przypadek, napompowany skośnością jego dystrybucji.
Kwestia interakcji nie ma związku z tym wypaczaniem i powinna być napędzana teorią. Najprawdopodobniej zawsze poprawisz klasyfikację, dodając dodatkowe warunki, w tym po prostu dodając interakcje, ale robisz to, często przerabiając model. Następnie musisz wrócić i móc to zinterpretować.
Matt P Data Analyst, University of Illinois Urbana Champaign
źródło
Możesz po prostu spróbować dołączyć wszystkie efekty interakcji. Następnie można użyć regresji logistycznej z regulacją L1 / L2, aby zminimalizować nadmierne dopasowanie i skorzystać z wszelkich przydatnych funkcji. Naprawdę podoba mi się pakiet glmnet Hastie / Tibshirani (http://cran.r-project.org/web/packages/glmnet/index.html).
źródło
Wiem, że twoje pytanie dotyczy regresji logistycznej i ponieważ jest to zadanie domowe, więc twoje podejście może być ograniczone. Jeśli jednak interesują Cię interakcje i dokładność klasyfikacji, może być interesujące użycie czegoś takiego jak KOSZYK do modelowania tego.
Oto kod R do zrobienia podstawowego drzewa. Tutaj ustawiłem rpart na całą ramkę danych. Być może nie jest to najlepsze podejście bez wcześniejszej wiedzy i metody krzyżowej walidacji:
Nie jestem pewien od razu, jak stworzyć tabelę klasyfikacji. Nie powinno być zbyt trudne z przewidywanych wartości z obiektu modelu i oryginalnych wartości. Czy ktoś ma tu jakieś wskazówki?
źródło
predict
metoda prognozowania,table(originalClasses,predictedClasses)
do konstrukcji tabeli. Próbowałem RF (zwykle ma dokładność jak w przypadku zbyt mocnego CART, ale nie ma overfit) i wynik nie był dużo lepszy niżglm
.