Лучшая классификация дефолта в логистической регрессии

12

Полное раскрытие: это домашнее задание. Я включил ссылку на набор данных ( http://www.bertelsen.ca/R/logistic-regression.sav )

Моя цель - максимально повысить прогноз неплательщиков кредитов в этом наборе данных.

Каждая модель, которую я придумала до сих пор, предсказывает> 90% неплательщиков, но <40% неплательщиков, в целом эффективность классификации составляет ~ 80%. Итак, мне интересно, есть ли эффекты взаимодействия между переменными? В рамках логистической регрессии, кроме тестирования каждой возможной комбинации, есть ли способ определить потенциальные эффекты взаимодействия? Или, альтернативно, способ повысить эффективность классификации неплательщиков.

Я застрял, любые рекомендации будут полезны при выборе слов, R-кода или синтаксиса SPSS.

Мои основные переменные описаны на следующей гистограмме и диаграмме рассеяния (за исключением дихотомической переменной)

Описание основных переменных:

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)

Дополнительные переменные являются просто преобразованиями вышеупомянутого. Я также попытался преобразовать несколько непрерывных переменных в категориальные переменные и внедрить их в модель, но не повезло.

Если вы хотите быстро вставить его в R, вот оно:

## R Code
df <- read.spss(file="http://www.bertelsen.ca/R/logistic-regression.sav", use.value.labels=T, to.data.frame=T)

альтернативный текст альтернативный текст

Брэндон Бертельсен
источник
Необработанная доля неплательщиков, по-видимому, составляет 1 случай из 4, но, похоже, у вас также есть много переменных. Вы пробовали их все, есть ли у вас какой-то набор первичных переменных, представляющих интерес?
хл
Исходные переменные находятся в начале файла. Остальные являются преобразованиями того же самого, обозначенными x_ (где x = log, ln, inv, sqrt). Я попробовал смесь из них. Но я немного недоволен тем, как интерпретировать или создавать остаточные графики, где предиктор равен 0,1
Брэндон Бертельсен,
Что касается представляющих интерес переменных, я попробовал все их основные цвета и ряд различных комбинаций преобразованных переменных, а также смешанные модели, включающие эффекты взаимодействия. Тем не менее, ничто не превышает 81,7% общей эффективности.
Брэндон Бертельсен

Ответы:

8

В несбалансированных наборах данных, таких как этот, вы обычно можете улучшить производительность классификации, отказавшись от использования установленной вероятности .5 в качестве вашей точки отсечения для классификации случаев по умолчанию и по умолчанию. Например, я получаю правильные показатели классификации 0,88 и 0,58 с точкой отсечения 0,4 для глм со всеми взаимодействиями 2-го порядка. (Что, вероятно, приводит к переоснащению и, похоже, имеет некоторые проблемы с рангами, но это другая история.)

Код:

m <- glm(default ~ (age + employ + address + income + debtinc + 
                    creddebt + othdebt + ed)^2,
   family=binomial(), data=df)
p <- predict(m, newdata=df, type="response")

getMisclass <- function(cutoff, p, labels){
   pred <- factor(1*(p > cutoff), labels=c("No Default", "Default")) 
   t <- table(pred, labels)
   cat("cutoff ", cutoff, ":\n")
   print(t)
   cat("correct    :", round(sum(t[c(1,4)])/sum(t), 2),"\n")
   cat("correct No :", round(t[1]/sum(t[,1]), 2),"\n")
   cat("correct Yes:", round(t[4]/sum(t[,2]), 2),"\n\n")
   invisible(t)
}
cutoffs <- seq(.1,.9,by=.1)
sapply(cutoffs, getMisclass, p=p, labels=df$default)

частичный вывод:

cutoff  0.3 :
            labels
pred           No  Yes
  No Default 3004  352
  Default     740  903
correct    : 0.78 
correct No : 0.8 
correct Yes: 0.72 

cutoff  0.4 :
            labels
pred           No  Yes
  No Default 3278  532
  Default     466  723
correct    : 0.8 
correct No : 0.88 
correct Yes: 0.58 

cutoff  0.5 :
        labels
pred           No  Yes
  No Default 3493  685
  Default     251  570
correct    : 0.81 
correct No : 0.93 
correct Yes: 0.45 

cutoff  0.6 :
            labels
pred           No  Yes
  No Default 3606  824
  Default     138  431
correct    : 0.81 
correct No : 0.96 
correct Yes: 0.34 
фабианцы
источник
Спасибо за попытку, я тоже играл с порогом, и это немного повысило классификацию.
Брэндон Бертельсен
1
Хотя он лучше предсказывал неплательщиков.
Брэндон Бертельсен
4

Я не эксперт по логистической регрессии, но разве это не проблема несбалансированных данных? Вероятно, у вас гораздо больше неплательщиков, чем неплательщиков, что может изменить прогноз, чтобы лучше справляться с большим классом. Попробуйте выкинуть несколько неплательщиков и посмотреть, что получится.


источник
Я попробовал это, не представил существенного увеличения или снижения общей эффективности (эффективность была в том, насколько хорошо он предсказывал неплательщиков / неплательщиков в отсутствие ложноположительных, ложноположительных)
Брэндон Бертельсен,
1
@ Брэндон Я попробовал немного других идей, и это, кажется, не помогает. Это говорит о том, что этот набор достаточно сложен, чтобы это произошло (возможно, по умолчанию это обусловлено непредсказуемыми случайными факторами).
@mbq, спасибо, что нашли время! Очень признателен.
Брэндон Бертельсен
1
Лично я думаю, что это живые данные, которые мой профессор получает за модель на одной из своих консультационных должностей ... но это совсем другая проблема
Брэндон Бертельсен,
1
Решение проблемы в анализе данных никогда не должно быть «выбрасывать действительные точки данных» - вы можете попытаться использовать сбалансированные обучающие наборы данных, чтобы избежать этих эффектов, но вы все равно должны оценить прогнозы на всех данных (то есть все проверки набора).
Фабианс
4

В логистической регрессии, сильно искаженных распределениях исходных переменных (где гораздо больше не событий к событиям или наоборот), необходимо скорректировать точку отсечения или триггер вероятности, но это не окажет большого влияния на общую классификацию efficieny. Это всегда будет оставаться примерно одинаковым, но вы в настоящее время недооцениваете события, так как «случайная» вероятность в таком наборе данных всегда повышает вероятность того, что вы классифицируетесь как не-события. Это должно быть скорректировано для. На самом деле, в такой ситуации нередко наблюдается снижение общей эффективности классификации, поскольку ранее она была раздута вследствие просчета из-за случайности.

Подумайте об этом так: если у вас есть событие, когда 90% этого не делают, а 10% делают это, то, если вы поместите всех в группу «не делайте этого», вы автоматически получите 90% прав, и это был даже не пытаясь, просто чистый шанс, раздутый от асимметрии его распределения.

Проблема взаимодействий не связана с этим перекосом и должна основываться на теории. Скорее всего, вы всегда будете улучшать классификацию, добавляя дополнительные термины, в том числе просто добавляя взаимодействия, но вы делаете это, часто перегружая модель. Затем вы должны вернуться и быть в состоянии интерпретировать это.

Аналитик Matt P Data, Университет Иллинойса, Урбана Шампейн


источник
2

Вы можете просто попытаться включить все эффекты взаимодействия. Затем вы можете использовать L1 / L2-регуляризованную логистическую регрессию, чтобы минимизировать перенастройку и воспользоваться любыми полезными функциями. Мне очень нравится пакет glmnet Хасти / Тибширани (http://cran.r-project.org/web/packages/glmnet/index.html).

Ians
источник
Единственная проблема в том, что я должен быть в состоянии воспроизвести это с выводом SPSS. :( Я все еще собираюсь попробовать это все же!
Брэндон Бертельсен
Попробовал, похоже, не могу заставить функциюgnast.glmnet () работать. Есть ли какая-то магия, которая должна происходить, когда вы устанавливаете newx?
Брэндон Бертельсен
2

Я знаю, что ваш вопрос касается логистической регрессии и поскольку это домашнее задание, поэтому ваш подход может быть ограничен. Однако, если вы заинтересованы во взаимодействиях и точности классификации, может быть интересно использовать что-то вроде CART для моделирования этого.

Вот некоторый код R для создания основного дерева. Я установил rpart на фрейме данных enire здесь. Возможно, не самый лучший подход без предварительных знаний и метода перекрестной проверки:

library(foreign)
df <- read.spss(file="http://www.bertelsen.ca/R/logistic-regression.sav", use.value.labels=T, to.data.frame=T) 
library(rpart) 
fit<-rpart(default~.,method="anova",data=df)
 pfit<- prune(fit, cp=   fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])

# plot the pruned tree 
 plot(pfit, uniform=TRUE, 
   main="Pruned Classification Tree for Loan Default")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)

Я не уверен сразу, как составить классификационную таблицу. Это не должно быть слишком сложно исходя из прогнозируемых значений объекта модели и исходных значений. У кого-нибудь есть какие-нибудь советы здесь?

Brett
источник
Деревья классификации и регрессии? Это на самом деле вторая часть задания. После того, как я максимизировал классификацию, я должен классифицировать на основе вероятностных децилей.
Брэндон Бертельсен
На самом деле, кто-то помог мне с созданием таблицы классификации в этом связанном вопросе: stats.stackexchange.com/questions/4832/… Спасибо за пример с R, очень признателен, я нашел аналогичную инструкцию на сайте quick-r. Хотя для этой цели я вынужден применять CHAID в SPSS.
Брэндон Бертельсен
predictметод прогнозирования, table(originalClasses,predictedClasses)для построения таблицы. Я пробовал RF (обычно он имеет точность, как в переоборудованной CART, но не переоснащение), и результат был не намного лучше, чем glm.