Tree models, including LightGBM, inherently include interaction of features. If you find tree models modestly outperforming linear models one reason may be that LightGBM is able to capture interactions in its model.
I think that if you find this improvement modest it is because it allows all interactions including noise interactions.
This negative aspect can be controlled to some extent in LightGBM with interaction constraints. From LighGBM's documents:
interaction_constraints
︎, default =
""
, type = string- controls which features can appear in the same branch
- by default interaction constraints are disabled, to enable them you can specify
- for CLI, lists separated by commas, e.g.
[0,1,2],[2,3]
- for Python-package, list of lists, e.g.
[[0, 1, 2], [2, 3]]
- for R-package, list of character or numeric vectors, e.g.
list(c("var1", "var2", "var3"), c("var3", "var4"))
orlist(c(1L, 2L, 3L), c(3L, 4L))
. Numeric vectors should use 1-based indexing, where1L
is the first feature,2L
is the second feature, etc
- for CLI, lists separated by commas, e.g.
- any two features can only appear in the same branch only if there exists a constraint containing both features