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

Введение

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

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

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

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

Алгоритм

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

Модель f(x) и ее роль в прогнозах

В основе нашего алгоритма корректировки смещения лежит концепция f(x) — решающий фактор, определяющий наш подход к устранению дисбаланса классов. f(x) служит связующим звеном между входными функциями x и окончательными прогнозами. В бинарной классификации он действует как отображение, которое преобразует входные данные в реальные значения, выровненные с сигмовидной активацией для интерпретации вероятности. В многоклассовой классификации f(x) преобразуется в набор функций f_k​(x) , где у каждого класса k есть собственная функция, работающая синхронно с активацией softmax. Это различие играет важную роль в нашем алгоритме корректировки смещения, в котором мы используем f(x) для корректировки условий смещения и точной настройки чувствительности к дисбалансу классов.

Краткий обзор алгоритма

Концепция алгоритма проста: вычислить среднее значение f_k​(x) для каждого класса k и представить это среднее как δk​. Вычитая δk​ из f_k​(x), мы гарантируем, что ожидаемое значение f_k​(x) — δk​ становится равным 0 для каждого класса k. Следовательно, модель предсказывает, что вероятность возникновения каждого класса одинакова. Хотя это дает краткое представление об обосновании алгоритма, важно отметить, что этот подход основан на теоретических и математических основах, которые будут подробно рассмотрены в последующих разделах этой статьи.

Алгоритм для двоичного

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

Алгоритм для нескольких классов

Использование для прогнозирования: кульминация процесса обучения нашего алгоритма дает ключевой элемент — последнее вычисленное значение δk. Это значение δk инкапсулирует кумулятивную поправку члена смещения, которая была тщательно организована во время обучения. Его значение заключается в его роли в качестве основополагающего параметра для окончательного члена смещения в функции активации softmax во время прогнозирования.

Объяснение алгоритма и основные принципы

От передискретизации к корректировке веса класса, От корректировки веса класса к новому алгоритму

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

Функция потерь и дисбаланс

Мы начинаем наше путешествие, углубляясь в суть алгоритма, функцию потерь. Для нашего первоначального изложения мы рассмотрим функцию потерь, не затрагивая напрямую проблему дисбаланса классов. Давайте рассмотрим задачу бинарной классификации, где класс 1 включает 90 % наблюдений, а класс 0 — оставшиеся 10 %. Обозначив набор наблюдений из класса 1 как C1 и из класса 0 как C0, мы принимаем это в качестве отправной точки.

Функция потерь, при отсутствии адресного дисбаланса классов, принимает вид:

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

Смягчение дисбаланса: передискретизация и корректировка весов классов

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

Простая избыточная выборка.
Фундаментальный подход в нашем арсенале — простая избыточная выборка, метод, при котором мы дублируем экземпляры меньшинства в восемь раз, чтобы они соответствовали размеру большинства. В нашем иллюстративном примере, где класс меньшинства составляет 10%, а класс большинства — оставшиеся 90%, мы восьмикратно дублируем наблюдения класса меньшинства, эффективно выравнивая распределение классов. Обозначая набор повторяющихся наблюдений как D0, этот шаг преобразует нашу функцию потерь следующим образом:

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

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

От корректировки весов классов к корректировке предвзятости

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

«Прентис и Пайк (1979)… показали, что, когда модель содержит постоянный член (отрезок) для каждой категории, эти постоянные члены являются единственным коэффициентом, на который влияет неравная вероятность выбора Y» Скотт и Уайлд (1986) [ 2]. Кроме того, Мански и Лерман (1977) показывают тот же результат в настройке softmax [1].

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

Единая перспектива

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

Исследование моделирования: проверка влияния термина смещения посредством передискретизации

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

Настройка моделирования

Для этой иллюстративной цели мы сосредоточимся на упрощенном сценарии: логистическая регрессия с одной функцией. Наша модель определяется как:

где 1(.) обозначает индикаторную функцию, x_i получен из стандартного нормального распределения, а e_i​ соответствует логистическому распределению. В этом контексте мы устанавливаем f(x)=x.

Запуск моделирования:

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

Фрагмент кода Python ниже описывает процесс моделирования:

# Load Packages
import numpy as np
import statsmodels.api as sm
from imblearn.over_sampling import SMOTE, RandomOverSampler

# Set seed
np.random.seed(1)
# Create Simulation Datasets
x = np.random.normal(size = 10000)
y = (2.5 + x + np.random.logistic(size = 10000)) > 0
# Bias term is set to 2.5 and coefficient of x to 1

# The size of class 1 is 9005
print(sum(y == 1))
# The size of class 0 is 995
print(sum(y == 0))

# We want to match the size of class 0 to that of class 1
# Method 0 Don't do anything
x0 = x
y0 = y
method0 = sm.Logit(y0, sm.add_constant(x0)).fit()
print(method0.summary())  # 2.54 bias term and 0.97 x3 coefficient

# Method 1 Simple Oversampling
x1 = np.concatenate((x, np.repeat(x[y == 0], 8)))
y1 = np.concatenate((y, np.array([0] * (len(x1) - len(x)))))
method1 = sm.Logit(y1, sm.add_constant(x1)).fit()
print(method1.summary())  # 0.35 bias term and 0.98 x3 coefficient

# Method 2 SMOTE
smote = SMOTE(random_state = 1)
x2, y2 = smote.fit_resample(x[:, np.newaxis], y)
method2 = sm.Logit(y2, sm.add_constant(x2)).fit()
print(method2.summary())  # 0.35 bias term and 1 x3 coefficient

# Method 3 Random Sampling
random_sampler = RandomOverSampler(random_state=1)
x3, y3 = random_sampler.fit_resample(x[:, np.newaxis], y)
method3 = sm.Logit(y3, sm.add_constant(x3)).fit()
print(method3.summary()) # 0.35 bias term and 0.99 x3 coefficient

Полученные результаты:

Ключевые наблюдения

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

Усиление основной концепции

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

Применение алгоритма коррекции смещения к обнаружению мошенничества с кредитными картами

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

Начнем с загрузки необходимых пакетов и подготовки набора данных:

import numpy as np
import pandas as pd
import tensorflow as tf
import tensorflow_addons as tfa
from sklearn.model_selection import train_test_split
from imblearn.over_sampling import SMOTE, RandomOverSampler

# Load and preprocess the dataset
df = pd.read_csv("/kaggle/input/playground-series-s3e4/train.csv")
y, x = df.Class, df[df.columns[1:-1]]
x = (x - x.min()) / (x.max() - x.min())
x_train, x_valid, y_train, y_valid = train_test_split(x, y, test_size=0.3, random_state=1)
batch_size = 256
train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)).shuffle(buffer_size=1024).batch(batch_size)
valid_dataset = tf.data.Dataset.from_tensor_slices((x_valid, y_valid)).batch(batch_size)

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

model = tf.keras.Sequential([
    tf.keras.layers.Normalization(),
    tf.keras.layers.Dense(32, activation='swish'),
    tf.keras.layers.Dense(32, activation='swish'),
    tf.keras.layers.Dense(1)
])
optimizer = tf.keras.optimizers.Adam()
loss = tf.keras.losses.BinaryCrossentropy()
val_metric = tf.keras.metrics.AUC()

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

Шаг обучения с накоплением значений дельты

На этапе обучения мы приступаем к повышению чувствительности модели к дисбалансу классов. Здесь мы вычисляем и накапливаем сумму выходных данных модели для двух разных кластеров: delta0 и delta1. Эти кластеры имеют большое значение, представляя прогнозируемые значения, связанные с классами 0 и 1 соответственно.

# Define Training Step function
@tf.function
def train_step(x, y):
    delta0, delta1 = tf.constant(0, dtype = tf.float32), tf.constant(0, dtype = tf.float32)
    with tf.GradientTape() as tape:
        logits = model(x, training=True)
        y_pred = tf.keras.activations.sigmoid(logits)
        loss_value = loss(y, y_pred)
        # Calculate new bias term for addressing imbalance class
        if len(logits[y == 1]) == 0:
            delta0 -= (tf.reduce_sum(logits[y == 0]))
        elif len(logits[y == 0]) == 0:
            delta1 -= (tf.reduce_sum(logits[y == 1]))
        else:
            delta0 -= (tf.reduce_sum(logits[y == 0]))
            delta1 -= (tf.reduce_sum(logits[y == 1]))
    grads = tape.gradient(loss_value, model.trainable_weights)
    optimizer.apply_gradients(zip(grads, model.trainable_weights))
    return loss_value, delta0, delta1

Этап проверки: разрешение дисбаланса с помощью Delta

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

@tf.function
def test_step(x, y, delta):
    logits = model(x, training=False)
    y_pred = tf.keras.activations.sigmoid(logits + delta)  # Adjust predictions with delta
    val_metric.update_state(y, y_pred)

Использование дельта-значений для коррекции дисбаланса

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

E = 1000
P = 10
B = len(train_dataset)
N_class0, N_class1 = sum(y_train == 0), sum(y_train == 1)
early_stopping_patience = 0
best_metric = 0
for epoch in range(E):
    # init delta
    delta0, delta1 = tf.constant(0, dtype = tf.float32), tf.constant(0, dtype = tf.float32)
    print("\nStart of epoch %d" % (epoch,))
    # Iterate over the batches of the dataset.
    for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
        loss_value, step_delta0, step_delta1 = train_step(x_batch_train, y_batch_train)

        # Update delta
        delta0 += step_delta0
        delta1 += step_delta1

    # Take average of all delta values
    delta = (delta0/N_class0 + delta1/N_class1)/2
    
    # Run a validation loop at the end of each epoch.
    for x_batch_val, y_batch_val in valid_dataset:
        test_step(x_batch_val, y_batch_val, delta)

    val_auc = val_metric.result()
    val_metric.reset_states()
    print("Validation AUC: %.4f" % (float(val_auc),))
    if val_auc > best_metric:
        best_metric = val_auc
        early_stopping_patience = 0
    else:
        early_stopping_patience += 1
    
    if early_stopping_patience > P:
        print("Reach Early Stopping Patience. Training Finished at Validation AUC: %.4f" % (float(best_metric),))
        break;

Исход

В нашем приложении для обнаружения мошенничества с кредитными картами проявляется повышенная эффективность нашего алгоритма. Благодаря корректировке смещения, органично интегрированной в тренировочный процесс, мы получили впечатляющий показатель AUC, равный 0,77. Это резко контрастирует с оценкой AUC, равной 0,71, полученной без направляющей руки корректировки смещения. Глубокое улучшение производительности прогнозирования свидетельствует о способности алгоритма преодолевать тонкости дисбаланса классов, прокладывая путь к более точным и надежным прогнозам.

Рекомендации

[1] Мански, К.Ф., и Лерман, С.Р. (1977). Оценка вероятностей выбора из выборок, основанных на выборе. Econometrica: журнал Эконометрического общества, 1977–1988 гг.

[2] Скотт, А. Дж., и Уайлд, К. Дж. (1986). Подгонка логистических моделей в условиях случай-контроль или выборочной выборки. Журнал Королевского статистического общества, серия B: статистическая методология, 48(2), 170–182.