Как извлечь строки Специфическая информация из Sklearn Logistic Predictions - PullRequest
0 голосов
/ 21 июня 2019

У меня есть логистическая регрессия, которая предсказывает, какие клиенты собираются откачать. Кажется, я нигде не могу найти код, который извлекает учетные записи, которые, как прогнозировалось, оттока. Имя учетной записи является строковым объектом, поэтому я не включаю его в логистическую модель, но мне нужно отобразить предсказанные строки оттока обратно в исходную таблицу

Вот так выглядят мои данные, однако я не могу воспроизвести эту проблему в меньшем размере образца:

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 and the 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"  

Хакки не работает ... Мы хотим извлечь ТОЛЬКО учетные записи, для которых прогнозируется отток

Результат, который я ищу, - это один фрейм данных со всеми моими функциями, целью, прогнозируемой текучестью и вероятностью прогнозирования. В частности, прогнозируется ли изменение имени учетной записи «ABC»? вероятно из этого прогноза? и все поля, которые вошли в модель

Похоже, я не могу использовать loc, чтобы найти только те аккаунты, для которых прогнозируется отток

1 Ответ

0 голосов
/ 22 июня 2019

Чтобы получить аккаунты с прогнозируемым оттоком, вы можете просто написать:

df.loc[y_pred_train == "yes"]

И чтобы получить вероятности:

y_pred_prob_df.loc[y_pred_train == "yes"]
...