如何从Sklearn Logistic预测中提取行特定信息

时间:2019-06-21 19:37:57

标签: scikit-learn model sklearn-pandas

我有一个逻辑回归,可以预测哪些客户将流失。我似乎找不到任何提取预计会流失的帐户的代码。帐户名称是一个字符串对象,因此我不会将其输入到逻辑模型中,但需要将预测的客户流失行映射回原始表中

这是我的数据的样子,但是我无法以较小的样本大小来复制此问题:

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如下所示 “提取预计会导致客户流失的帐户名称”

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) 

这里是错误:当我连接实际y,预测y,概率,原始数据集(ID)时,我得到了额外的几行。 如果我拿出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方式不起作用...我们只希望提取预计会流失的帐户

我要寻找的结果是一个数据帧,其中包含我的所有功能,目标,预测的客户流失率以及预测的可能性。具体来说,帐户名“ ABC”是否会流失?大概那个预测?以及进入模型的所有字段

Seems like I can't use loc to find only the accounts predicted to churn

1 个答案:

答案 0 :(得分:0)

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

df.loc[y_pred_train == "yes"]

并获得概率:

y_pred_prob_df.loc[y_pred_train == "yes"]