我之前问过一个关于营销预测分析的问题。面向潜在客户的营销预测模型(使用 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 缩放)和其他类别之类的东西,它们都是布尔值