首页 > 解决方案 > 如何从 Sklearn 逻辑预测中提取行特定信息

问题描述

我有一个逻辑回归来预测哪些客户会流失。我似乎无法在任何地方找到提取预计会流失的帐户的代码。Account Name 是一个字符串对象,所以我没有将它输入逻辑模型,但我需要将预测的流失行映射回原始表

这就是我的数据的样子,但是我无法以更小的样本大小复制这个问题:

import random
random_data = [['ABC', 'yes'],['AAA','yes'],
    ['BBB','no'],['XTZ','no'],['ADB','no']]
df = pd.DataFrame(random_data,columns=['Account','Target'])
df['height'] = random.sample(xrange(10), len(df))
df['weight'] = random.sample(xrange(10), len(df))
X_train_pd = df.drop(['Account','Target'], axis=1) 
y_train_pd = df['Target'] 


logreg = LogisticRegression()
logreg.fit(X_train_pd, y_train_pd)
y_pred_train = logreg.predict(X_train_pd)

这是我尝试过的。它的 Hacky 和 ​​Bug 显示在“Extract Account Names Predicted to Churn”下面

y_pred_prob_df = pd.DataFrame(logreg.predict_proba(X_test))

data = np.array([y_test_pd, y_pred_test ])
data_y = pd.DataFrame({'y_test':data[0],'y_pred_test':data[1]} )

ID = test[['Account Name', 'Status']]

Accounts=pd.concat([ID, data_y, y_pred_prob_df], axis=1) 

这是 BUG:当我连接实际 y、预测 y、概率、原始数据集 (ID) 时,我得到了额外的几行。如果我拿出身份证,这解决了这个错误。

print ID.shape #(250, 2)
print data_y.shape #(250, 2)
print y_pred_prob_df.shape #(250, 2)
print Accounts.shape, "(267, 6) <-- BUG "

s=pd.concat([data_y, y_pred_prob_df], axis=1) 
print s.shape, "(250, 4) <-- Resolves BUG: ID is the issue"  

Hacky 方法行不通...我们只想提取预计会流失的帐户

我正在寻找的结果是一个数据框,其中包含我的所有特征、目标、预测的流失 flg 和预测的概率。具体来说,账户名称“ABC”预计会流失吗?可能是那个预测?以及进入模型的所有字段

好像我不能使用 loc 只查找预计会流失的帐户

标签: scikit-learnmodelsklearn-pandas

解决方案


要获得预计会流失的帐户,您可以简单地编写:

df.loc[y_pred_train == "yes"]

并获得概率:

y_pred_prob_df.loc[y_pred_train == "yes"]

推荐阅读