Что это такое, откуда это взялось, почему это плохо и как с этим бороться.

Вступление

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

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

Итак, для начала я хотел поговорить о мультиколлинеарности. В частности, я собираюсь рассказать о следующем:

  1. Что такое мультиколлинеарность
  2. Что вызывает мультиколлинеарность
  3. Почему это плохо для моделей линейной регрессии
  4. Как можно обнаружить и устранить мультиколлинеарность
  5. Как обнаружить мультиколлинеарность в Python

С учетом сказанного, давайте погрузимся в это!

Что такое мультиколлинеарность?

Мультиколлинеарность (или коллинеарность) возникает, когда одна независимая переменная в регрессионной модели линейно коррелирует с другой независимой переменной.

Примером этого является использование «Возраст» и «Количество колец» в регрессионной модели для прогнозирования веса дерева.

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

Что вызывает мультиколлинеарность?

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

ПРИМЕЧАНИЕ. Не беспокойтесь, если вы пропустите эту часть, если вы сосредоточитесь на том, почему мультиколлинеарность плохая и как ее устранить. :)

Обратите внимание, что коэффициенты регрессии относятся к «наклону» каждой переменной - в уравнении y = B0 + B1x + B2x2, B1 и B2 являются коэффициентами регрессии. Помните, что цель модели линейной регрессии - найти лучшие коэффициенты регрессии, которые представляют данные.

Чтобы найти оптимальные коэффициенты регрессии, мы хотим найти для них значения, которые минимизируют квадратичную ошибку. После небольших вычислений вы можете найти оптимальные параметры (B1, B2,…, Bp) с помощью следующего уравнения:

где B_hat - вектор, который включает все индивидуальные коэффициенты регрессии, а X - матрица плана, состоящая из прогнозных переменных.

Обратите внимание, что в уравнении мы предполагаем, что (XTX) обратимый, чтобы оценить B_hat.

Если столбцы X линейно зависят друг от друга (т.е.если присутствует мультиколлинеарность), XTX не обратим, и это приводит к нескольким последствиям, которые вы увидите в следующем разделе.

Проблемы, возникающие из-за мультиколлинеарности

Напомним, что XTX должен быть обратимым, чтобы правильно оценивать коэффициенты регрессии для модели множественной регрессии. Если XTX необратим, это означает, что столбцы X линейно зависят друг от друга и присутствует мультиколлинеарность.

В конечном итоге наличие мультиколлинеарности приводит к нескольким проблемам:

  1. Подбираемые коэффициенты регрессии (бета-шляпа) существенно изменятся, если одно из значений одной из переменных x изменится лишь немного.
  2. Дисперсия оцененных коэффициентов будет завышена, а это значит, что будет сложно обнаружить статистическую значимость. Более того, возможно, что F-статистика значима, а индивидуальная t-статистика - нет.
  3. В конечном итоге мультиколлинеарность снижает точность прогнозов. Для данной модели основное предположение состоит в том, что отношения между прогнозирующими переменными, а также их отношения с целевой переменной будут такими же. Однако при наличии мультиколлинеарности это менее вероятно.

Как обнаружить и устранить мультиколлинеарность

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

VIF измеряет соотношение между дисперсией для данного коэффициента регрессии только с этой переменной в модели и дисперсией для данного коэффициента регрессии со всеми переменными в модели.

VIF, равный 1 (минимально возможный VIF), означает, что тестируемый предсказатель не коррелирован с другими предсказателями. VIF, равный 1 (минимально возможный VIF), означает, что тестируемый предсказатель не коррелирован с другими предсказателями.

Чем выше VIF,

  • Чем больше коррелирован один предиктор с другими предикторами
  • Чем больше раздувается стандартная ошибка
  • Чем больше доверительный интервал
  • Меньше вероятность того, что коэффициент будет оценен как статистически значимый.

Допустимый VIF, если он меньше максимального значения модели 10 и 1/1 R² (см. Ниже):

Как реализовать VIF в Python

В качестве примера я воспользуюсь набором данных Kaggle по ценам на жилье в Калифорнии.

Сначала я импортировал все соответствующие библиотеки и данные:

import pandas as pd
import numpy as np
from statsmodels.stats.outliers_influence import variance_inflation_factor

Затем для простоты я выбрал только 3 столбца в качестве своих функций (переменные X) и удалил все нули и бесконечные значения:

df = pd.read_csv('housing.csv')
df = df[~df.isin([np.nan, np.inf, -np.inf]).any(1)]
X_variables = df[['total_rooms','total_bedrooms','median_income']]

Наконец, я вычислил VIF для своих переменных X:

vif_data = pd.DataFrame()
vif_data["feature"] = X_variables.columns
vif_data["VIF"] = [variance_inflation_factor(X_variables.values, i) for i in range(len(X_variables.columns))]

Вот так и получаем окончательный результат:

Интуитивно это имеет смысл. Общее количество комнат и спален намного выше порога VIF, что указывает на высокую коллинеарность между этими переменными. Мы можем интуитивно понять это, потому что существует сильная корреляция между количеством комнат и количеством спален (чем больше спален, тем больше комнат и наоборот).

Спасибо за прочтение!

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

Не знаете, что читать дальше? Я подобрала для вас другую статью:



и еще один!



Теренс Шин