XGBoost等决策树的巨大缺陷-哪些问题上预测精度甚至不如回归，更不如神经网络？
xgboost是决策树模型中性能最好的一类，与lightgbm并驾齐驱。然而它本身没有特征工程，因此作为树模型，有着树模型本身不能克服的问题。即他的结果都是根据特征的条件分布而确定的期望，并没有挖掘特征之间更深层次关系的能力。因此，对于具有复杂特征关系的数据集，XGBoost无法直接捕捉到这些关系。在这种情况下，进行适当的特征工程和预处理，或者利用神经网络等结构来挖掘特征之间更深层次的交互关系，可能是更好的选择。然而，如果你没有很好的理解xgboost预测过程的本质，那么你将面临着对预测结果带来不可控的错误风险。本文将通过实际的案例来说明树模型的巨大缺陷与使用风险。假设有一个数据集，X取值范围是1到100，Y值为X的10倍再加上一个介于-50和50之间的随机数。现在我们需要预测X=120时的Y值。我们将使用线性回归和XGBoost进行对比。很明显，在这个案例中，线性回归模型能够学习到X和Y之间的线性关系，并预测出相应的Y值。然后，我们使用XGBoost模型。而XGBoost模型是无法直接捕获到这种线性关系，这是因为与线性模型不同，XGBoost模型并不假设数据集中各个特征之间的线性关系，而是通过构建决策树来寻找特征之间的非线性关系，最终输出条件分布的期望。因此，当我们对超出训练集范围的X（120-150）进行预测时，XGBoost会直接露馅，无法进行正常预测。假设有一个训练集，X1取值范围是两个从1到50的数据集连接起来（总共100个）X2的前50个数为X1取值的10倍再加上一个介于-50和50之间的随机数，X2的后面50个数为X1取值的20倍再加上一个介于-50和50之间的随机数。我们可以看出，潜在的关系是：X2与X1的比值大约为10时，Y=0；X2与X1的比值大约为20时，Y=1。现在，我们需要预测X1在50-100时（处在训练集之外），X2取X1的10倍或者20倍时的Y值。很容易看出，应该分别是0和1.我们构建一个经典的神经网络：通过分别使用神经网络和XGBoost模型进行训练和预测，我们得到了如下结果的对比：当X1在50-100时（处在训练集之外）且X2等于X1的10倍时，神经网络仍然很好地识别了这个比例关系，并正确地将测试集的50个Y预测为0。然而，XGBoost在测试集的50个样本中，有40多个被错误地预测为1。这说明XGBoost完全无法识别X2与X1的比值与之前训练集的相似之处，并以此进行预测。总结：xgboost根本无法直接识别特征之间的交互关系，而只是机械的使用数据分裂规则对每一个特征进行分裂。因此只要预测集出现与原训练集的特征分布不一样的情况，就会有预测不准确的风险。要增强树模型对特征之间复杂交互关系的识别能力，我们需要进行特征工程。通过创建新特征，将原始特征进行组合、转换或聚合，以帮助模型更好地理解潜在关系。非常容易想到的是，XGBoost是否能够结合神经网络输出来进行自动特征工程？答案是可以的，请看后续这篇：心火试新茶：XGBoost结合神经网络中间层输出-一种自动特征工程的思路关于特征工程，请看这篇：心火试新茶：特征工程有必要吗？到底什么样的特征工程是有效的?由树模型（如XGBoost）的原理分析本文实验用到的源代码在这里：链接：https://pan.baidu.com/s/11JEMUoRmiMMFJbuALqidvg?pwd=jgr1  提取码：jgr1