我有一个逻辑回归,可以预测哪些客户将流失。我似乎找不到任何提取预计会流失的帐户的代码。帐户名称是一个字符串对象,因此我不会将其输入到逻辑模型中,但需要将预测的客户流失行映射回原始表中
这是我的数据的样子,但是我无法以较小的样本大小来复制此问题:
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
答案 0 :(得分:0)
要获得预计会流失的帐户,您可以简单地编写:
df.loc[y_pred_train == "yes"]
并获得概率:
y_pred_prob_df.loc[y_pred_train == "yes"]