决策树只为一种情况生成叶子

数据挖掘 数据挖掘 预测建模 可视化 scikit-学习 决策树
2022-03-06 19:08:42

我之前问过一个关于营销预测分析的问题。面向潜在客户的营销预测模型(使用 pandas)对此仍有一些疑问,但我对我为营销数据生成的决策树有疑问。

我的目标是预测潜在客户是否会赢得或失去,这取决于他们如何了解产品等。我有一个布尔变量“赢得”,0-销售失败,1-销售成功。使用决策树,我能够生成一个模型,但是,对于导致 Not Won 的案例没有叶子。

这是正常的吗?我已经看到了 iris 数据集的示例,其中所有 3 个特征都在树中表示,adn,因此我想知道我采取的方法是否正确。

在 38000 的数据集中,大约有 1700 个 Won=1。

在此处输入图像描述

我使用熊猫,我的 DecisionTreeClassifier 参数是:

min_samples_split=2 min_samples_leaf=1 max_depth=3

然后我使用网格搜索进行参数优化。我的平均 val 为 0.95。如果我使用更大的深度,树就会变得太大而无法分析。

谢谢

编辑

既然马克说要发布一些代码,我就这样做了

from sklearn.tree import DecisionTreeClassifier,export_graphviz
dt=DecisionTreeClassifier(min_samples_split=2,min_samples_leaf=1,max_depth=3)
dt.fit(x,y)
features=x.columns
#print(features)
with open("dt.dot", 'w') as f:
    export_graphviz(dt, out_file=f,feature_names=features,class_names=["Won","Lost"])
command = ["dot", "-Tpng", "dt.dot", "-o", "hello.png"]
try:
    subprocess.check_call(command)
except:
    exit("Could not run dot, ie graphviz, to produce visualization")

from sklearn.cross_validation import cross_val_score
scores=cross_val_score(dt,x,y,cv=10)
print(scores.mean())

这是主要的训练代码,之前的所有行都只是修改

交叉验证分数达到 0.95

在此处输入图像描述

这是csv快照

我使用从“赢”开始的所有值,并且正在为“赢”进行训练

有一个 X 列,它有许多分类值 (20),“Won”就是其中之一。

Known' 'Recycled' 'Engaged' 'Prospect/MQL' 'Intern Transfer' 'MQL'
 'Working' 'Opportunity' nan 'Current Customer' 'Vendor' 'Disqualified'
 'Converted' 'SAL' 'SQL' 'engaged' 'working' 'Won' 'Web Registration'

'不活动

但是,它们都是均匀分布的,即。从 37000 起,所有观测值的数量几乎相同。我使用 get_dummies 转换为数值,并删除了除“Won”之外的所有列

所有其余的值都用于诸如指定、opp(货币价值从 1-3 缩放)和其他类别之类的东西,它们都是布尔值

1个回答

您正在预测二进制类:0 - 销售失败,1 - 销售成功。在决策树中,信息value被排序。因此,例如在第一个节点中,您有 0 类的 35011 个预测和 1 类的 1785 个预测。

但是,在你的代码中你有这个class_names=["Won","Lost"])所以你告诉你的决策树,第 0 类的名称是“赢”,第 1 类的名称是“丢失”。我认为它应该被倒置。

所以实际上,模型总是预测 0 - 销售失败。正如您所说,这似乎是合理的,在 38000 个样本中,只有 1700 个是 1 类。

此外,您的数据集高度不平衡。因此,当交叉验证给出 95% 的准确度时,它什么也没说,因为只有当您的模型给出所有预测 0 时,您的准确度才会... 95%。对于这些情况,使用可以为类赋予权重的模型(SVM、逻辑回归或 scikit 中的随机森林分类器都有这种可能性)。考虑对数据集进行欠采样。或添加更多第 1 类 - 挖掘您的数据库或人工进行(SMOTE),

绘制混淆矩阵并为 CV 提供不同的分数度量 - 精度或召回率,取决于您的情况。

最后一件事,不要指望深度为 3 的决策树会表现良好。向企业展示很好,但它给出的预测很差。