Отношение шансов glmnet очень низкое или приближается к бесконечности

Я применяю логистическую регрессию для создания модели прогнозирования банкротства в R. Мои данные состоят из финансовых коэффициентов многих компаний, которые я классифицировал как «плохие», имеющие значение 0, и «хорошие», имеющие значение 1.

Однако некоторые переменные-предикторы оказались идеально разделенными, что привело к следующему предупреждающему сообщению:

Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 

Чтобы решить эту проблему, я использовал форму штрафной регрессии, а именно пакет brglm в R.

В результате была получена модель с пятью предикторными переменными (обозначенными как X1–X5):

final_brglm <- brglm(Good1_Bad0 ~ X1 + X2 + X3 + X4 + X5, data = train_data)

Модель имеет очень высокую точность и основана на следующем принципе:

Для оценки "Y" (с коэффициентами B1 - B5)

Y <- intercept + B1*X2 + B2*X2 + B3*X3 + B4*X4 + B5*X5

и прогнозируемая вероятность "пред"

pred <- (exp(Y)/(1+exp(Y))

При Y > 0 компания «хорошая», а при Y ‹ 1 компания «плохая».

Однако результирующие вероятности предсказания либо очень близки к 1, либо очень близки к 0; Y либо очень большой (maxY = 13389261), либо очень маленький (minY = -4719827). Между ними немногое, что затрудняет построение оценки на основе модели для прогнозирования вероятности дефолта/банкротства.

На это также указывает график: вероятностный прогноз — показатель Y

Я относительно новичок в R, и я не знаю, что с этим делать. Значит ли это, что проблема разделения еще не решена? Я также читал кое-что о нормализации переменных, чего я не делал, поскольку все предикторы являются финансовыми коэффициентами (продажи FE / активы).


person WvO    schedule 17.01.2018    source источник
comment
Это не вопрос программирования, это вопрос статистики. Он должен быть на stats.stackexchange.   -  person Gregor Thomas    schedule 17.01.2018
comment
Да, вы должны перенести его на stats.stackexchange.com. В любом случае, поскольку вы выполняете логистическое преобразование на счете Y, чтобы получить pred <- (exp(Y)/(1+exp(Y)), это приведет вас к одной из двух крайних точек.   -  person smci    schedule 17.01.2018
comment
Также проголосовали за переход на сайт статистики. Но вы должны добавить дополнительные детали. Насколько велики ваши данные, сколько обанкротившихся фирм (поскольку это редко встречается в наборах данных), все ли предикторы финансовые коэффициенты? (ps вы можете посмотреть пакет logistf)   -  person user20650    schedule 17.01.2018
comment
в более общем плане, возможно, представляет интерес cran.r-project.org/web/ пакеты/bgeva/index.html .   -  person user20650    schedule 17.01.2018
comment
Я бы посоветовал вам подумать о вещах (и о том, как то, что вы видели, имеет смысл на основе ваших данных). У вас есть функции, которые точно предсказывают результат, которые не работают в стандартной структуре GLM, поэтому вы наказываете параметры, которые немного уменьшают их до 0. По сути, идеальные оценки параметров составляют +/- бесконечность, и вы применяете штраф. чтобы сделать их конечными (но они все равно будут очень-очень большими), поэтому, когда вы возводите их в степень, чтобы получить отношения шансов, вы получаете почти 0 и почти бесконечность вместо ровно 0 и бесконечность. (Используя почти бесконечность довольно свободно, конечно).   -  person Gregor Thomas    schedule 17.01.2018
comment
Также подумайте о своей цели и своих данных. Если у вас действительно есть несколько переменных, которые (по крайней мере, исторически) идеально предсказывают банкротство, и вы действительно знаете их заранее, то наказание за них оказывает себе медвежью услугу. Ваша модель должна состоять из некоторых правил (if любая из этих идеально предсказывающих переменных показывает банкротство, then предсказывает банкротство) и использовать логистическую регрессию для всего, что осталось. Вы также можете рассмотреть древовидную модель, такую ​​как случайный лес, которая будет эффективно использовать эту информацию.   -  person Gregor Thomas    schedule 17.01.2018
comment
(@Грегор: это просто дерево решений в сочетании с LR). Если у вас действительно есть несколько переменных, которые (по крайней мере, исторически) точно предсказывают банкротство, то уже используйте метод на основе дерева, такой как Random Forest.   -  person smci    schedule 17.01.2018
comment
@smci точно моя точка зрения.   -  person Gregor Thomas    schedule 17.01.2018
comment
@Грегор прав, но я говорю, что нет необходимости вручную строить дерево решений из операторов if-else. Просто используйте DT/Random Forest, например. ограничение max_depth. Затем используйте LR для записей, которые не могут быть идеально классифицированы. (Думаю, мы реализуем это как классификацию по трем классам: 0, 1 и 2: 'USE_LR')   -  person smci    schedule 17.01.2018
comment
Подобная причина, учитывая, что график данных известен как квазиразделение. Выполните поиск. Наверное найдёт на SO и уж точно на SE   -  person IRTFM    schedule 18.01.2018