Dois-je ajouter une nouvelle fonction de différence (z = x1-x2) dans le modèle?
Récemment, je réfléchis à cette question: dois-je ajouter de nouvelles fonctionnalités basées sur les différences des fonctionnalités brutes?
Réglage
Supposons que j'ai 50k données et 20 fonctionnalités et que ce soit une tâche de régression. Dans la pratique de la science des données, nous ajoutons généralement de nouvelles fonctionnalités basées sur des fonctionnalités brutes. Cependant, je ne sais pas quand nous devrions ajouter une nouvelle fonctionnalité z (z = x1 - x2) dans notre modèle .
Mes travers
Voici ce que je comprends: étant donné que la fonctionnalité va être sauvegardée dans les modèles, le bon fonctionnement d'une fonctionnalité dépend à la fois de la fonctionnalité et du modèle.
Prenons la régression linéaire comme exemple:
head(mtcars)
fit1 = lm(mpg~ cyl+disp +hp +vs, data = mtcars)
summary(fit1)$adj.r.squared
data_add = cbind(mtcars,'c1' = mtcars$disp - mtcars$hp)
fit2 = lm(mpg~ cyl+disp + hp +vs + c1, data = data_add)
summary(fit2)$adj.r.squared
summary(fit2)
add_noise <- function(n){
res = NULL
for(i in 1:n){
data_add_noise = cbind(mtcars,'c1' = mtcars$disp - mtcars$hp + rnorm(nrow(mtcars),0,1))
fit3 = lm(mpg~ cyl+disp + hp +vs + c1, data = data_add_noise)
res = c(res,summary(fit3)$adj.r.squared)
}
return(mean(res))
}
add_noise(10000)
Les sorties:
> summary(fit1)$adj.r.squared
[1] 0.7359967
> summary(fit2)$adj.r.squared
[1] 0.7359967
> add_noise(10000)
[1] 0.7359121
Dans la régression linéaire, si nous mettons z = x1-x2 dans notre modèle, nous obtiendrons une matrice de conception singulière, ce qui signifie que R n'utilisera pas z pour ajuster les coefficients. En d'autres termes, la nouvelle fonctionnalité z n'augmentera pas les performances de notre modèle.
Si nous utilisons z = x1- x2 + rnorm (n = 1, moyenne = 0, sd = 1) dans notre modèle, nous diminuerons les performances de notre modèle car nous introduisons du bruit supplémentaire dans notre modèle.
Cependant, si nous utilisons les modèles lgbm / xgboost / rf, étant donné que le modèle d'arbre divise les nœuds en fonction du rapport gain / gain d'informations / impureté gini, notre nouvelle fonctionnalité z = x1 - x2 peut améliorer les performances de notre modèle.
Sommaire
La question de savoir si nous devons ajouter notre nouvelle fonction de différence (z = x1- x2) dans notre modèle dépend du modèle que nous utilisons. Je serai très reconnaissant de voir d'autres idées!
Réponses
La caractéristique déterminante d'un modèle linéaire est qu'il est linéaire. Cela signifie que le résultat$y$est modélisée comme une fonction linéaire des caractéristiques sans bruit$x_1, x_2$.
$$ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2+ \epsilon $$
Supposons que nous ajoutions une fonctionnalité silencieuse $x_3=x_1 - x_2$. Si nous regardons comment ce modèle est exprimé, il devrait être évident que ce n'est pas différent de notre modèle d'origine. $$\begin{align} y &= \beta_0 + \tilde{\beta}_1 x_1 + \tilde{\beta}_2 x_2 + {\beta}_3 (x_1 - x_2)+ \epsilon \\ y &= \beta_0 + (\tilde{\beta}_1 + {\beta}_3) x_1 + (\tilde{\beta}_2 - {\beta}_3) x_2+ \epsilon \\ y &= \beta_0 + \beta_1 x_1 + \beta_2 x_2+ \epsilon \\ \end{align}$$ En d'autres termes, le coefficient sur $x_3$ n'est pas identifié dans ce modèle car il s'agit exactement d'une combinaison linéaire de $x_1$ et $x_2$.
Votre exemple utilise le bruit $x_3 = x_1 - x_2 + \eta$pour éviter la non-identification. Cependant, cela revient à ajouter un coeffiicent au bruit$\eta$: $$\begin{align} y &= \beta_0 + \tilde{\beta}_1 x_1 + \tilde{\beta}_2 x_2 + {\beta}_3 (x_1 - x_2 + \eta) + \epsilon\\ y &= \beta_0 + (\tilde{\beta}_1 + {\beta}_3) x_1 + (\tilde{\beta}_2 - {\beta}_3) x_2 + {\beta}_3\eta + \epsilon \\ y &= \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 \eta + \epsilon \\ \end{align}$$
En d'autres termes, le bruit $\eta$est une troisième fonctionnalité fournie au modèle. On suppose que le bruit n'a aucun rapport avec$y$, nous savons donc que le véritable effet de $\eta$ sur $y$est zéro; comprenant$\eta$ nuira probablement aux prédictions chaque fois $\hat{\beta}_3 \neq 0$.
Conclusion : ne pas ajouter$x_1-x_2+\eta$ à un modèle de régression linéaire car il ne dispose d'aucune nouvelle information sur $y$.
Le modèle d'ensemble d'arbres (forêt aléatoire, xgboost) est non linéaire: pour toute division binaire, les nœuds filles donnent des fonctions constantes distinctes. L'effet de beaucoup de ces divisions binaires est de diviser l'espace des caractéristiques en un certain nombre de rectangles alignés sur l'axe, chacun avec une estimation différente.
De manière arbitraire, de nombreuses divisions binaires alignées sur l'axe peuvent se rapprocher d'une limite complexe en utilisant des formes plus simples. L'exemple classique est de considérer une tâche de classification binaire avec une frontière de décision linéaire parfaite sur la ligne$x_1 - x_2 > c$. Cela se manifeste par une division diagonale . Il est clair qu'un fractionnement aligné sur un seul axe ne peut pas très bien se rapprocher d'une diagonale, mais de nombreux fractionnements alignés sur l'axe, vous pouvez créer une forme "en escalier" qui peut se rapprocher de la diagonale de manière arbitraire . De même, il en va de même pour les relations approximatives telles que les logarithmes, les quadratiques, les sinusoïdes, etc.
D'autre part, ajouter une fonctionnalité $x_1 - x_2$ à l'ensemble de fonctionnalités pourrait améliorer le modèle car un fractionnement binaire sera en mesure de récupérer exactement $x_1 - x_2 > c$. Ce type d'ingénierie des fonctionnalités peut améliorer le modèle lorsque vous savez à l'avance que cette fonctionnalité est utile. D'un autre côté, l'intérêt d'utiliser des modèles avancés tels que la forêt aléatoire ou les arbres boostés est de récupérer des fonctions utiles lorsque nous ne savons pas exactement comment toutes les fonctionnalités sont liées au résultat.
Conclusion : ajouter$x_1 - x_2$ peut améliorer le modèle si $x_1 - x_2 > c$ est important de $y$.
Plus d'informations: Conséquences de l'ajout de colonnes d'entités transformées pour les forêts aléatoires et le lasso?