Variance inflation factor python

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

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

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

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

Что такое корреляция в Python?

Корреляция в Python измеряет масштаб взаимозависимости двух переменных.

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

Что касается статистики, мы можем получить корреляцию с помощью Pearson Correlation. Это даст нам коэффициент корреляции и P-значение.

Давайте посмотрим на критерии корреляции:

КОЭФФИЦИЕНТ КОРРЕЛЯЦИИ ОТНОШЕНИЕ
1. Близко к +1 Сильно положительное
2. Близко к -1 Сильно негативное
3. Близко к 0 Нет отношения

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

Читайте также:  Разделить строку по пробелу php

Давайте обсудим, какие проблемы могут возникнуть из-за мультиколлинеарности.

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

Проверка мультиколлинеарности

Два метода проверки мультиколлинеарности:

  1. Построение тепловой карты для понимания корреляции.
  2. Использовать коэффициент инфляции дисперсии.

Построение тепловой карты для понимания корреляции

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

Давайте посмотрим на программу, которая показывает, как ее можно реализовать.

import matplotlib.pyplot as plt import pandas as pd import seaborn as sns # importing the data df = pd.read_csv("/content/SampleSuperstore.csv") print(df.corr()) # plotting the correlation heatmap df_plot = sns.heatmap(df.corr(), cmap="YlGnBu", annot=True) # displaying the heatmap plt.show()

тепловая карта

Использовать коэффициент инфляции дисперсии

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

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

from statsmodels.stats.outliers_influence import variance_inflation_factor from statsmodels.tools.tools import add_constant import pandas as pd df = pd.DataFrame( ) X = add_constant(df) ds=pd.Series([variance_inflation_factor(X.values, i) for i in range(X.shape[1])], index=X.columns) print(ds)

Фактор инфляции дисперсии

Различные способы решения проблемы Мультиколлинеарности

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

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

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

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

Источник

Variance Inflation Factor (VIF) Explained

Colinearity is the state where two variables are highly correlated and contain similiar information about the variance within a given dataset. To detect colinearity among variables, simply create a correlation matrix and find variables with large absolute values. In R use the corr function and in python this can by accomplished by using numpy’s corrcoef function.

Multicolinearity on the other hand is more troublesome to detect because it emerges when three or more variables, which are highly correlated, are included within a model. To make matters worst multicolinearity can emerge even when isolated pairs of variables are not colinear.

A common R function used for testing regression assumptions and specifically multicolinearity is «VIF()» and unlike many statistical concepts, its formula is straightforward:

The Variance Inflation Factor (VIF) is a measure of colinearity among predictor variables within a multiple regression. It is calculated by taking the the ratio of the variance of all a given model’s betas divide by the variane of a single beta if it were fit alone.

Steps for Implementing VIF

  1. Run a multiple regression.
  2. Calculate the VIF factors.
  3. Inspect the factors for each predictor variable, if the VIF is between 5-10, multicolinearity is likely present and you should consider dropping the variable.
#Imports import pandas as pd import numpy as np from patsy import dmatrices import statsmodels.api as sm from statsmodels.stats.outliers_influence import variance_inflation_factor df = pd.read_csv('loan.csv') df.dropna() df = df._get_numeric_data() #drop non-numeric cols df.head() 
id member_id loan_amnt funded_amnt funded_amnt_inv int_rate installment annual_inc dti delinq_2yrs . total_bal_il il_util open_rv_12m open_rv_24m max_bal_bc all_util total_rev_hi_lim inq_fi total_cu_tl inq_last_12m
0 1077501 1296599 5000.0 5000.0 4975.0 10.65 162.87 24000.0 27.65 0.0 . NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 1077430 1314167 2500.0 2500.0 2500.0 15.27 59.83 30000.0 1.00 0.0 . NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 1077175 1313524 2400.0 2400.0 2400.0 15.96 84.33 12252.0 8.72 0.0 . NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
3 1076863 1277178 10000.0 10000.0 10000.0 13.49 339.31 49200.0 20.00 0.0 . NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
4 1075358 1311748 3000.0 3000.0 3000.0 12.69 67.79 80000.0 17.94 0.0 . NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
df = df[['annual_inc','loan_amnt', 'funded_amnt','annual_inc','dti']].dropna() #subset the dataframe 

Step 1: Run a multiple regression

%%capture #gather features features = "+".join(df.columns - ["annual_inc"]) # get y and X dataframes based on this regression: y, X = dmatrices('annual_inc ~' + features, df, return_type='dataframe') 

Step 2: Calculate VIF Factors

# For each X, calculate VIF and save in dataframe vif = pd.DataFrame() vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] vif["features"] = X.columns 

Step 3: Inspect VIF Factors

As expected, the total funded amount for the loan and the amount of the loan have a high variance inflation factor because they «explain» the same variance within this dataset. We would need to discard one of these variables before moving on to model building or risk building a model with high multicolinearity.

Find an error or bug? Have a suggestion?

Everything on this site is avaliable on GitHub. Head on over and submit an issue. You can also message me directly on Twitter.

This project contains 16 pages and is available on GitHub.
Copyright © Ernest Tavares III, 2017 .

Источник

Как рассчитать VIF в Python

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

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

В этом руководстве объясняется, как рассчитать VIF в Python.

Пример: расчет VIF в Python

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

import numpy as np import pandas as pd #create dataset df = pd.DataFrame() #view dataset df rating points assists rebounds 0 90 25 5 11 1 85 20 7 8 2 82 14 7 10 3 88 16 8 6 4 94 27 5 6 5 90 20 7 9 6 76 12 6 6 7 75 15 9 10 8 87 14 9 10 9 86 19 5 7 

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

Чтобы рассчитать VIF для каждой независимой переменной в модели, мы можем использовать функцию variance_inflation_factor() из библиотеки statsmodels:

from patsy import dmatrices from statsmodels.stats.outliers_influence import variance_inflation_factor #find design matrix for linear regression model using 'rating' as response variable y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe') #calculate VIF for each explanatory variable vif = pd.DataFrame() vif['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] vif['variable'] = X.columns #view VIF for each explanatory variable vif VIF variable 0 101.258171 Intercept 1 1.763977 points 2 1.959104 assists 3 1.175030 rebounds 

Мы можем наблюдать значения VIF для каждой из объясняющих переменных:

Примечание. Игнорируйте VIF для «Перехвата» в модели, поскольку это значение не имеет значения.

Как интерпретировать значения VIF

Значение VIF начинается с 1 и не имеет верхнего предела. Общее эмпирическое правило для интерпретации VIF выглядит следующим образом:

  • Значение 1 указывает на отсутствие корреляции между данной независимой переменной и любыми другими независимыми переменными в модели.
  • Значение от 1 до 5 указывает на умеренную корреляцию между данной объясняющей переменной и другими независимыми переменными в модели, но часто она недостаточно серьезна, чтобы требовать внимания.
  • Значение больше 5 указывает на потенциально сильную корреляцию между данной независимой переменной и другими независимыми переменными в модели. В этом случае оценки коэффициентов и p-значения в выходных данных регрессии, вероятно, ненадежны.

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

Источник

Оцените статью