使用Decision Tree Classifier时数据集0、1取值计数是否影响模型效果?
类别不平衡对决策树分类器的影响结论
会产生明确的负面影响,你目前遇到的「模型全量输出0、准确率虚高」就是这类影响的典型表现。
先拆解当前的数据与模型问题
你提供的类别计数统计如下:
TARGET 0 282686 1 24825 dtype: int64
换算成占比的话:
- 类别0(多数类)占总样本的91.9%
- 类别1(少数类)占总样本的8.1%
这意味着哪怕模型不学习任何特征规律,无脑把所有样本预测为0,就能拿到91.9%的准确率,你观察到的三个数据集accuracy均大于0.9,本质是这个「全猜0」的无效策略带来的虚假结果,完全不能证明模型有效。
类别不平衡影响决策树建模效果的核心原因
决策树的节点分裂、剪枝、预测逻辑,在默认参数下都会天然偏向多数类:
- 分裂准则偏向多数类:决策树默认用基尼系数、信息增益作为节点分裂的判断依据,这两个指标的计算逻辑和样本量直接挂钩——分对占比超9成的多数类,带来的指标收益远高于分对少数类的收益,树在生长时很容易收敛到「所有叶节点都预测0」的局部最优,根本不会生成识别少数类的分支。
- 剪枝策略会误删少数类分支:默认剪枝逻辑以整体准确率提升为判断标准,覆盖少数类的分支因为涉及样本量少,对整体准确率的提升幅度极低,大概率会在剪枝阶段被直接删掉,进一步强化模型对多数类的偏向。
- 叶节点投票机制天然弱势:决策树叶节点的预测结果由节点内样本的多数投票决定,默认所有样本权重相等的前提下,少数类因为样本量少,在绝大多数叶节点的投票中都无法胜出,自然不会被模型输出。
可落地的修正方案
- 第一时间替换评估指标:不平衡分类场景下不要用
accuracy_score作为核心评估指标,优先看混淆矩阵、少数类的精确率/召回率/F1值、PR-AUC,避免被虚高的准确率误导。 - 调整类别权重:训练模型时给
DecisionTreeClassifier传入class_weight='balanced'参数,算法会自动根据类别占比给少数类样本分配更高权重,让分裂、投票环节更重视少数类的分类正确性。 - 训练集层面做采样调整:如果调权重效果不好,可以仅在训练集上做采样平衡——要么对多数类做随机欠采样,抽取和少数类量级接近的0类样本参与训练;要么用SMOTE等方法对少数类做过采样,生成合成的1类样本拉平类别比例。注意采样操作绝对不能应用在验证集、测试集上,否则会造成数据泄露,得到虚假的好效果。
- 微调树的超参数:适当调低
min_samples_split、min_samples_leaf的阈值,避免覆盖少量少数类样本的有效分支因为不满足节点最小样本数要求被过滤,调参时注意配合验证集的少数类指标判断,防止过拟合。
内容的提问来源于stack exchange,提问作者Karan Dhar
相关产品推荐
相关产品推荐

