Коли LASSO відбирає корельовані предиктори?


13

Я використовую пакет "lars" в R із наступним кодом:

> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
            y          x1           x2           x3          x4          x5
y  1.00000000  0.74678534  0.743536093  0.210757777  0.59218321  0.03943133
x1 0.74678534  1.00000000  0.892113559  0.015302566 -0.03040464  0.04952222
x2 0.74353609  0.89211356  1.000000000 -0.003146131 -0.02172854  0.05703270
x3 0.21075778  0.01530257 -0.003146131  1.000000000  0.05437726  0.01449142
x4 0.59218321 -0.03040464 -0.021728535  0.054377256  1.00000000 -0.02166716
x5 0.03943133  0.04952222  0.057032700  0.014491422 -0.02166716  1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 :    Variable 1     added
LARS Step 2 :    Variable 4     added
LARS Step 3 :    Variable 3     added
LARS Step 4 :    Variable 2     added
LARS Step 5 :    Variable 5     added
Computing residuals, RSS etc .....

У мене є набір даних із 5 безперервними змінними, і я намагаюся пристосувати модель до однієї (залежної) змінної y. Два мої прогнози сильно співвідносяться один з одним (x1, x2).

Як ви бачите у наведеному вище прикладі, функція lars з опцією 'step step' спочатку вибирає змінну, яка найбільш корелює з y. Наступна змінна, яка вводиться в модель, - це найбільш корельована із залишками. Дійсно, це x4:

> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
    x2     x3     x4     x5 
0.1163 0.2997 0.9246 0.0037  

Тепер, якщо я виконую варіант "ласо":

> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 :    Variable 1     added
LARS Step 2 :    Variable 2     added
LARS Step 3 :    Variable 4     added
LARS Step 4 :    Variable 3     added
LARS Step 5 :    Variable 5     added

Він додає обидві корельованих змінних до моделі на перших двох кроках. Це протилежне тому, що я читав у кількох працях. Більшість із них кажуть, що якщо є група змінних, серед яких кореляції дуже високі, то "ласо" має тенденцію вибирати лише одну змінну з групи навмання.

Чи може хтось навести приклад такої поведінки? Або поясніть, чому мої змінні x1, x2 додаються до моделі одна за одною (разом)?


Це найменший кут регресії, який дає пояснення кроків ласо.
Майкл Р. Черник

@MichaelChernick: Якщо ви подивитесь на Rвиклик, який здійснює ОП, і відповідний вихід, який він надає, ви побачите, що він справді використовує ласо. Як я впевнений, ви знаєте, невеликий підбір алгоритму lars дає шлях регуляризації ласо.
кардинал

Моя «здогадка» полягає в тому, що, оскільки x2 включає 4 одиниці x1, x1 і x2 в поєднанні насправді мають найбільшу дисперсію (9 одиниць). Якщо знизити коефіцієнт x2 до 2, ви повинні бачити, що x4 вибрано перед x1 та x2.

Чи можете ви надати кілька посилань на підтвердження цієї "випадковості"? Дякую.
ziyuang

Я думаю, що ви можете знайти свою відповідь на цьому документі: arxiv.org/pdf/1204.1605.pdf
TPArrow

Відповіді:


15

Проблема колінеарності значно подолана!

Томасе, ти сформулював загальну точку зору, що якщо передбачувачі співвідносяться, навіть найкраща техніка вибору змінних просто вибирає один навмання з групи. На щастя, це спосіб недооцінки регресії здатності розкрити правду! Якщо ви отримали правильний тип пояснювальних змінних (екзогенних), множинна регресія обіцяє знайти ефект кожної змінної, утримуючи інші постійними. Тепер, якщо змінні ідеально співвідносяться, то це буквально неможливо. Якщо змінні співвідносяться, це може бути складніше, але з розміром типового набору даних сьогодні це не так важче.

Колінеарність - це проблема з низькою інформацією. Погляньте на цю пародію на колінеарність Art Goldberger у блозі Дейва Гілза . Те, як ми говоримо про колінеарність, звучить нерозумно, якщо застосовувати його до середнього, а не до часткового коефіцієнта регресії.

Ще не переконаний? Пора якийсь код.

set.seed(34234)

N <- 1000
x1 <- rnorm(N)
x2 <- 2*x1 + .7 * rnorm(N)
cor(x1, x2) # correlation is .94
plot(x2 ~ x1)

Я створив сильно корельовані змінні x1 та x2, але ви можете побачити на графіку нижче, що коли x1 близький до -1, ми все ще бачимо змінність у x2. введіть тут опис зображення

Тепер прийшов час додати "правду":

y <- .5 * x1 - .7 * x2 + rnorm(N) # Data Generating Process

Чи може звичайна регресія досягти успіху в умовах могутньої проблеми колінеарності?

summary(lm(y ~ x1 + x2))

О так, це може:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.0005334  0.0312637  -0.017    0.986    
x1           0.6376689  0.0927472   6.875 1.09e-11 ***
x2          -0.7530805  0.0444443 -16.944  < 2e-16 ***

Зараз я не говорив про LASSO, на якому було зосереджено ваше запитання. Але дозвольте запитати у вас це. Якщо регресія старої школи з усуненням назад не обдуриться колінеарністю, чому б ви думали, що це буде найсучаснішим LASSO?


До останнього моменту, хоча OLS має ротаційний еквівалент, я не очікував би того самого властивості від LASSO через норму . Незалежно від того, чи є LASSO фантазійним чи ні, мабуть, не має значення. L1
steveo'america

Ідея полягала в тому, що простіші концепції можна використовувати для пояснення описаного явища ОП, і що ці принципи принципово не змінюються додаванням терміна регуляризації, керованого даними.
Бен Огорек

7

Відповідь Бена надихнула мене піти на крок далі на той шлях, який він провів, що буде, якщо «правда», так, буде в інших ситуаціях.

У початковому прикладі y залежить від двох сильно корельованих змінних x1 та x2. Якщо припустити, є ще одна змінна, x3, скажімо

x3 = c (1: N) / 250 # N визначено раніше, N = 1000, x3 знаходиться в аналогічній шкалі, як x1, і шкала x3 впливає на результати лінійної регресії нижче.

"Істина" y тепер визначається наступним чином

y = .5 * x1 - .7 * x3 + rnorm (N) # Процес генерування даних

Що буде з регресією?

резюме (lm (y ~ x1 + x2))

Існує сильний ефект колінеарності. Стандартна помилка x2 занадто велика. Однак лінійна регресія ідентифікує x2 як незначну змінну.

     Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.39164    0.04172 -33.354  < 2e-16 ***
x1           0.65329    0.12550   5.205 2.35e-07 ***
x2          -0.07878    0.05848  -1.347    0.178 

vif (lm (y ~ x1 + x2))

x1       x2 
9.167429 9.167429 

Що з іншим випадком регресії?

резюме (lm (y ~ x1 + x2 + x3))

Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.02100    0.06573   0.319    0.749    
x1           0.55398    0.09880   5.607 2.67e-08 ***
x2          -0.02966    0.04604  -0.644    0.520    
x3          -0.70562    0.02845 -24.805  < 2e-16 ***

Змінна x2 не є значною і рекомендується її видалити лінійною регресією.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.067865 9.067884 1.000105 

З наведених вище результатів колінеарність не є проблемою в лінійній регресії, і перевірка VIF не дуже корисна.

Давайте розглянемо іншу ситуацію. x3 = c (1: N) # N визначено раніше, N = 1000, x3 не в тій же шкалі, що і x1.

"Істина" у визначається так само, як вище

y = .5 * x1 - .7 * x3 + rnorm (N) # Процес генерування даних

Що буде з регресією?

резюме (lm (y ~ x1 + x2))

Існує сильний ефект колінеарності. Стандартні помилки x1, x2 занадто великі. Лінійна регресія не в змозі визначити важливу змінну x1.

   Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -350.347      6.395 -54.783   <2e-16 ***
x1            25.207     19.237   1.310    0.190    
x2           -12.212      8.963  -1.362    0.173  

vif (lm (y ~ x1 + x2))

    x1       x2 
9.167429 9.167429 

Що з іншим випадком регресії?

резюме (lm (y ~ x1 + x2 + x3))

Coefficients:
          Estimate Std. Error   t value Pr(>|t|)    
(Intercept)  0.0360104  0.0610405     0.590    0.555    
x1           0.5742955  0.0917555     6.259 5.75e-10 ***
x2          -0.0277623  0.0427585    -0.649    0.516    
x3          -0.7000676  0.0001057 -6625.170  < 2e-16 ***

Змінна x2 не є значною і рекомендується її видалити лінійною регресією.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.182507 9.184419 1.001853 

Примітка: регресія y на x1 і x3. Зауважте, що стандартна помилка x1 становить лише 0,03.

резюме (lm (y ~ x1 + x3))

Coefficients:
              Estimate Std. Error   t value Pr(>|t|)    
(Intercept) -0.1595528  0.0647908    -2.463    0.014 *  
x1           0.4871557  0.0321623    15.147   <2e-16 ***
x3          -0.6997853  0.0001121 -6240.617   <2e-16 ***

Виходячи з вищенаведених результатів, мій висновок такий

  • коли змінні предиктора знаходяться в аналогічних масштабах, колінеарність не є проблемою при лінійній регресії;
  • коли змінні предиктора не в подібних масштабах,
    • коли обидві сильно корельовані змінні знаходяться в істинній моделі, колінеарність не є проблемою;
    • коли лише одна з двох сильно корельованих змінних знаходиться в справжній моделі,
      • Якщо інші "справжні" змінні включені до лінійної регресії, лінійна регресія виявить несуттєві змінні, які корелюють зі значною змінною.
      • Якщо інші "справжні" змінні не включаються до лінійної регресії, проблема колінеарності є серйозною, що призводить до стандартної інфляції помилок.

Цікаво, хоча ці результати припускають лінійні зв’язки між предикторами / ознаками і y. Вони далеко не всебічні. Що станеться, якщо у ваших передбачувачів є міцні нелінійні зв’язки (наприклад, умови взаємодії x1 * x2, функції крокової функції / манекени (1, якщо x1> c для деякої постійної) тощо)? Якщо ви працюєте з низькими показниками співвідношення сигнал / шум, як, наприклад, у створенні функцій для алгоритмічної торгівлі, ви завжди маніпулюєте моделями для зменшення перевитрати (оскільки ваші сигнали слабкі), тому все ще існують вагомі причини для мультиколінеарності
FXQuantTrader
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.