Quand LASSO sélectionne-t-il des prédicteurs corrélés?

13

J'utilise le paquet 'lars' dans R avec le code suivant:

> 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 .....

J'ai un ensemble de données avec 5 variables continues et j'essaie d'adapter un modèle à une seule variable (dépendante) y. Deux de mes prédicteurs sont fortement corrélés entre eux (x1, x2).

Comme vous pouvez le voir dans l'exemple ci-dessus, la fonction lars avec l'option «pas à pas» choisit d'abord la variable la plus corrélée avec y. La variable suivante pour entrer dans le modèle est celle qui est la plus corrélée avec les résidus. En effet, c'est 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  

Maintenant, si je fais l'option «lasso»:

> 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

Il ajoute les deux variables corrélées au modèle au cours des deux premières étapes. C'est l'opposé de ce que j'ai lu dans plusieurs articles. La plupart disent alors que s'il existe un groupe de variables parmi lesquelles les corrélations sont très élevées, alors le «lasso» a tendance à sélectionner une seule variable du groupe au hasard.

Quelqu'un peut-il donner un exemple de ce comportement? Ou expliquez pourquoi mes variables x1, x2 sont ajoutées au modèle l'une après l'autre (ensemble)?

ThomasH_MB
la source
Il s'agit de la moindre régression angulaire qui donne une explication des étapes du lasso.
Michael R. Chernick
@MichaelChernick: Si vous regardez l' Rappel que fait l'OP et la sortie associée qu'il fournit, vous verrez qu'il utilise effectivement le lasso. Comme je suis sûr que vous le savez, un petit ajustement de l'algorithme lars donne le chemin de régularisation du lasso.
cardinal
Ma «supposition» est que, puisque x2 comprend 4 unités de x1, x1 et x2 combinés ont en fait la plus grande variance (9 unités). Si vous abaissez le coefficient de x2 à 2, vous devriez voir que x4 est sélectionné avant x1 et x2.
Pouvez-vous fournir quelques références pour la preuve de ce "hasard"? Je vous remercie.
ziyuang
Je suppose que vous pouvez trouver votre réponse sur ce document: arxiv.org/pdf/1204.1605.pdf
TPArrow

Réponses:

15

Le problème de colinéarité est bien surévalué!

Thomas, vous avez articulé un point de vue commun, à savoir que si les prédicteurs sont corrélés, même la meilleure technique de sélection de variables en choisit une au hasard dans le groupe. Heureusement, cela sous-estime la capacité de la régression à découvrir la vérité! Si vous avez le bon type de variables explicatives (exogènes), la régression multiple promet de trouver l'effet de chaque variable en maintenant les autres constantes. Maintenant, si les variables sont parfaitement corrélées, cela est littéralement impossible. Si les variables sont corrélées, cela peut être plus difficile, mais avec la taille de l'ensemble de données typique aujourd'hui, ce n'est pas beaucoup plus difficile.

La colinéarité est un problème de faible information. Jetez un œil à cette parodie de colinéarité par Art Goldberger sur le blog de Dave Giles . La façon dont nous parlons de colinéarité semblerait idiote si elle était appliquée à une moyenne au lieu d'un coefficient de régression partielle.

Toujours pas convaincu? Il est temps pour un code.

set.seed(34234)

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

J'ai créé des variables hautement corrélées x1 et x2, mais vous pouvez voir dans le graphique ci-dessous que lorsque x1 est proche de -1, nous constatons toujours une variabilité dans x2. entrez la description de l'image ici

Il est maintenant temps d'ajouter la "vérité":

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

La régression ordinaire peut-elle réussir au milieu du puissant problème de colinéarité?

summary(lm(y ~ x1 + x2))

Oh oui ça peut:

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 ***

Maintenant, je n'ai pas parlé de LASSO, sur lequel votre question portait. Mais laissez-moi vous demander ceci. Si la régression à l'ancienne avec élimination en arrière ne se laisse pas berner par la colinéarité, pourquoi pensez-vous que LASSO à la pointe de la technologie le ferait?

Ben Ogorek
la source
L1
L'idée était que des concepts plus simples pourraient être utilisés pour expliquer le phénomène décrit par OP, et que ces concepts ne sont pas fondamentalement modifiés par l'ajout d'un terme de régularisation fondé sur les données.
Ben Ogorek
7

La réponse de Ben m'a inspiré à aller un peu plus loin sur le chemin qu'il a fourni, que se passera-t-il si la "vérité", oui, se trouve dans d'autres situations.

Dans l'exemple d'origine, y dépend des deux variables hautement corrélées x1 et x2. En supposant qu'il existe une autre variable, x3, disons

x3 = c (1: N) / 250 # N est défini précédemment, N = 1000, x3 est dans l'échelle similaire à x1, et l'échelle de x3 a des effets sur les résultats de régression linéaire ci-dessous.

La "vérité" y est maintenant définie comme suit

y = .5 * x1 - .7 * x3 + rnorm (N) # Processus de génération de données

Qu'arriverait-il à la régression?

résumé (lm (y ~ x1 + x2))

Il existe un fort effet de colinéarité. L'erreur standard de x2 est trop grande. Cependant, la régression linéaire identifie x2 comme une variable non significative.

     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 

Et un autre cas de régression?

résumé (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 ***

La variable x2 n'est pas significative et il est recommandé de la supprimer par la régression linéaire.

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

x1       x2       x3 
9.067865 9.067884 1.000105 

D'après les résultats ci-dessus, la colinéarité n'est pas un problème dans la régression linéaire, et la vérification de VIF n'est pas très utile.

Regardons une autre situation. x3 = c (1: N) # N est défini précédemment, N = 1000, x3 n'est pas à la même échelle que x1.

La "vérité" y est définie comme ci-dessus

y = .5 * x1 - .7 * x3 + rnorm (N) # Processus de génération de données

Qu'arriverait-il à la régression?

résumé (lm (y ~ x1 + x2))

Il existe un fort effet de colinéarité. Les erreurs standard de x1, x2 sont trop importantes. La régression linéaire ne parvient pas à identifier la variable importante 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 

Et un autre cas de régression?

résumé (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 ***

La variable x2 n'est pas significative et il est recommandé de la supprimer par la régression linéaire.

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

x1       x2       x3 
9.182507 9.184419 1.001853 

Remarque: la régression de y sur x1 et x3. Notez que l'erreur standard de x1 n'est que de 0,03.

résumé (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 ***

Sur la base des résultats ci-dessus, ma conclusion est que

  • lorsque les variables prédictives sont aux mêmes échelles, la colinéarité n'est pas un problème de régression linéaire;
  • lorsque les variables prédictives ne sont pas dans les échelles similaires,
    • lorsque les deux variables hautement corrélées sont toutes deux dans le vrai modèle, la colinéarité n'est pas un problème;
    • lorsqu'une seule des deux variables hautement corrélées se trouve dans le vrai modèle,
      • Si les autres «vraies» variables sont incluses dans la régression linéaire, la régression linéaire identifiera les variables non significatives qui sont corrélées avec la variable significative.
      • Si les autres "vraies" variables ne sont pas incluses dans la régression linéaire, le problème de colinéarité est grave, entraînant une inflation d'erreur standard.
vtshen
la source
Intéressant, bien que ces résultats supposent des relations linéaires entre les prédicteurs / caractéristiques et y. Ils sont loin d'être exhaustifs. Que se passe-t-il s'il existe de fortes relations non linéaires dans vos prédicteurs (par exemple, termes d'interaction x1 * x2, caractéristiques de la fonction de pas / variables factices (1 si x1> c pour une constante), etc.)? Si vous travaillez avec des données à faible rapport signal / bruit, comme dans la création de fonctionnalités pour le trading algorithmique, vous avez toujours des modèles parcimonieux pour réduire le surapprentissage (car vos signaux sont faibles), donc il y a encore de bonnes raisons de traiter avec la multicolinéarité
FXQuantTrader