Объяснение коэффициента корреляции - выбор признаков

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

См. ниже Пример переменных:

Top 10 Absolute Correlations:
  Variable 1      Variable 2        Correlation Value
    pdays           pmonths           1.000000
    emp.var.rate    euribor3m         0.970955
    euribor3m       nr.employed       0.942545
    emp.var.rate    nr.employed       0.899818
    previous        pastEmail         0.798017
    emp.var.rate    cons.price.idx    0.763827
    cons.price.idx  euribor3m         0.670844
    contact         cons.price.idx    0.585899
    previous        nr.employed       0.504471
    cons.price.idx  nr.employed       0.490632

тепловая карта корреляционной матрицы независимых переменных":

Ниже на рисунке показана тепловая карта корреляционной матрицы независимых переменных

Вопросы:

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

Пример: значение корреляции между pdays и pmonths составляет 1,000000. Какую переменную нужно удалить из модели? Days или pmonths? Как определяется переменная?

2) Каков диапазон пороговых значений корреляции, при котором переменная отбрасывается? Например: >0,65 или >0,90 и т. д.

3) Не могли бы вы интерпретировать приведенную выше тепловую карту и дать свое объяснение переменных, которые необходимо удалить, и причину того же?


person Hell Boy    schedule 15.06.2020    source источник


Ответы (3)


Вы можете попробовать использовать другие критерии выбора для выбора между каждой парой высококоррелированных признаков. Например, вы можете использовать прирост информации (IG), который измеряет, сколько информации дает функция о классе (т. е. ее снижение энтропии [TAL14], [SIL07]). Как только вы обнаружите пару высококоррелированных функций (например, как вы упомянули pdays и pmonths), вы можете измерить IG каждой переменной и оставить ту, у которой самый высокий показатель. ИГ. Тем не менее, есть и другие критерии отбора, которые вы также можете применить вместо IG (например, максимизация взаимной информации [BHS15]).

Для порога вы можете выбрать желаемое значение (это зависит от вашей проблемы). Тем не менее, для безопасной игры я бы выбрал высокое значение (например, 0,95), хотя вы также можете рассмотреть эти значения около 0,94 или 0,9. Кроме того, вы всегда можете установить высокое значение, а затем поиграть с понижением этого значения, чтобы проверить производительность вашей модели.

[TAL14] Джилян Тан, Салем Алеляни и Хуан Лю. Выбор признаков для классификации: обзор, страницы 37–64. КПР Пресс, 1 2014.

[SIL07] Иван Сайс, Иньяки Инза и Педро Ларраньяга. Обзор методов выбора признаков в биоинформатике. биоинформатика, 23(19):2507–2517, 2007.

[BHS15] Мохамед Беннасар, Юлия Хикс, Россица Сечи. Выбор функций с использованием совместной максимизации взаимной информации. Экспертные системы с приложениями, 42(22): 8520-8532, 2015.

person kevin    schedule 18.06.2020
comment
Сохранение порогового значения. Мы должны рассматривать переменные как в положительном, так и в отрицательном диапазоне? пример: мы сохраняем порог равным 0,95, поэтому мы должны учитывать переменные, значения которых в >0,90 и >-0,90 (т.е. -0,91, -0,92 и т. д.) - person Hell Boy; 19.06.2020
comment
Отрицательная корреляция означает, что когда одна из двух переменных увеличивается, другая уменьшается (investopedia.com/ask/answers/041015/). Если вы должны рассмотреть их или удалить их, это будет зависеть от проблемы. - person kevin; 19.06.2020
comment
Например, однажды я использовал ранговый коэффициент корреляции Спирмена для сравнения двух векторов рекомендаций. В этом случае высокая отрицательная корреляция нежелательна (это означало бы, что он рекомендует элементы в обратном порядке, что не было бы желаемым результатом). В вашей задаче вы могли увидеть влияние в модели удаления переменной, отрицательно коррелирующей с другой, и решить, что делать. Однако я не могу увидеть отрицательно сильно коррелированные переменные на вашем изображении (самые низкие значения составляют около -0,4). - person kevin; 19.06.2020
comment
Спасибо, Кевин. Не могли бы вы поделиться кодом Python для расчета IG для независимых переменных по сравнению с переменной класса (зависимой переменной)? - person Hell Boy; 20.06.2020
comment
Я использовал функцию information.gain в пакете R FSelector (взгляните на эту ссылку rdrr.io/cran/FSelector/man/information.gain.html). Однако я проверял пакеты, реализующие его в python, и я видел пакет получения информации (взгляните на эту ссылку pypi.org/project/info-gain). - person kevin; 21.06.2020
comment
В пакете python вам необходимо вычислить прирост информации для каждой функции отдельно (в пакете FSelector вы можете указать кадр данных, и он вычислит его для каждой функции). Я провел небольшой тест с набором данных радужной оболочки, и хотя полученные значения прироста информации не совсем одинаковы, порядок важности в обоих пакетах одинаков. - person kevin; 21.06.2020
comment
Кевин, я пробовал классификатор ниже в библиотеке sklearn ----------------------------------------- - from sklearn.feature_selection importmutual_info_classifmutual_info_classif(marketing_train_Outliersremoved_afterKNN['Зависимая переменная'].values.reshape((7414, 1)), marketing_train_Outliersremoved_afterKNN['Targetvariable'].values.reshape((7414, 1)), Discrete_features='auto ', n_neighbors=3, copy=True, random_state=None ) ------------------------------------ -- *используется изменение формы для изменения кадра данных в массив. Но если я запускаю этот код, каждый раз он дает другое выходное значение - person Hell Boy; 21.06.2020
comment
Я не знаю, как работает Mutual_info_classif, но согласно документации в scikit-learn.org/stable/modules/generated/ добавляет небольшой шум к непрерывным переменным, чтобы удалить повторяющиеся значения. Этот шум контролируется параметром random_state. Присвойте этому параметру тот же номер для получения воспроизводимых результатов (одинаковые значения в разных исполнениях). Не могли бы вы также попробовать пакет получения информации? - person kevin; 21.06.2020

Здесь я перечисляю некоторые аспекты, которые не охвачены другими ответами.

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

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

  3. если вы используете линейные модели, такие как лассо - они автоматически делают этот выбор!

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

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

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

person user702846    schedule 25.06.2020

Вы можете сделать это легко, используя sklearn.

from sklearn.feature_selection import VarianceThreshold

X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
selector = VarianceThreshold(threshold=0.2)
X = selector.fit_transform(X)
print(X)

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

person dauren slambekov    schedule 18.06.2020