#python #машинное_обучение #scikit_learn
Построил 2 модели кредитного скоринга (задача бинарной классификации) на XGBoost и RandomForest. Накидал из БД различных фичей, около 60, загрузил. Построил график значимости признаков. 1) Стоит ли усекать количество фичей, если по графику видно, что значимости они не несут, если да, то по какой линии? (график прикреплен снизу) 2) Стоит ли оставлять бинарные фичи, в которых соотношение категорий например 90 на 10% и они не входят, скажем, в первую 10ку самых значимых признаков? 3) Каким образом может повлиять на модель и конкретно на эффективность модели бустинга и случайного леса, если оставить все эти "маловлиятельные" признаки? Или же нужно ориентироваться чисто на какие-либо метрики вроде auc-roc, gini, accuracy? Грубо говоря - убрал\добавил, посмотрел на значение метрики увеличилась\нет и опять заного.. Подскажите. Функция отрисовки графика: import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.impute import SimpleImputer as Imputer from sklearn import ensemble from xgboost import XGBClassifier import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split, StratifiedKFold, GridSearchCV from scipy.interpolate import interp1d from scipy.integrate import quad from sklearn.metrics import roc_auc_score, roc_curve, confusion_matrix, mean_squared_error, classification_report import itertools # (присутствуют лишние импорты) def MY_plotting_feature_priority(X, model, n=3): importances = model.feature_importances_ indices = np.argsort(importances)[::-1] feature_names = X.columns d_first = X.shape[1] plt.figure(figsize=(8, 8)) plt.title("Значимость признаков") plt.bar(range(d_first), importances[indices[:d_first]], align='center') plt.xticks(range(d_first), np.array(feature_names)[indices[:d_first]], rotation=90) plt.xlim([-1, d_first]) best_features = indices[:n] best_features_names = feature_names[best_features] print(f'Первые {n} значимых признаков {list(best_features_names)} из {d_first} ') plt.show()
Ответы
Ответ 1
Общий ответ на ваш вопрос - все зависит от поставленных целей и стоимости ошибки. Если вы видите, что добавдение-удаление определенного признака на тестовой выборке не приводит к значимому для вас изменению точности прогноза - данные убираем, если приводят- оставляют. Даже если вы будете основываться на формальных метриках, в каждой из них есть порог, который вы сами вольны задать и по которому потом будете принимать решение. Я не знаю, насколько значимо, например, для вашего банка уменьшение ложнонегативных прогнозов на 0.0001%. Может это всего несколько тысяч рублей, что для вашего банка ничто. А вот такое же изменение в медицине - это жизнь конкретных людей. А в психологии - вообще точность порядка 10% считается отличной. Так что как ни крути, но окончательное решение - всегда за вами и оно вне области формального анализа.Ответ 2
Не знаю, насколько еще актуален вопрос, но вот одно из возможных решений задачи выбора признаков именно для задач кредитного скоринга. http://ai-news.ru/2018/12/open_source_instrument_na_python_dlya_vybora_priznakov_nejroseti.html
Комментариев нет:
Отправить комментарий