2. Найдите мультиколлинеарность
Мультиколлинеарность возникает, когда две или более независимых переменных имеют высокую корреляцию друг с другом в регрессионной модели. Поэтому нам нужно выяснить это через корреляцию между признаками.
Мы можем использовать pandas_profiling для анализа:
# !pip install pandas_profiling from pandas_profiling import ProfileReport profile = ProfileReport (df, title = 'Loans Defaults Prediction', html = {'style': {'full_width': True }}) profile
Он обеспечивает некоторый базовый анализ набора данных, включая корреляцию и отправку предупреждений, чтобы сообщить, какие функции имеют высокую корреляцию.
Из тепловой карты и оповещения мы можем удалить int_rate, bc_util и bc_open_to_buy:
df.drop(["bc_util", "bc_open_to_buy","int_rate"], axis = 1, inplace = True)
3. Найдите корреляцию между функциями и целевым классом
На этом этапе мы собираемся найти высокую корреляцию между функциями и классом. На тепловой карте выше мы видим, что нижеприведенные функции имеют более высокую корреляцию:
sub_grade, срок, ссуда_амнт, dti, emp_length, годовой_вкл.
Это функции, которые мы могли бы добавить в модели.
Другой способ найти функции — функция SequentialFeatureSelector(). Здесь мы используем прямой метод. Во-первых, чтобы построить модель:
from sklearn.model_selection import train_test_split, RandomizedSearchCV from sklearn.linear_model import LogisticRegression from sklearn import metrics from sklearn.preprocessing import MinMaxScaler X = df.drop('loan_status', axis=1) y = df[['loan_status']] y = y.values.ravel() X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42, stratify=y) scaler = MinMaxScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
Затем примените функцию:
# !pip install mlxtend from mlxtend.feature_selection import SequentialFeatureSelector as SFS from sklearn.metrics import precision_score, make_scorer scorer = make_scorer(precision_score, average='micro') sfs = SFS(LogisticRegression(), k_features='best', forward=True, floating=False, scoring = scorer, cv = 0)
Соответствуйте нашим характеристикам и получайте результат:
sfs.fit(X, y) sfs.k_feature_names_
Мы также можем построить процесс выбора признаков:
from mlxtend.plotting import plot_sequential_feature_selection as plot_sfs import matplotlib.pyplot as plt fig1 = plot_sfs(sfs.get_metric_dict(), kind='std_dev') plt.title('Sequential Forward Selection') plt.grid() plt.show()
Наконец, мы можем комбинировать оба метода, чтобы выбрать лучшие функции для моделей.
Спасибо за чтение.