长期以来,自己在做特征的时候,为啥要做交叉特征,已经为什么交叉特征能够起到作用比较迷糊,偶然在kaggle上看见一个例子,完美的解答了这个问题。
数据如下:
数据ID | 类别ID | X | GroupX(交叉特征) | Label |
---|---|---|---|---|
A | 1 | 1 | 0.75 | 1 |
B | 1 | 0 | 0.75 | 1 |
C | 1 | 1 | 0.75 | 1 |
D | 1 | 1 | 0.75 | 1 |
E | 2 | 0 | 0.33 | 0 |
F | 2 | 0 | 0.33 | 0 |
G | 2 | 1 | 0.33 | 0 |
H | 3 | 1 | 0.66 | 1 |
I | 3 | 1 | 0.66 | 1 |
J | 3 | 0 | 0.66 | 1 |
以决策树为模型,现在如果只使用特征X作为去预测Label,如图所示,那么只有70%的准确率。
现在利用类别ID和特征X做交叉特征,利用类别ID进行groupBy,将sum值除以类别组内基数,得到交叉特征GroupX,再利用交叉特征去预测Label,如图,准确率为100%。
总结
做交叉特征的目的在于,帮助模型去进一步的学习数据,特别是树模型这种无法知道特征与特征之间交互信息的模型。
参考文献
https://www.kaggle.com/c/ieee-fraud-detection/discussion/111453