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

Полные методы выбора функций

  1. Статистическое тестирование и анализ
  2. Корреляционный анализ
  3. Уменьшение размера
  4. Управляется моделью

Корреляция и причинность

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

Например, x и y — это две переменные и их точечная диаграмма, как показано ниже.

Корреляция не подразумевает причинно-следственную связь

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

Определение коэффициента корреляции

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

Корреляция Пирсона

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

Ранжно-порядковая корреляция Спирмена

rgX, rgY — порядковый номер для X и Y.

Номер ранга может быть

  1. Порядковое категориальное кодирование переменной
  2. Ведро или дискретная непрерывная переменная в порядковый номер

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

Корреляция рангов Кендалла

Ранк Кендалла является обобщением корреляции Спирмена, он больше подходит для измерения монотонной связи двух переменных.

Тест значимости

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

Интерпретация коэффициентов

Все вышеперечисленные коэффициенты корреляции имеют диапазон от -1 до +1, а значение коэффициента указывает на степень корреляции

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

Пример Python

В примере вычисляются значения корреляции между столбцами TAX и RAD в Данные Boston House.

import numpy as np
import pandas as pd  
from sklearn.datasets import load_boston
from scipy.stats import pearsonr
from scipy.stats import spearmanr
from scipy.stats import kendalltau
%matplotlib inline
boston_dataset = load_boston()
boston = pd.DataFrame(
    boston_dataset.data, 
    columns=boston_dataset.feature_names)
coef_pearsonr, p_pearsonr = pearsonr(boston['TAX'], boston['RAD'])
coef_spearman, p_spearman = spearmanr(boston['TAX'], boston['RAD'])
coef_Kendall, p_Kendall = kendalltau(boston['TAX'], boston['RAD'])
corr_data = pd.DataFrame(columns=['Correlation','Pearson','Spearman','Kendall'])
corr_data['Correlation'] = ['Coefficient','P-Value']
corr_data['Pearson'] = [coef_pearsonr, p_pearsonr]
corr_data['Spearman'] = [coef_spearman, p_spearman]
corr_data['Kendall'] = [coef_Kendall, p_Kendall]
corr_data.set_index(['Correlation'])

Мультиколлинеарность и регрессионный анализ

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

В процессе регрессии высокая корреляция между независимыми переменными будет увеличивать Стандартную ошибку коэффициента (SE), потому что

  1. Коррелированные переменные не являются независимыми
  2. Систематическая ошибка выборки в одной отдельной переменной повлияет на другие коррелированные переменные
  3. Это влияние друг на друга приводит к большей систематической ошибке выборки для всех коррелирующих переменных.

Из-за возрастающего коэффициента стандартной ошибки

  1. Коэффициент t-статистика и p-значение станут ненадежными, поэтому мы не уверены, что можем интерпретировать прогнозный вклад для каждой отдельной переменной через ее коэффициент.
  2. Регрессионная модель будет чувствительна к обучающим данным, разные обучающие данные могут генерировать регрессионную модель с большими разными коэффициентами.

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

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

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

import numpy as np
import matplotlib.pyplot as plt 
import pandas as pd  
import seaborn as sns 
from sklearn.datasets import load_boston
%matplotlib inline
boston_dataset = load_boston()
boston = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names)
correlation_matrix = boston.corr().round(2)
plt.figure(figsize = (16,6))
sns.heatmap(data=correlation_matrix, annot=True)

Факторы инфляции дисперсии (VIF) —VIF количественно определяет серьезность мультиколлинеарности для независимых переменных, он может обнаруживать корреляцию между более чем двумя переменными. Процесс ниже

Рассмотрим следующую линейную модель с k независимыми переменными.

Для каждой независимой переменной Xi коэффициенты инфляции дисперсии VIF равны

  1. Постройте модель МНК (линейная регрессия методом наименьших квадратов) Xi = OLS( Xj i), которые используют Xi в качестве целевого значения и все другие независимые переменные Xji в качестве входных значений
  2. Рассчитайте модель OLS R-Square Rᵢ², а коэффициент VIF для переменной Xi равен

Общее правило интерпретации значения VIF таково:

1 = Не коррелирует
Между 1 и 5 = Умеренно коррелирует
Больше 5 = Высокая корреляция

from statsmodels.stats.outliers_influence import variance_inflation_factor
vif_data = pd.DataFrame() 
vif_data["Feature"] = boston_dataset.feature_names
vif_data["VIF"] = [variance_inflation_factor(boston.values, i) 
                   for i in range(len(boston.columns))]
vif_data.sort_values(by=['VIF'], 
                     ascending = False).reset_index(drop=True)

Результат указывает на сильную корреляцию (VIF5) в функциях.

Средства для мультиколлинеарности

Основываясь на требованиях и функциях режима, мы можем выбрать

  1. Ничего не делать, если режим удовлетворил производительностью и нас не волнует интерпретация модели
  2. Выберите одну и отбросьте другие переменные с высокой корреляцией
  3. Преобразование переменной, например, объединение всех сильно коррелированных переменных в одну переменную.

Исследовательский факторный анализ

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

Математическая модель исследовательского факторного анализа (EFA)

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

Здесь

  1. X( x, x, ⋅⋅⋅ , xₚ) — наблюдаемый тренировочный набор с pпризнаками
  2. F( f₁,f, ⋅⋅⋅ , fₖ ) — это общие факторы для набора данных X( x, x, ⋅⋅⋅ , xₚ) и kp,каждая fᵢ независима, fᵢ ~N(0,1 )и Cov(F) = Iₖ
  3. B (β₁, β₂, ⋅⋅⋅ , βₚ) условия стохастической ошибки, βᵢ для i-го признака, каждый βᵢ является независимым и βᵢ ~N(0, σᵢ²)
  4. A ( p×k) — коэффициент матрица загрузки, αᵢⱼ – вес фактора j для функции i , чем больше абсолютное значение αᵢⱼ, тем выше фактор влияния j на функцию я

Анализ переменных (функций)

Для любой переменной функции xᵢ в модели рассчитайте ее дисперсию.

Вар(xᵢ)

= αᵢ₁² Var(f₁) + αᵢ₂² Var(f₂) + ⋅⋅⋅ + αᵢₖ² Var(fₖ) + Var(βᵢ)

= Σj αᵢⱼ² + σᵢ² (j = 1,2,⋅⋅⋅,k)

Если σᵢ² равно нулю или очень мало, то факторная нагрузка αᵢⱼ может полностью объяснить дисперсию переменной xᵢ, поэтому скрытая Комбинация факторов действительна для представления переменной xᵢ. В ОДВ Σj αᵢⱼ² называется общностью.

Факторный анализ

На основе матрицы факторной нагрузки A(αᵢⱼ)

Фактор i дисперсия нагрузки gᵢ² = Σj αⱼᵢ² (j=1,2 ,⋅⋅⋅,р)

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

Дисперсия всех факторов равна Σi gᵢ² (i=1,2,⋅⋅⋅,k)

Дисперсия всех условий ошибки равна Σi σᵢ² (j=1,2,⋅⋅⋅,p)

Процент дисперсии, объясненный факторами, указанными ниже, и если этот процент близок к 1, то это доказывает достоверность факторов

Дисперсия всех факторов / (Дисперсия всех факторов + Дисперсия всех условий ошибки) =

Σi gᵢ² (i=1,2,⋅⋅⋅,k) / ( Σi gᵢ² (i=1,2,⋅⋅⋅,k) + Σi σᵢ² (j=1,2,⋅⋅⋅,p) )

Извлечение факторов

Извлечение факторов должно разрешить приведенную выше математическую модель EFA и вычислить матрицу факторной нагрузки A. Существует два популярных способа извлечения факторов: один — анализ основных компонентов (АПК), другой — общий факторный анализ.

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

Общий факторный анализ разбивает дисперсию исходного набора данных на общую дисперсию и уникальную дисперсию (σᵢ²), а факторная нагрузка объясняет только общую дисперсию. На практике общий факторный анализ используется, когда нам нужно найти скрытые факторы, лежащие в основе взаимосвязей между переменными обучающей выборки.

Фактор вращения

Факторное вращение является движущей матрицей факторной нагрузки (также известной как оси) для поворота вокруг начала координат, когда оси поворачиваются, факторная нагрузка и дисперсия соответственно изменяются.

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

Пример Python для исследовательского факторного анализа

Пример данных взят из Kaggle Опрос удовлетворенности пассажиров авиакомпаний США. В опросе есть 14 вопросов о качестве обслуживания, и пассажиры могут набрать от 0 до 5 баллов, поэтому мы оставляем только эти 14 столбцов и пытаемся выявить скрытые факторы под 14 вопросами.

#pip install factor_analyzer
import numpy as np
import matplotlib.pyplot as plt 
import pandas as pd  
import seaborn as sns 
from factor_analyzer import FactorAnalyzer
%matplotlib inline
satis_df= pd.read_csv("satisfaction_v2.csv")
satis_df.drop(['id',
         'satisfaction_v2',
         'Gender',
         'Customer Type',
         'Type of Travel',
         'Class', 
         'Age',
         'Flight Distance', 
         'Departure Delay in Minutes', 
         'Arrival Delay in Minutes'
        ], axis=1, inplace=True)
correlation_matrix = satis_df.corr().round(2)
plt.figure(figsize = (16,8))
sns.heatmap(data=correlation_matrix, annot=True)

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

'''
Bartlett’s Test is to determine there are correlations in source 
data variables
'''
from factor_analyzer.factor_analyzer import calculate_bartlett_sphericity
chi_square_value,p_value=calculate_bartlett_sphericity(survey_df)
chi_square_value, p_value
# (785755.7298083812, 0.0)
# p_value = 0.0 indicate no correlation assumption is rejected
'''
Kaiser-Meyer-Olkin Test is to determine there are adequate data in source dataset to carry on factor analysis
'''
from factor_analyzer.factor_analyzer import calculate_kmo
kmo_all,kmo_model=calculate_kmo(survey_df)
kmo_model
# 0.7946981282043835
# kmo_model > 0.6 indicate source data is adequate

Шаг 2. Решите, сколько скрытых факторов является основным фактором вклада.

fa = FactorAnalyzer(14, rotation=None)
fa.fit(survey_df)
ev, v = fa.get_eigenvalues()
plt.scatter(range(1,survey_df.shape[1]+1),ev)
plt.title('Scree Plot')
plt.xlabel('Factors')
plt.ylabel('Eigenvalue')
plt.grid()
plt.show()

Обычно FA принимает только факторы, собственное значение которых >1, поэтому в нашем примере мы рассматриваем только 3 фактора.

Шаг 3. Выполнение факторного анализа

'''
rotation="varimax" becasuse we want few large and lots of close to 0 loadings
'''
pd.options.display.float_format = "{:,.3f}".format
fa = FactorAnalyzer(3, rotation="varimax")
fa.fit(survey_df)
loading_df = pd.DataFrame(data=fa.loadings_, columns=['Factor 1','Factor 2','Factor 3'])
loading_df['Feature'] = survey_df.columns
column_names = ['Feature','Factor 1','Factor 2','Factor 3']
loading_df = loading_df.reindex(columns=column_names)
loading_df

Шаг 4. Группировка объектов по коэффициенту загрузки

В нашем примере есть только 3 фактора, поэтому мы используем наибольший фактор, чтобы сгруппировать все функции в 3 группы, как показано ниже цветом.

Шаг 5. Интерпретация факторов

Основываясь на признаках группировки, мы можем абстрагироваться от влияния факторов.

Фактор 1 – технология

Услуга Wi-Fi на борту, Развлечения на борту, Онлайн-поддержка, Простота онлайн-бронирования, Онлайн-посадка

Фактор 2 – Служба

Обслуживание на борту, Обслуживание ног, Обработка багажа, Услуга регистрации, Чистота

Фактор 3 – удобство

Удобство сидения, Удобное время отправления/прибытия, Еда и напитки, Расположение выхода на посадку

Шаг 6. Факторы как характеристика для последующего моделирования

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

В нашем примере исходные 14 коррелированных функций сокращаются до 3 некоррелированных факторных функций.

fa = FactorAnalyzer(3, rotation="varimax")
factor_feature = fa.fit_transform(survey_df)
factor_feature_df = pd.DataFrame(
    data=factor_feature, 
    columns=['Technology','Service','Convenience'])
factor_feature_df

ССЫЛКА

  1. «Корреляция: значение, виды и расчет | Статистика"
  2. Все, что вам нужно знать о корреляции
  3. Корреляция (Пирсон, Спирмен и Кендалл)
  4. Мультиколлинеарность в регрессионном анализе: проблемы, обнаружение и решения
  5. Как обнаружить мультиколлинеарность и бороться с ней
  6. Введение в факторный анализ в Python
  7. "Факторный анализ"
  8. 因子分析系列博文
  9. 因子分析(Факторный анализ)
  10. "Факторный анализ"