Пайплайн отбора признаков: корреляция Спирмена и Крамера, отбор финального набора данных.

Создание надежных моделей кредитного скоринга с помощью Python

Содержание

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

Делиться

da9241bc9984ba134897b843b538cfee

Спасибо за ваши отзывы и интерес к моей предыдущей статье. Поскольку несколько читателей спрашивали, как воспроизвести анализ, я решил поделиться полным кодом на GitHub как для этой статьи, так и для предыдущей. Это позволит вам легко воспроизвести результаты, лучше понять методологию и более подробно изучить проект.

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

  • Оценка способности объясняющих переменных различать случаи дефолта (см. раздел 1.1)
  • Снижение размерности путем изучения взаимосвязей между объясняющими переменными (см. раздел 1.2)
  • В разделе 1.3 мы применяем эти методы к набору данных, представленному в нашей предыдущей публикации.
  • В заключение мы подводим итоги и выделяем основные моменты, которые могут быть полезны на собеседованиях, будь то для стажировки или для работы на полную ставку.

По мере того, как мы развиваемся и совершенствуем свои навыки моделирования, мы часто оглядываемся назад и улыбаемся, вспоминая свои первые попытки, первые созданные нами модели и ошибки, допущенные на этом пути.

Я помню, как создавал модель оценки, используя ресурсы Kaggle, не до конца понимая, как анализировать взаимосвязи между переменными. Будь то две непрерывные переменные, непрерывная и категориальная переменная или две категориальные переменные, мне не хватало ни графического понимания, ни статистических инструментов, необходимых для их надлежащего изучения.

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

Почему важно изучать взаимосвязи между переменными

Первая задача — определить переменные, которые наилучшим образом объясняют изучаемое явление, например, прогнозирование дефолта.

Однако корреляция не означает причинно-следственную связь. Любое утверждение должно быть подкреплено следующими факторами:

  • академические исследования
  • экспертные знания в данной области
  • визуализация данных
  • и экспертное заключение

Вторая задача — снижение размерности. Определив соответствующие пороговые значения, мы можем предварительно отобрать переменные, которые демонстрируют значимые связи с целевой переменной или с другими предикторами. Это помогает уменьшить избыточность и улучшить производительность модели.

Это также позволяет на раннем этапе определить, какие переменные, скорее всего, будут сохранены в окончательной модели, и помогает выявить потенциальные проблемы моделирования. Например, если в окончательную модель попадает переменная, не имеющая значимой связи с целевой переменной, это может указывать на слабость в процессе моделирования. В таких случаях важно вернуться к предыдущим шагам и выявить возможные недостатки.

В этой статье мы сосредоточимся на трех типах взаимоотношений:

  • Две непрерывные переменные
  • Одна непрерывная и одна качественная переменная
  • Две качественные переменные

Все анализы проводятся на обучающем наборе данных. В предыдущей статье мы рассмотрели выбросы и пропущенные значения, что является необходимым условием перед любым статистическим анализом. Поэтому для анализа взаимосвязей между переменными мы будем работать с очищенным набором данных.

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

Цель этой статьи — не предоставить исчерпывающий список статистических тестов для измерения взаимосвязей между переменными. Вместо этого она призвана дать вам необходимые основы для понимания важности этого шага в построении надежной модели оценки.

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

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

  • Как измерить взаимосвязь между двумя непрерывными переменными?
  • Как измерить взаимосвязь между двумя качественными переменными?
  • Как измерить взаимосвязь между качественной переменной и непрерывной переменной?

Графический анализ

Изначально я хотел пропустить этот шаг и сразу перейти к статистическому тестированию. Однако, поскольку эта статья предназначена для начинающих в моделировании, это, пожалуй, самая важная часть.

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

Этот шаг особенно важен на этапе исследования, а также при принятии решений и обсуждениях с экспертами в данной области. Полученные с помощью визуализации данные всегда должны быть подтверждены следующими способами:

  • эксперты в предметной области
  • контекст исследования
  • и соответствующая академическая или научная литература

Сочетая эти точки зрения, мы можем исключить переменные, не имеющие отношения к проблеме или способные привести к ошибочным выводам. В то же время мы можем выявить наиболее информативные переменные, которые действительно помогают объяснить изучаемое явление.

Если этот этап тщательно выполнен и подкреплен академическими исследованиями и экспертной оценкой, мы можем быть более уверены в последующих статистических тестах, которые в конечном итоге обобщают информацию в такие показатели, как p-значения или коэффициенты корреляции.

1. Применение системы кредитного скоринга

В кредитном скоринге цель состоит в том, чтобы выбрать из набора переменных-кандидатов те, которые наилучшим образом объясняют целевой показатель, как правило, дефолт.

Именно поэтому мы изучаем взаимосвязи между переменными.

Позже мы увидим, что некоторые модели чувствительны к мультиколлинеарности , которая возникает, когда несколько переменных несут схожую информацию. Поэтому уменьшение избыточности имеет важное значение.

В нашем случае целевая переменная является бинарной (по умолчанию или вне по умолчанию), и мы стремимся различать их с помощью объясняющих переменных, которые могут быть как непрерывными, так и категориальными.

Графически мы можем оценить дискриминационную способность этих переменных, то есть их способность предсказывать исход по умолчанию. В следующем разделе мы представим графические методы и статистические критерии, которые можно автоматизировать для анализа взаимосвязи между непрерывными или категориальными объясняющими переменными и целевой переменной с использованием языков программирования, таких как Python.

1.1 Оценка прогностической способности

В этом разделе мы представляем графические и статистические инструменты, используемые для оценки способности как непрерывных, так и категориальных объясняющих переменных отражать взаимосвязь с целевой переменной, а именно с переменной default (def).

1.1.1 Непрерывная переменная против бинарной целевой переменной

Если оцениваемая переменная является непрерывной, цель состоит в том, чтобы сравнить ее распределение по двум целевым классам:

  • не по умолчанию (def=0def = 0)
  • по умолчанию (def=1def = 1)

Мы можем использовать:

  • Диаграммы размаха для сравнения медиан и дисперсии.
  • Графики плотности распределения (KDE) для сравнения распределений
  • Кумулятивные функции распределения (КФР)

Главная идея проста:

Отличается ли распределение переменной между лицами, допустившими просрочку платежей, и лицами, не допустившими просрочки?

Если ответ положительный, то переменная может обладать дискриминационной способностью.

Предположим, мы хотим оценить, насколько хорошо показатель person_income различает заемщиков, допустивших просрочку платежей, и заемщиков, не допустивших ее. Графически мы можем сравнить сводные статистические данные, такие как среднее или медиана, а также распределение с помощью графиков плотности или кумулятивных функций распределения (КФР) для контрагентов, допустивших и не допустивших просрочку платежей. Полученная визуализация показана ниже.

def plot_continuous_vs_categorical( df, continuous_var, categorical_var, category_labels=None, figsize=(12, 10), sample=None ): «»» Сравнение непрерывной переменной по категориям с использованием диаграммы размаха, KDE и ECDF (макет 2×2). «»» sns.set_style(«white») data = df[[continuous_var, categorical_var]].dropna().copy() # Дополнительная выборка, если sample: data = data.sample(sample, random_state=42) categories = sorted(data[categorical_var].unique()) # Сопоставление меток (необязательно), если category_labels: labels = [category_labels.get(cat, str(cat)) for cat in categories] else: labels = [str(cat) for cat in categories] fig, axes = plt.subplots(2, 2, figsize=figsize) # — 1. Диаграмма размаха — sns.boxplot( data=data, x=categorical_var, y=continuous_var, ax=axes[0, 0] ) axes[0, 0].set_title(«Boxplot (median & spread)», loc=»left») # — 2. Boxplot comparaison médianes — sns.boxplot( data=data, x=categorical_var, y=continuous_var, ax=axes[0, 1], showmeans=True, meanprops={ «marker»: «o», «markerfacecolor»: «white», «markeredgecolor»: «black», «markersize»: 6 } ) axes[0, 1].set_title(«Median comparison (Boxplot)», loc=»left») medians = data.groupby(categorical_var)[continuous_var].median() for i, cat in enumerate(categories): axes[0, 1].text( i, medians[cat], f»{medians[cat]:.2f}», ha='center', va='bottom', fontsize=10, fontweight='bold' ) # — 3. Только KDE — for cat, label in zip(categories, labels): subset = data[data[categorical_var] == cat][continuous_var] sns.kdeplot( subset, ax=axes[1, 0], label=label ) axes[1, 0].set_title(«Сравнение плотности (KDE)», loc=»left») axes[1, 0].legend() # — 4. ECDF — for cat, label in zip(categories, labels): subset = np.sort(data[data[categorical_var] == cat][continuous_var]) y = np.arange(1, len(subset) + 1) / len(subset) axes[1, 1].plot(subset, y, label=label) axes[1, 1].set_title(«Кумулятивное распределение (ECDF)», loc=»left») axes[1, 1].legend() # Чистый стиль (Рассказывание историй с помощью данных) for ax in axes.flat: sns.despine(ax=ax) ax.grid(axis=»y», alpha=0.2) plt.tight_layout() plt.show() plot_continuous_vs_categorical( df=train_imputed, continuous_var=»person_income», categorical_var=»def», category_labels={0: «Нет значения по умолчанию», 1: «Значение по умолчанию»}, figsize=(14, 12), sample=5000 )

1ce138a1d657d3f59bffc5a2e8f7ddca

Заемщики, допустившие просрочку платежей, как правило, имеют более низкие доходы, чем заемщики, не допустившие просрочки. Распределения показывают явный сдвиг: просрочки сосредоточены в группах с более низким уровнем дохода. В целом, доход обладает хорошей дискриминационной способностью для прогнозирования просрочек.

1.1.2 Статистический тест: критерий Краскала-Уоллиса для непрерывной переменной по сравнению с бинарной целевой переменной

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

Точнее, он проверяет, происходят ли k выборок (k ≥ 2) из одной и той же популяции или из популяций с идентичными характеристиками по параметру положения. Этот параметр концептуально близок к медиане, но критерий Краскала-Уоллиса включает в себя больше информации, чем одна только медиана.

Принцип теста следующий. Пусть (MiM_i) обозначает параметр положения образца i. Гипотезы следующие:

  • (H0):(M1=⋯=Mk)( H_0 ): ( M_1 = dots = M_k )
  • (H1)( H_1 ): Существует по крайней мере одна пара (i, j) такая, что (Mi≠Mj)( M_i neq M_j )

Когда (k = 2), критерий Краскала–Уоллиса сводится к критерию Манна–Уитни .

Статистический критерий приблизительно соответствует распределению хи-квадрат с K-1 степенями свободы (для достаточно больших выборок).

  • Если значение p < 5%, мы отклоняем H0H_0
  • Это позволяет предположить, что по крайней мере одна группа существенно отличается.

Следовательно, если для данной количественной объясняющей переменной значение p меньше 5%, нулевая гипотеза отклоняется, и мы можем заключить, что рассматриваемая объясняющая переменная может быть прогностической в модели.

1.1.3 Качественная переменная против бинарной целевой переменной

Если объясняющая переменная является качественной, подходящим инструментом является таблица сопряженности, которая суммирует совместное распределение двух переменных.

На графике показано, как категории объясняющей переменной распределены по двум классам целевой переменной. Например, для связи между переменной person_home_ownership и переменной по умолчанию таблица сопряженности представлена следующим образом:

def contingency_analysis( df, var1, var2, normalize=None, # None, «index», «columns», «all» plot=True, figsize=(8, 6) ): «»» Функция для вычисления и визуализации таблицы сопряженности + критерия хи-квадрат + коэффициента Крамера V. «»» # — Таблица сопряженности — table = pd.crosstab(df[var1], df[var2], margins=False) # — Нормализованная версия (необязательно) — if normalize: table_norm = pd.crosstab(df[var1], df[var2], normalize=normalize, margins=False).round(3) * 100 else: table_norm = None # — График (тепловая карта) — if plot: sns.set_style(«white») plt.figure(figsize=figsize) data_to_plot = table_norm if table_norm is not None else table sns.heatmap( data_to_plot, annot=True, fmt=».2f» if normalize else «d», cbar=True ) plt.title(f»{var1} vs {var2} (Contingency Table)», loc=»left», weight=»bold») plt.xlabel(var2) plt.ylabel(var1) sns.despine() plt.tight_layout() plt.show()

bec3ca650a6413cebedc10b8074f8051

Из этой таблицы мы можем сделать следующие выводы:

  • Сравните условные распределения по категориям.
46a11bca21e801711e73fb4bc31f4866
  • Заемщики, снимающие жилье или относящиеся к «другим» категориям, чаще допускают просрочки платежей , в то время как у домовладельцев самый низкий показатель просрочек .
    Заемщики, имеющие ипотечные кредиты, находятся в промежуточном положении, что указывает на умеренный риск.

Для визуализации часто используются сгруппированные столбчатые диаграммы . Они предоставляют интуитивно понятный способ сравнения условных долей по категориям.

def plot_grouped_bar(df, cat_var, subcat_var, normalize=»index», title=»»): ct = pd.crosstab(df[subcat_var], df[cat_var], normalize=normalize) * 100 modalities = ct.index.tolist() categories = ct.columns.tolist() n_mod = len(modalities) n_cat = len(categories) x = np.arange(n_mod) width = 0.35 colors = ['#0F6E56', '#993C1D'] # teal = non-défaut, coral = défaut fig, ax = plt.subplots(figsize=(7.24, 4.07), dpi=100) for i, (cat, color) in enumerate(zip(categories, colors)): offset = (i — n_cat / 2 + 0.5) * width ax.bar(x + offset, ct[cat], width=width, color=color, label=str(cat)) # Аннотации над каждой полосой for j, val in enumerate(ct[cat]): ax.text(x[j] + offset, val + 0.5, f»{val:.1f}%», ha='center', va='bottom', fontsize=9, color='#444') # Стиль Cole ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.spines['left'].set_visible(False) ax.yaxis.grid(True, color='#e0e0e0', linewidth=0.8, zorder=0) ax.set_axisbelow(True) ax.set_xticks(x) ax.set_xticklabels(modalities, fontsize=11) ax.set_ylabel(«Taux (%)» if normalize else «Effectifs», fontsize=11, color='#555') ax.tick_params(left=False, colors='#555') handles = [mpatches.Patch(color=c, label=str(l)) for c, l in zip(colors, categories)] ax.legend(handles=handles, title=cat_var, frameon=False, fontsize=10, loc='upper right') ax.set_title(title, fontsize=13, fontweight='normal', pad=14) plt.tight_layout() plt.savefig(«default_by_ownership.png», dpi=150, bbox_inches='tight') plt.show() plot_grouped_bar( df=train_imputed, cat_var=»def», subcat_var=»person_home_ownership», normalize=»index», title=»Default Rate by Home Ownership» )

102845d810f2f42a284a807e1bc68055

1.1.4 Статистический тест: анализ связи между дефолтом и качественными объясняющими переменными

В качестве статистического теста используется критерий хи-квадрат , который является критерием независимости.
Цель этого метода — сравнить две переменные в таблице сопряженности, чтобы определить, существуют ли между ними взаимосвязь. В более общем смысле, он оценивает, отличаются ли распределения категориальных переменных друг от друга.

Небольшое значение критерия хи-квадрат указывает на то, что наблюдаемые данные близки к ожидаемым данным при условии независимости. Другими словами, нет никаких доказательств наличия связи между переменными.

Напротив, высокое значение критерия хи-квадрат указывает на большее расхождение между наблюдаемыми и ожидаемыми частотами, что предполагает потенциальную взаимосвязь между переменными. Если значение p- критерия хи-квадрат ниже 5%, мы отвергаем нулевую гипотезу о независимости и делаем вывод о зависимости между переменными.

Однако этот тест не измеряет силу взаимосвязи и чувствителен как к размеру выборки, так и к другим параметрам. а также структуру категорий. Именно поэтому мы обращаемся к коэффициенту Крамера V , который предоставляет более информативную меру ассоциации.
Коэффициент Крамера V выводится на основе критерия независимости хи-квадрат и количественно оценивает интенсивность связи между двумя качественными переменными X1X_1 и X2X_2.

Коэффициент можно выразить следующим образом:

V=φ2min⁡(k−1,r−1)=χ2/nmin⁡(k−1,r−1)V = sqrt{frac{varphi^2}{min(k – 1, r – 1)}} = sqrt{frac{chi^2 / n}{min(k – 1, r – 1)}}

  • φ {displaystyle varphi} — коэффициент фи.
  • χ²{displaystyle chi ^{2}} выводится из критерия хи-квадрат Пирсона или таблицы сопряженности.
  • n — общее количество наблюдений, и
  • k — количество столбцов таблицы сопряженности.
  • r — количество строк таблицы сопряженности.

Коэффициент Крамера V принимает значения от 0 до 1. В зависимости от его значения силу ассоциации можно интерпретировать следующим образом:

  • > 0,5 → Высокая степень ассоциации
  • 0,3 – 0,5 → Умеренная связь
  • 0,1 – 0,3 → Низкая степень ассоциации
  • 0 – 0,1 → Слабая или отсутствующая связь

Например, мы можем считать, что переменная значимо связана с целевым показателем, если коэффициент Крамера V превышает заданный порог (0,5 или 50%), в зависимости от уровня избирательности, требуемого для анализа.

Графические инструменты широко используются для оценки дискриминационной способности переменных. Они также могут помочь оценить взаимосвязи между объясняющими переменными. Цель данного анализа — сократить количество переменных путем выявления тех, которые предоставляют избыточную информацию.

Как правило, анализ проводится на переменных одного типа — непрерывных переменных с непрерывными переменными или категориальных переменных с категориальными переменными, — поскольку для каждого случая разрабатываются специальные показатели. Например, для непрерывных переменных можно использовать корреляцию Спирмена , а для категориальных переменных — коэффициент Крамера V и коэффициент Чупрова T для количественной оценки силы связи.

В следующем разделе мы предполагаем, что имеющиеся переменные релевантны для выявления случаев дефолта. Поэтому целесообразно использовать статистические тесты для дальнейшего исследования взаимосвязей между переменными. Мы опишем структурированную методологию выбора соответствующих тестов и дадим четкое обоснование этому выбору.

Цель состоит не в том, чтобы охватить все возможные тесты, а скорее в том, чтобы представить целостный и надежный подход, который поможет вам построить надежную модель оценки.

1.2 Мультиколлинеарность между переменными

В кредитном скоринге, когда мы говорим о мультиколлинеарности, первое, что обычно приходит на ум, — это коэффициент инфляции дисперсии (VIF) . Однако существует гораздо более простой подход, который можно использовать при работе с большим количеством объясняющих переменных. Этот подход позволяет провести первоначальный отбор релевантных переменных и помогает уменьшить размерность за счет анализа взаимосвязей между переменными одного типа.

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

1.2.1 Статистический критерий для исследования: Взаимосвязь между непрерывными объясняющими переменными

В моделях оценки обычно используется анализ взаимосвязи между двумя непрерывными переменными для предварительного отбора переменных и уменьшения размерности . Этот анализ становится особенно актуальным, когда количество объясняющих переменных очень велико (например, более 100), поскольку он может значительно сократить число переменных.

В этом разделе мы сосредоточимся на случае двух непрерывных объясняющих переменных. В следующем разделе мы рассмотрим случай двух категориальных переменных.

Для изучения этой взаимосвязи можно использовать коэффициент корреляции Пирсона. Однако в большинстве случаев предпочтительнее использовать коэффициент корреляции Спирмена, поскольку он является непараметрическим показателем. В отличие от него, коэффициент корреляции Пирсона отражает только линейные зависимости между переменными.

На практике часто предпочтение отдается корреляции Спирмена, поскольку она устойчива к выбросам и не зависит от предположений о распределении. Она измеряет, насколько хорошо взаимосвязь между двумя переменными может быть описана монотонной функцией, независимо от того, является ли она линейной или нет.

Математически это вычисляется путем применения формулы корреляции Пирсона к ранжированным переменным:

ρX,Y=Cov(RankX,RankY)σRankXσRankYrho_{X,Y} = frac{mathrm{Cov}(mathrm{Rank}_X, mathrm{Rank}_Y)}{sigma_{mathrm{Rank}_X} , sigma_{mathrm{Rank}_Y}}

Поэтому в данном контексте для оценки взаимосвязи между двумя непрерывными переменными выбран коэффициент корреляции Спирмена .

Если две или более независимых непрерывных переменных демонстрируют высокую попарную корреляцию Спирмена (например, ≥ 0,6 или 60%), это говорит о том, что они несут схожую информацию. В таких случаях целесообразно сохранять только одну из них — либо переменную, наиболее сильно коррелирующую с целевой переменной (по умолчанию), либо ту, которая считается наиболее релевантной на основе экспертных знаний в данной области.

1.2.2 Статистический критерий для исследования: Взаимосвязь между качественными объясняющими переменными.

Как и при анализе взаимосвязи между объясняющей переменной и целевой переменной (по умолчанию), здесь используется коэффициент Крамера V для оценки того, предоставляют ли две или более качественные переменные одинаковую информацию.

Например, если коэффициент Крамера V превышает 0,5 (50%), переменные считаются тесно связанными и могут отражать схожую информацию. Поэтому их не следует включать в модель одновременно, так как это приведет к избыточности.

Выбор переменной для сохранения может основываться на статистических критериях — например, сохранение переменной, наиболее тесно связанной с целевым показателем (по умолчанию) — или на экспертных знаниях в предметной области, путем выбора переменной, которая считается наиболее релевантной с точки зрения бизнеса.

Как вы могли заметить, в рамках процесса уменьшения размерности мы изучаем взаимосвязь между непрерывной и категориальной переменными, поскольку, в отличие от корреляции Спирмена или коэффициента Крамера V, прямого индикатора для измерения силы связи не существует.

Для тех, кому это интересно, один из возможных подходов — использование коэффициента инфляции дисперсии (VIF). Мы рассмотрим это в будущей публикации. Здесь это не обсуждается, поскольку методология вычисления VIF может отличаться в зависимости от того, используете ли вы Python или R. Эти конкретные аспекты будут рассмотрены в следующей публикации.

В следующем разделе мы применим все обсуждавшиеся до сих пор методы к реальным данным, а именно к набору данных, представленному в нашей предыдущей статье.

1.3 Применение на реальных данных

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

Анализируются три типа корреляций (для каждого используется свой статистический тест, описанный выше):

  • Корреляция между непрерывными переменными и переменной по умолчанию (критерий Краскала-Уоллиса)
  • Корреляции между качественными переменными и переменными по умолчанию (коэффициент Крамера V).
  • Множественные корреляции между непрерывными переменными (тест Спирмена)
  • Множественные корреляции между качественными переменными (коэффициент Крамера V)

1.3.1 Корреляция между непрерывными переменными и переменной по умолчанию

В базе данных поездов у нас есть семь непрерывных переменных:

  • доход человека
  • возраст человека
  • person_emp_length
  • сумма займа
  • loan_int_rate
  • loan_percent_income

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

def correlation_quanti_def_KW(database: pd.DataFrame, continuous_vars: list, target: str) -> pd.DataFrame: «»» Вычисляет p-значения критерия Краскала-Уоллиса между непрерывными переменными и категориальной (бинарной или многоклассовой) целевой переменной. Параметры ———- database : pd.DataFrame Входной набор данных continuous_vars : list Список имен непрерывных переменных target : str Имя целевой переменной (категориальной) Возвращает ——- pd.DataFrame Таблица с переменными и соответствующими p-значениями «»» results = [] for var in continuous_vars: # Удаляем NA для текущей переменной + целевой переменной df = database[[var, target]].dropna() # Группируем значения по целевым категориям groups = [ group[var].values for _, group in df.groupby(target) ] # Критерий Краскала-Уоллиса требует как минимум 2 группы if len(groups) < 2: p_value = None else: try: stat, p_value = kruskal(*groups) except ValueError: # Обрабатывает крайние случаи (например, постоянные значения) p_value = None results.append({ "variable": var, "p_value": p_value, "stats_kw": stat if 'stat' in locals() else None }) return pd.DataFrame(results).sort_values(by="p_value") continuous_vars = [ "person_income", "person_age", "person_emp_length", "loan_amnt", "loan_int_rate", "loan_percent_income", "cb_person_cred_hist_length" ] target = "def" result = correlation_quanti_def_KW( database=train_imputed, continuous_vars=continuous_vars, target=target ) print(result) # Сохраняем результаты в xlsx result.to_excel(f"{data_output_path}/correlation/correlations_kw.xlsx", index=False)

9ac7cc6855dcf44f93a8b8af990b8d88

Сравнивая значения p с уровнем значимости 5%, мы видим, что все они ниже порогового значения. Следовательно, мы отвергаем нулевую гипотезу для всех переменных и заключаем, что каждая непрерывная переменная значимо связана с переменной, определяющей значение по умолчанию.

1.3.2 Корреляции между качественными переменными и переменными по умолчанию (коэффициент Крамера V).

В базе данных у нас есть четыре качественные переменные:

  • владение_домом_человеком
  • cb_person_default_on_file
  • намерение_займа
  • кредитный рейтинг

В таблице ниже представлена сила связи между этими категориальными переменными и переменной, определяющей значение по умолчанию, измеренная с помощью коэффициента Крамера V.

def cramers_v_with_target(database: pd.DataFrame, categorical_vars: list, target: str) -> pd.DataFrame: «»» Вычисляет статистику хи-квадрат и коэффициент Крамера V между несколькими категориальными переменными и целевой переменной. Параметры ———- database : pd.DataFrame Входной набор данных categorical_vars : list Список категориальных переменных target : str Целевая переменная (категориальная) Возвращает ——- pd.DataFrame Таблица с переменной, хи-квадрат и коэффициентом Крамера V «»» results = [] for var in categorical_vars: # Удаляем пропущенные значения df = database[[var, target]].dropna() # Таблица сопряженности contingency_table = pd.crosstab(df[var], df[target]) # Пропускаем, если недостаточно данных if contingency_table.shape[0] < 2 or contingency_table.shape[1] < 2: results.append({ "variable": var, "chi2": None, "cramers_v": None }) continue try: chi2, _, _, _ = chi2_contingency(contingency_table) n = contingency_table.values.sum() r, k = contingency_table.shape v = np.sqrt((chi2 / n) / min(k - 1, r - 1)) except Exception: chi2, v = None, None results.append({ "variable": var, "chi2": chi2, "cramers_v": v }) result_df = pd.DataFrame(results) # Option : tri par importance return result_df.sort_values(by="cramers_v", ascending=False) qualitative_vars = [ "person_home_ownership", "cb_person_default_on_file", "loan_intent", "loan_grade", ] result = cramers_v_with_target( database=train_imputed, categorical_vars=qualitative_vars, target=target ) print(result) # Сохранение результатов в xlsx result.to_excel(f"{data_output_path}/correlation/cramers_v.xlsx", index=False)

da45dca376f7c1fc04f6efc4226497a2

Результаты показывают, что большинство переменных связаны с переменной, обозначающей дефолт. Для переменной loan_grade наблюдается умеренная связь , в то время как другие категориальные переменные демонстрируют слабую связь .

1.3.3 Множественные корреляции между непрерывными переменными (тест Спирмена)

Для выявления непрерывных переменных, предоставляющих схожую информацию, мы используем коэффициент корреляции Спирмена с пороговым значением 60% . То есть, если две непрерывные объясняющие переменные демонстрируют коэффициент корреляции Спирмена выше 60%, они считаются избыточными и не содержат схожей информации.

def correlation_matrix_quanti(database: pd.DataFrame, continuous_vars: list, method: str = «spearman», as_percent: bool = False) -> pd.DataFrame: «»» Вычисляет корреляционную матрицу для непрерывных переменных. Параметры ———- database : pd.DataFrame Входной набор данных continuous_vars : list Список непрерывных переменных method : str Метод корреляции («pearson» или «spearman»), по умолчанию = «spearman» as_percent : bool Если True, возвращает значения в процентах Возвращает ——- pd.DataFrame Корреляционная матрица «»» # Выбираем релевантные данные и удаляем строки с NA df = database[continuous_vars].dropna() # Вычисляем корреляционную матрицу corr_matrix = df.corr(method=method) # Преобразуем в проценты при необходимости if as_percent: corr_matrix = corr_matrix * 100 return corr_matrix corr = correlation_matrix_quanti( database=train_imputed, continuous_vars=continuous_vars, method=»spearman» ) print(corr) # Сохранение результатов в xlsx corr.to_excel(f»{data_output_path}/correlation/correlation_matrix_spearman.xlsx»)

f56f57907680afb3b798c0a375024436

Мы выявили две пары переменных, которые сильно коррелируют между собой:

  • Пара (cb_person_cred_hist_length, person_age) с корреляцией 85%
  • Пара (loan_percent_income, loan_amnt) с высокой корреляцией

Для моделирования следует сохранить только одну переменную из каждой пары. Мы используем статистические критерии для выбора переменной, наиболее тесно связанной с переменной по умолчанию. В данном случае мы сохраняем переменные person_age и loan_percent_income.

1.3.4 Множественные корреляции между качественными переменными (коэффициент Крамера V)

В этом разделе мы анализируем взаимосвязи между категориальными переменными. Если две категориальные переменные связаны коэффициентом Крамера V, превышающим 60%, одну из них следует исключить из списка потенциальных факторов риска, чтобы избежать включения в модель сильно коррелированных переменных.

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

В таблице ниже представлена матрица Крамера V, вычисленная для каждой пары категориальных объясняющих переменных.

def cramers_v_matrix(database: pd.DataFrame, categorical_vars: list, corrected: bool = False, as_percent: bool = False) -> pd.DataFrame: «»» Вычисляет корреляционную матрицу Крамера V для категориальных переменных. Параметры ———- database : pd.DataFrame Входной набор данных categorical_vars : list Список категориальных переменных corrected : bool Применяет коррекцию смещения (рекомендуется) as_percent : bool Возвращает значения в процентах Возвращает ——- pd.DataFrame Матрица Крамера V «»» def cramers_v(x, y): # Удаляем значения NA df = pd.DataFrame({«x»: x, «y»: y}).dropna() contingency_table = pd.crosstab(df[«x»], df[«y»]) если contingency_table.shape[0] < 2 или contingency_table.shape[1] < 2: вернуть np.nan chi2, _, _, _ = chi2_contingency(contingency_table) n = contingency_table.values.sum() r, k = contingency_table.shape phi2 = chi2 / n если исправлено: # Коррекция Бергсмы phi2_corr = max(0, phi2 - ((k-1)*(r-1)) / (n-1)) r_corr = r - ((r-1)**2) / (n-1) k_corr = k - ((k-1)**2) / (n-1) denom = min(k_corr - 1, r_corr - 1) иначе: denom = min(k - 1, r - 1) если denom <= 0: вернуть np.nan np.sqrt(phi2_corr / denom) если исправлено, иначе np.sqrt(phi2 / denom) # Инициализация матрицы n = len(categorical_vars) matrix = pd.DataFrame(np.zeros((n, n)), index=categorical_vars, columns=categorical_vars) # Заполнение матрицы for i, var1 in enumerate(categorical_vars): for j, var2 in enumerate(categorical_vars): if i <= j: value = cramers_v(database[var1], database[var2]) matrix.loc[var1, var2] = value matrix.loc[var2, var1] = value # Преобразование в проценты if as_percent: matrix = matrix * 100 return matrix matrix = cramers_v_matrix( database=train_imputed, categorical_vars=qualitative_vars, ) print(matrix) # Сохранение результатов в xlsx matrix.to_excel(f"{data_output_path}/correlation/cramers_v_matrix.xlsx")

6de2209fbb9eb6f689edd884bbd48271

Из этой таблицы, используя пороговое значение в 60%, мы видим, что только одна пара переменных имеет сильную взаимосвязь: (loan_grade, cb_person_default_on_file). Мы сохраняем переменную loan_grade , поскольку она сильнее связана с переменной default.

На основе проведенного анализа мы предварительно отобрали 9 переменных для следующих этапов. Две переменные были исключены в ходе анализа корреляций между непрерывными переменными, и одна переменная была исключена в ходе анализа корреляций между категориальными переменными.

Заключение

Цель этой статьи — показать, как измерять различные взаимосвязи между переменными в модели кредитного скоринга.

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

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

В заключение мы показали, что анализ взаимосвязей между переменными также помогает уменьшить размерность за счет выявления мультиколлинеарности, особенно когда переменные относятся к одному типу.

Для двух непрерывных объясняющих переменных можно использовать коэффициент корреляции Спирмена с пороговым значением (например, 60%). Если коэффициент корреляции Спирмена превышает это значение, обе переменные считаются избыточными и не должны быть включены в модель одновременно. В этом случае можно выбрать одну из переменных, исходя из ее связи с основной переменной, или на основе экспертных знаний в данной области.

Для двух категориальных объясняющих переменных мы снова используем коэффициент Крамера V. Установив пороговое значение (например, 50%), мы можем предположить, что если коэффициент Крамера V превышает это значение, переменные предоставляют схожую информацию. В этом случае следует сохранить только одну из двух переменных — либо на основании ее дискриминационной способности, либо на основании экспертной оценки.

На практике мы применили эти методы к набору данных, обработанному в нашей предыдущей статье. Хотя этот подход эффективен, он не является самым надежным методом отбора переменных. В нашей следующей статье мы представим более надежный подход к предварительному отбору переменных в модели оценки.

Источник изображений

Все изображения и визуализации в этой статье были созданы автором с использованием Python (pandas, matplotlib, seaborn и plotly) и Excel, если не указано иное.

Ссылки

[1] Лоренцо Беретта и Алессандро Сантаньелло.
Алгоритмы заполнения пропущенных данных методом ближайшего соседа: критическая оценка.
Национальная медицинская библиотека, 2016.

[2] Nexialog Consulting.
Traitement des données manquantes в банковской среде.
Рабочий документ, 2022 год.

[3] Джон Т. Хэнкок и Таги М. Хошгофтаар.
Обзор категориальных данных для нейронных сетей.
Журнал больших данных, 7(28), 2020.

[4] Мелисса Дж. Азур, Элизабет А. Стюарт, Константин Франгакис и Филип Дж. Лиф.
Метод множественной импутации с помощью цепных уравнений: что это такое и как он работает?
Международный журнал методов психиатрических исследований, 2011.

[5] Маджид Сармад.
Надежный анализ данных для факторных экспериментальных планов: усовершенствованные методы и программное обеспечение.
Кафедра математических наук, Даремский университет, Англия, 2006.

[6] Дэниел Дж. Стеховен и Питер Бюльманн.
MissForest — Непараметрический метод восполнения пропущенных значений в данных смешанного типа. Биоинформатика, 2011.

[7] Суприянто Вибисоно, Анвар и Амин.
Обнаружение многомерных аномалий погоды с использованием алгоритма кластеризации DBSCAN.
Журнал физики: Серия конференций, 2021.

[8] Лаборда, Дж., и Рю, С. (2021). Выбор признаков в модели кредитного скоринга. Математика, 9(7), 746.

Данные и лицензирование

Набор данных, использованный в этой статье, распространяется под лицензией Creative Commons Attribution 4.0 International (CC BY 4.0) .

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

Для получения более подробной информации см. официальный текст лицензии: CC0: Общественное достояние.

Отказ от ответственности

Ответственность за любые оставшиеся ошибки или неточности несет автор. Отзывы и исправления приветствуются.

Источник: towardsdatascience.com

✅ Найденные теги: Python, Кредитный Скоринг, Модели, Надежность, новости, Создание

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Карта и график: вклад стран Африки в проект AfriMed-QA, лидирует Нигерия с 50,9%.
Клод, OpenClaw и новая реальность: агенты искусственного интеллекта уже здесь — и вместе с ними хаос.
Схема структуры звезды: давление и гравитация, внутреннее строение.
Дети изучают глобус в классе, школьный урок географии.
Космическая перчатка держит загадочную жидкость на фоне космоса, загадки и вопросительные знаки.
Старт ракеты в небо с пусковой площадки, клубы дыма и яркое пламя двигателей.
Материнская плата MSI MEG Z790 ACE с поддержкой игрового процессора и дизайном с драконами.
Запуск космической ракеты в небо, огненные струи.
Запуск ракеты с усилителями в космос на фоне голубого неба.
Image Not Found
Карта и график: вклад стран Африки в проект AfriMed-QA, лидирует Нигерия с 50,9%.

AfriMed-QA: Сравнительный анализ больших языковых моделей для глобального здравоохранения

воспроизведение видео без звука зацикливание пауза видео без звука зацикливание включение звука видео выключение звука Мы представляем Afrimed-QA — набор контекстно релевантных наборов данных для оценки эффективности программ обучения гуманитарным и социальным наукам в решении задач по…

Апр 8, 2026
Клод, OpenClaw и новая реальность: агенты искусственного интеллекта уже здесь — и вместе с ними хаос.

Клод, OpenClaw и новая реальность: агенты искусственного интеллекта уже здесь — и вместе с ними хаос.

Даттарадж Рао, Персистентные системы Автор создал текст, используя знак Близнецов. Эпоха агентного ИИ уже наступила — хотим мы этого или нет. То, что началось с невинного обмена вопросами и ответами в ChatGPT в 2022 году, превратилось в…

Апр 8, 2026
Схема структуры звезды: давление и гравитация, внутреннее строение.

Всплески гравитационных волн подтвердили разрыв в распределении масс черных дыр. Раньше подтвердить его наличие не удавалось

Раньше подтвердить его наличие не удавалось Астрономы нашли достаточно надежное доказательство существования разрыва в распределении масс черных дыр, который возникает из-за взрывов их звезд-прародителей как парно-нестабильных сверхновых. В пользу наличия разрыва говорят свойства распределения масс вторичных черных дыр…

Апр 8, 2026
Дети изучают глобус в классе, школьный урок географии.

Почему отказ от развития мышления народа — это стратегическое поражение

На первый взгляд, элитам выгодно, чтобы народ не мыслил слишком глубоко. Управлять людьми с клиповым сознанием, живущими эмоциями и короткими импульсами, гораздо проще: дёрнул за ниточку страха — получил нужную реакцию, пообещал лёгких денег — купил лояльность.…

Апр 8, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых