RandomForest分类 - 最接近改变类

时间:2017-10-19 15:39:10

标签: machine-learning scikit-learn classification

我目前正在处理有关Human Resources Analytics的Kaggle数据集。

我已经清理了数据集,对某些模型进行了基准测试。最好的是RandomForestClassifier,它可以预测员工是否以良好的准确度离开公司(约99%)。

现在,我想找到仍然在公司可能离开的最可能的员工。我在火车模型上使用了predict_proba方法,但这给了我员工离开与否的概率。这不是雇员离开的可能性。此外,数据集是用于培训的数据集。

我不知道,如何预测这类信息。例如,在一个线性回归中,我已经找到了与估算器最接近的点,但是对于一个整体,我不知道。

如果您想尝试,我会在下面附上一段代码:

dataset = pd.read_csv("HR.csv")

# Cleanup/Preparation datas
convert_dict = {"high" : 3, "medium": 2, "low": 1}
dataset = dataset.replace({"salary": convert_dict})

dataset = pd.get_dummies(dataset)

X = dataset.drop("left", axis=1)
y = dataset["left"]
scaler = MinMaxScaler()
X = scaler.fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# training best model (I pass the benchmark part)
model = RandomForestClassifier(bootstrap=False, n_estimators=50)
model.fit(X_train, y_train)
acc = model.score(X_test, y_test)
print(acc)

# Eval
eval_dataset = dataset[dataset["left"] == 0]
X = eval_dataset.drop("left", axis=1)
y = eval_dataset["left"]
X = scaler.transform(X)
y_pred = model.predict_proba(X) # => This is wrong

感谢您的支持,

2 个答案:

答案 0 :(得分:1)

你说你的模型准确度大约99%,但是在测试中是这样吗?如果这么棒!现在,您拥有包含所有数据字段的新数据,您可以在每个obersavtion / s上使用predict_proba方法来预测它们是否会离开。从这个意义上说,你可以使用它作为一个简单的代理,因为这是你现在最好的。

我会给你一个快速的假设来测试。说员工的所有事情都是一样的,但是时间还在继续。您可以更新员工在公司花费的时间,并查看他们离开的可能性随时间的变化情况。虽然这不是一个很好的方法来预测几年(希望人们成长和其他参数改变),但它会让你很好地了解有人会忍受他们目前的现状多久,基于从培训数据中学到的知识。

答案 1 :(得分:1)

您的问题有几个问题......

  

我在火车模型上使用了predict_proba方法但是这给了我员工离开的概率。这不是雇员离开的可能性。

这在许多层面都是错误的:

  • philosophically ,因为员工已经离开或不离开,这里没有任何实际可能性,这就是为什么相应的数据列left实际上是二进制的(0/1)而不在[0,1]

  • 范围内
  • 计算,你确实得到了在猜测之后猜测的离开概率

仔细检查后,数据似乎也会受到 class imbalance 的影响(换句话说,您的1' s远远超过您的0&#;;需要更多谨慎和专业技术(香草精确度可能在这里有误解)。

您的代码在#Eval之后的作用尚不清楚,为什么您似乎只保留left==0的记录,或者best_1究竟是什么(您的#34;最佳&#34} ;模型,也许?)。但是,在您的测试集predict_proba上应用X_test确实会为您提供关于离开这些(在培训期间看不到)员工的模型概率猜测