Логистическая регрессия (так же известная как логистическая регрессия или модель логита) была разработана статистиком Дэвидом Коксом в 1958 году и может быть регрессионной моделью, в которой переменная ответа Y является категоричной. Логистическая регрессия позволяет оценить вероятность категорического ответа, поддерживаемого одной или несколькими переменными-предсказателями (X). Это позволяет упомянуть, что наличие предиктора увеличивает (или уменьшает) вероятность данного исхода на выбранный процент. Данное учебное пособие охватывает случай, когда Y является двоичным – то есть, где может потребоваться только два значения, “0” и “1”, которые представляют такие исходы, как “пасс/не пасс”, “выиграть/закрыть”, “живой/мертвый” или “здоровый/больной”. Случаи, когда переменная имеет две категории результатов, можно также проанализировать с помощью многочленной логистической регрессии, или, если множественные категории упорядочены, то в обычной логистической регрессии. Тем не менее, дискриминантный анализ стал хорошо зарекомендовавшим себя методом для классификации по нескольким категориям, поэтому в следующем учебном пособии мы специализируемся на этой методике для таких случаев.

Требования к тиражированию

В этом руководстве в первую очередь используются данные по умолчанию, предоставляемые пакетом ISLR. Часто это симулированный набор данных, содержащий информацию о десяти тысячах клиентов, например, является ли клиент по умолчанию, может ли это студент, типичный баланс, который несет клиент, и, следовательно, доход клиента. Мы также используем пару пакетов, которые обеспечивают манипуляцию данными, визуализацию, функции моделирования трубопроводов, а также функции приведения модели в порядок.

# Пакеты

библиотека(tidyverse) # манипуляция данными и визуализация данных

библиотека(modelr) # обеспечивает простые функции конвейерного моделирования

библиотека(метла) # помогает привести в порядок результаты моделирования

# Загрузка данных

(по умолчанию <- as_tibble(ISLR::Default))

# # A tibble: 10,000 × 4 #

## по умолчанию доход студента балансирует на балансе

## <fctr> <fctr> <dbl> <dbl>

## № 1 № 729.5265 44361.625

## 2 Нет Да 817 1804 12106 135

## № 3 № 1073.5492 31767.139

## № 4 № 529.2506 35704.494

## № 5 № 785.6559 38463.496

## 6 Нет Да 919 5885 7491 559

## № 7 № 825.5133 24905.227

## 8 No Yes 808.6675 17600.451

## № 9 № 1161.0579 37468.529

## 10 No No 0.0000 29275.268

## … еще 9 990 рядов.

Почему логистическая регрессия

Линейная регрессия не подходит в случае качественного ответа. Почему нет? Предположим, что мы пытаемся предсказать медицинское состояние пациента в рамках скорой помощи на основании представления о ее симптомах. в этом упрощенном примере возможны три диагноза: инсульт, передозировка наркотиков и конвульсии. Мы могли бы рассмотреть кодировку этих значений как количественную переменную ответа, Y, следующим образом:

Y=⎧⎨⎩1, если инсульт; 2, если передозировка наркотиков; 3, если эпилептический припадок.

Используя это кодирование, метод наименьших квадратов мог бы не соответствовать прямолинейной регрессионной модели для предсказания Y по идее группы предикторов

К сожалению, эта кодировка подразумевает упорядочение результатов, помещение передозировки препарата в промежуток между инсультом и конвульсиями, и настаивание на том, что разница между инсультом и передозировкой препарата заключается в том, что разница между передозировкой препарата и конвульсиями одинакова. На практике нет особых причин, по которым это должно быть так. в качестве примера, можно было бы выбрать не менее разумное кодирование,

Y=⎧⎨⎩1, если эпилептический припадок; 2, если инсульт; 3, если передозировка наркотиков.

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

Более актуально для наших данных, если мы попытаемся классифицировать клиента как дефолтера с высокой или низкой степенью риска, поддерживающего их баланс, мы можем использовать линейную регрессию; однако, левый рисунок ниже иллюстрирует, как прямолинейная регрессия будет предсказывать вероятность дефолта. К сожалению, для балансов на грани нуля мы предсказываем отрицательную вероятность дефолта; если бы мы предсказывали для очень больших балансов, мы могли бы получить значения больше 1. Эти прогнозы неразумны, так как на самом деле вероятность дефолта, независимо от баланса карты, должна упасть между 0 и 1.

Чтобы избежать этой проблемы, мы должны моделировать p(X), используя функцию, которая обеспечивает выходы в диапазоне от 0 до 1 для всех значений X. Многие функции соответствуют этому описанию. В логистической регрессии мы используем логистическую функцию, которая определена в Eq. 1 и проиллюстрирована на правом рисунке выше.

p(X)=eβ0+β1X1+eβ0+β1X

Подготовка наших данных

Как и в учебном пособии по регрессии, мы разделим наши данные на обучающие (60%) и тестовые (40%) наборы данных, чтобы оценить, насколько хорошо наша модель работает на недискретированном наборе данных.

set.seed(123)

образец <- образец(c(TRUE, FALSE), nrow(default), replace = T, prob = c(0.6,0.4))

поезд <- по умолчанию[образец, ]

тест <- по умолчанию[!пример, ]

Простая логистическая регрессия

Мы подберем логистическую регрессионную модель, чтобы предсказать вероятность дефолта клиента, поддерживаемого типичным балансом, который несет клиент. Функция glm подходит для обобщенных линейных моделей – категории моделей, имеющих логистическую регрессию. Синтаксис функции glm аналогичен lm, за исключением того, что для запуска логистической регрессии вместо другого вида обобщённой линейной модели мы должны передать семейство аргументов = биномиальный, чтобы сообщить R.

model1 <- glm(по умолчанию ~ баланс, семейство = “биномиальный”, data = поезд)

На заднем плане глм, использует максимальную вероятность, чтобы соответствовать модели. основная интуиция, лежащая в основе использования максимальной вероятности, чтобы соответствовать логистической регрессионной модели, заключается в следующем: мы ищем оценки для

такая ожидаемая вероятность ^p(xi) по умолчанию для каждого человека, использующего эквалайзер Eq. 1, максимально приближена к наблюдаемому состоянию по умолчанию человека. Другими словами, мы пытаемся найти β0β^0 и ^β1 такие включения этих оценок в модель для p(X), приведенную в уравнении 1, дают разнообразие на границе одного для всех индивидуумов, которые выполнили дефолт, и разнообразие на грани нуля для всех индивидуумов, которые не выполнили дефолт. Эта интуиция часто формализуется с помощью математического уравнения, называемого функцией вероятности: ℓ(β0,β1)=∏i:yi=1p(xi)∏i′:y′i=0(1-p(x′i)).

Для максимизации этой вероятностной функции выбраны оценки β0β^0 и ^β1. Максимальные шансы – это действительно общий подход, который не подходит для многих нелинейных моделей, которые мы рассмотрим в следующих учебниках. Какими результатами может быть S-образная кривая вероятности, проиллюстрированная ниже (обратите внимание, что для построения линии соответствия логистической регрессии мы хотели бы преобразовать нашу переменную ответа в двоичную закодированную переменную [0,1]).

по умолчанию %>%

mutate(prob = ifelse(default == “Да”, 1, 0)) %>%

ggplot(aes(баланс, зонд)) +

geom_point(alpha = .15) +

geom_smooth(метод = “glm”, метод.args = list(family = “binomial”))) +

ggtitle(“Подгонка логистической регрессионной модели”) +

xlab(“Баланс”) +

ylab(“Вероятность дефолта”)

По аналогии с прямолинейной регрессией мы оценим модель, используя сводку или взгляд. Обратите внимание, что формат вывода коэффициентов аналогичен тому, что мы видели в линейной регрессии, однако, хорошие детали в нижней части сводки различаются. Рассмотрим это позже, но обратим внимание, что вы просто видите слово отклонение. Отклонение может быть равнозначно сумме вычислений квадратов в прямолинейной регрессии и является мерой недостатка подгонки информации при модели логистической регрессии. Нулевое отклонение представляет собой разность между моделью с перехватом (что означает “нет предикторов”) и насыщенной моделью (модель с теоретически идеальной подгонкой). Цель состоит в том, чтобы отклонение модели (отмеченное как Остаточное отклонение) было меньше; меньшие значения указывают на лучшую подгонку. в этом отношении нулевая модель обеспечивает исходную точку, на которой можно сопоставить модели с предикторами. summary(model1)

##

## Звони:

## glm(формула = по умолчанию ~ баланс, семейство = “биномиальный”, data = поезд)

##

## Остатки девианса:

## Мин 1Q Медиана 3Q Макс.

## -2.2905 -0.1395 -0.0528 -0.0189 3.3346

##

## Коэффициенты:

## Оцените std. Ошибка z значения Pr(>|z|)

## (Перехват) -1.101e+01 4.887e-01 -22.52 <2e-16 ***

## баланс 5.669e-03 2.949e-04 19.22 <2e-16 ***

## —

## Подпись. Коды: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ ‘ 1

##

## (Параметр дисперсии для биномиального семейства принимается как 1)

##

## Нулевое отклонение: 1723.03 на 6046 градусах свободы.

## Остаточное отклонение: 908,69 на 6045 степени свободы.

## AIC: 912.69

##

## Количество итераций Фишера: 8

Оценка коэффициентов

В нижеследующей таблице приведены оценки коэффициентов и соответствующая информация, полученная в результате подгонки логистической регрессионной модели для прогнозирования вероятности дефолта = Да с использованием баланса. Следует иметь в виду, что оценки коэффициентов по логистической регрессии характеризуют связь между предиктором и переменной отклика по шкале лог-объектов (подробнее см. гл. 3 ISLR1). Таким образом, мы видим, что ^β1=0.0057β^1=0.0057; это означает, что рост баланса связан с ростом в пределах вероятности дефолта. Если быть точным, то одноразовое увеличение баланса связано с ростом в пределах лог-пакета вероятности дефолта на 0.0057 единиц.

аккуратный(модель1)

## оценка срока std.error statistik p.value

## 1 (перехват) -11.006277528 0.488739437 -22.51972 2.660162e-112

## 2 баланс 0.005668817 0.000294946 19.21985 2.525157e-82

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

exp(coef(model1))

## (Перехват) баланс

## 1.659718e-05 1.005685e+00

Многие аспекты вывода коэффициентов практически аналогичны рассмотренным в выводе прямолинейной регрессии. например, мы измерим высоконадежные интервалы и точность оценок коэффициентов путем вычисления их стандартных ошибок. в качестве примера, β1β^1 имеет р-значение < 2e-16 имеет р-значение < 2e-16, что указывает на статистически значимую связь между переносимым равновесием и, следовательно, вероятностью дефолта. мы также будем использовать качественные ошибки для вывода доверительных интервалов, как мы делали это в учебном пособии по прямолинейной регрессии:

confint(model1)

## 2.5 % 97.5 %

## (перехват) -12.007610373 -10.089360652

## баланс 0.005111835 0.006269411

Делать прогнозы

После того, как коэффициенты оценены, легко вычислить вероятность дефолта для любого заданного остатка на карте. Математически, используя оценки коэффициентов из нашей модели, мы предсказываем, что вероятность дефолта для частного лица с балансом 1000$ меньше, чем 0.5%.

^p(X)=e^β0+^β1X1+e^β0+^β1X=e-11.0063+0.0057×10001+e-11.0063+0.0057×1000=0.004785(3)

Вероятность дефолта в R можно предсказать с помощью функции предикта (привязать к типу = “ответ”). Здесь мы сравниваем вероятность дефолта по поддерживаемым балансам $1000 и $2000. Как вы увидите, так как баланс движется от 1000 до 2000 долларов, вероятность дефолта значительно возрастает, с 0,5% до 58%!

Также можно использовать качественные предикторы с логистической регрессионной моделью. В качестве примера подойдет модель, использующая научную переменную.

Коэффициент, связанный с учеником = Да, является положительным, и поэтому связанное с ним р-значение является статистически значимым. Это означает, что ученики, как правило, имеют более высокие вероятности по умолчанию, чем не ученики. Фактически, эта модель предполагает, что студент имеет почти в два раза больше шансов по умолчанию, чем не студент. Однако в следующем разделе мы увидим, почему.

Множественная логистическая регрессия

Мы также можем расширить нашу модель, как показано в уравнении 1, чтобы предсказать двоичный ответ с помощью множественных предикторов, где X=(X1,…,Xp)X=(X1,…,Xp) являются p предикторами:

p(X)=eβ0+β1X+⋯+βpXp1+eβ0+β1X+⋯+βpXp X

Давайте вспахаем вперед и подгоним модель, которая предсказывает вероятность того, что по умолчанию поддерживаются баланс, доход (в тысячах долларов) и переменные статуса студента. здесь есть удивительный результат. p-значения, связанные с балансом и student=Yes статус очень малы, что указывает на то, что каждая из этих переменных связана с вероятностью того, что по умолчанию поддерживается баланс и доход (в тысячах долларов). Однако коэффициент для переменной ученика отрицательный, что указывает на то, что студенты имеют меньше шансов по умолчанию, чем не студенты. Напротив, коэффициент для переменной “ученик” в модели 2, где мы предсказывали вероятность дефолта только на основе статуса студента, указывал на то, что студенты имеют большую вероятность дефолта. Что дает?

model3 <- glm(по умолчанию ~ баланс + доход + студент, семья = “биномиальный”, данные = поезд)

опрятный(модель3)

## оценка срока std.error statistik p.value

## 1 (Перехват) -1.090704e+01 6.480739e-01 -16.8299277 1.472817e-63

## 2 баланс 5.907134e-03 3.102425e-04 19.0403764 7.895817e-81

## 3 доходы -5.012701e-06 1.078617e-05 -0.4647343 6.421217e-01

## 4 studentsYes -8.094789e-01 3.133150e-01 -2.5835947 9.777661e-03

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

Этот простой пример иллюстрирует риски и тонкости, связанные с выполнением регрессий, включающих только один предиктор, когда другие предикторы также могут быть релевантными. Результаты, полученные с помощью одного предиктора, также могут сильно отличаться от результатов, полученных с помощью нескольких предикторов, особенно при наличии корреляции между предикторами. Это явление понимается как сбивающее с толку.

В случае множественных переменных предикторов иногда хочется узнать, какая из переменных наиболее влиятельна при предсказании переменной ответа (Y). Сделаем это с помощью varImp из caret-пакета. Здесь мы видим, что равновесие – это то, что самое жизненно важное с избыточным запасом, в то время как статус студента – это меньшая сумма, за которой следует доход (который в любом случае был признан незначительным (p = .64)).

caret::varImp(model3)

## В целом

## баланс 19.0403764

## доход 0.4647343

## студент Да 2.5835947

Как и прежде, с помощью этой модели мы можем легко делать прогнозы. Например, студент с остатком на кредитной карте в размере 1500 долларов и доходом в 40 000 долларов имеет предполагаемую вероятность дефолта

^p(X)=e-10.907+0.00591×1,500-0.00001×40-0.809×11+e-10.907+0.00591×1,500-0.00001×40-0.809×1=0.054

Неучащийся с одинаковым балансом и доходом имеет оценочную вероятность дефолта в размере

^p(X)=e-10.907+0.00591×1 500-0.00001×40-0.809×01+e-10.907+0.00591×1 500-0.00001×40-0.809×0=0.114p^(X)=e-10.907+0.00591×1 500-0.00001×40-0.809×01+e-10.907+0.00591×1 500-0.00001×40-0.809×0=0.114

new.df <- tibble(balance = 1500, income = 40, students = c(“Yes”, “No”))).

предикт(model3, new.df, тип = “ответ”)

## 1 2

## 0.05437124 0.11440288