Часть I: https://medium.com/@benhui.ca/introduction-to-ways-of-feature-selection-attached-python-code-part-i-45b9e9a97a54

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()

Наконец, мы можем комбинировать оба метода, чтобы выбрать лучшие функции для моделей.

Спасибо за чтение.