Избегайте мультиколлинеарности с помощью взлома pd.get_dummies

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

Как справиться с мультиколлинеарностью данных?

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

  • Получение очень высоких стандартных ошибок для коэффициентов регрессии
  • Общая модель имеет значение, но ни один из коэффициентов не имеет значения
  • Значительные изменения коэффициентов при добавлении предикторов
  • Фактор высокой дисперсии инфляции (VIF) и низкая толерантность

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

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



В этой статье мы увидим, как найти мультиколлинеарность в категориальных характеристиках с помощью матрицы корреляции и удалить ее.

О данных:

Для дальнейшего анализа использовался набор данных Моделирование оттока от Kaggle. Постановка задачи представляет собой задачу двоичной классификации и имеет числовые и категориальные столбцы.

В этой статье мы будем наблюдать только коллинеарность между категориальными признаками: «География», «Пол».

Одно горячее кодирование с использованием pd.get_Dummies:

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

Pd.get_dummies горячо кодирует категориальные признаки География, Пол.

Syntax:  
pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)

Корреляционная тепловая карта:

Чтобы найти коэффициент корреляции между всеми числовыми переменными в наборе данных:

data.corr(method='pearson')
Method of correlation:
* pearson (default)
* kendall
* spearman

Из приведенной выше корреляционной матрицы ясно видно, что горячие функции, закодированные с помощью pd.get_dummies, сильно коррелированы с другими.

Correlation coefficient scale:
+1: highly correlated in positive direction
-1: highly correlated in negative direction
 0: No correlation

Чтобы избежать или удалить мультиколлинеарность в наборе данных после однократного кодирования с использованием pd.get_dummies, вы можете отбросить одну из категорий и, следовательно, удалить коллинеарность между категориальными функциями. Sklearn предоставляет эту функцию, включая drop_first = True в pd.get_dummies.

Например, если у вас есть переменная gender, вам не нужны фиктивные male и female. Если male=1, то человек - мужчина, а если male=0, то человек - женщина. При наличии сотен категорий отбрасывание первого столбца особо не влияет.

pd.get_Dummies с drop_first = True:

Тепловая карта корреляции для drop_first = True:

По одной категории из каждого категориального столбца можно избежать использования drop_first = True, и из тепловой карты корреляции ясно видно, что категориальные особенности больше не коррелированы.

Вывод:

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

Использованная литература:

[1] Pandas get_dummies: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html

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