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

Image by author and CHATGPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1.1 Оценка прогнозирующей способности

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

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

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

  • недефолт (def = 0)
  • дефолт (def = 1)

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

  • диаграммы размаха для сравнения медиан и дисперсии
  • графики плотности (KDE) для сравнения распределений
  • эмпирические функции распределения (ECDF)

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

Отличается ли распределение переменной между дефолтерами и недефолтерами?

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

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

def plot_continuous_vs_categorical(
    df,
    continuous_var,
    categorical_var,
    category_labels=None,
    figsize=(12, 10),
    sample=None
):
    """
     Сравнение непрерывной переменной по категориям
    с использованием boxplot, KDE и ECDF (макет 2x2).
    """

    sns.set_style("white")

    data = df[[continuous_var, categorical_var]].dropna().copy()

    # Дополнительная выборка
    if sample:
        data = data.sample(sample, random_state=42)

    categories = sorted(data[categorical_var].unique())

    # Сопоставление меток (необязательно)
    if 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=axe