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

Метрики ошибок

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

Средняя ошибка

Средняя ошибка (ME) — это среднее значение ошибок.

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

Он рассчитывается следующим образом:

Средняя процентная ошибка

Средняя процентная ошибка (MPE) представляет собой процент суммы отношения прогнозируемых ошибок к фактическим целевым значениям.

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

Он рассчитывается следующим образом:

Средняя абсолютная ошибка

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

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

Он рассчитывается следующим образом:

Средняя абсолютная ошибка в процентах

Средняя абсолютная ошибка в процентах (MAPE) представляет собой процент абсолютной суммы отношения прогнозируемых ошибок к фактическим целевым значениям.

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

Он рассчитывается следующим образом:

Среднеквадратическая ошибка

Среднеквадратическая ошибка (MSE) — это среднее квадратов разностей между прогнозируемыми и фактическими значениями.

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

Он рассчитывается следующим образом:

Среднеквадратичная ошибка

Среднеквадратическая ошибка (RMSE) представляет собой квадратный корень из MSE и используется для выражения ошибки в тех же единицах, что и целевая переменная.

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

Он рассчитывается следующим образом:

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

Матрица путаницы

Матрица путаницы, также известная как матрица классификации или матрица непредвиденных обстоятельств, представляет собой таблицу, которая позволяет нам сравнивать предсказанные метки с фактическими метками, чтобы визуализировать производительность модели классификации. Таким образом, концепция интересующего класса в основном связана с тем фактом, что в каждой задаче машинного обучения нас больше интересует данный класс, который может быть более «дорогим». Это становится нашей областью исследования. Например, при обнаружении рака молочной железы наш основной класс интереса — является ли опухоль злокачественной (раковой), а наш альтернативный класс — является ли опухоль доброкачественной (нераковой). Точно так же для всех других проблем мы выбираем интересующий класс, который становится фокусом всей проблемы науки о данных, которую мы пытаемся решить.

Матрица путаницы/классификации/непредвиденных обстоятельств, построенная следующим образом:

  • True Positive (TP): модель правильно предсказала интересующий класс.
  • Ложный положительный результат (FP): модель неправильно предсказала альтернативный класс как интересующий нас класс.
  • Ложноотрицательный (FN): модель неправильно предсказала интересующий класс как альтернативный класс.
  • True Negative (TN): модель правильно предсказала альтернативный класс.

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

Точность

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

Он рассчитывается следующим образом:

Частота ошибок

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

Он рассчитывается следующим образом:

Чувствительность или отзыв или истинная положительная скорость (TPR)

  • Доля правильно классифицированных образцов интересующего класса от общего числа фактических образцов интересующего класса.
  • Также известен как отзыв или истинно положительный показатель.
  • Вычисляет способность модели правильно идентифицировать интересующий класс.
  • Высокая чувствительность желательна, когда правильное определение интересующего класса имеет решающее значение.
  • Отвечает на вопрос: "Насколько хорошо модель может идентифицировать интересующий класс?"

Он рассчитывается следующим образом:

Промах или ложноотрицательный результат (FNR)

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

Он рассчитывается следующим образом:

Специфика

  • Доля правильно классифицированных выборок альтернативных классов от общего числа фактических выборок альтернативных классов.
  • Вычисляет способность модели правильно идентифицировать альтернативный класс.
  • Высокая специфичность желательна, когда правильная идентификация альтернативного класса имеет решающее значение.
  • Отвечает на вопрос: «Насколько хорошо модель может идентифицировать альтернативный класс?».

Он рассчитывается следующим образом:

Ложноположительный показатель (FPR)

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

Он рассчитывается следующим образом:

Точность или положительная прогностическая ценность (PPV)

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

Он рассчитывается следующим образом:

Коэффициент ложного обнаружения (FDR)

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

Он рассчитывается следующим образом:

Отрицательная прогностическая ценность (NPV)

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

Он рассчитывается следующим образом:

Частота ложных пропусков

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

Он рассчитывается следующим образом:

Распространенность

  • Доля образцов интересующего класса от общего числа образцов.
  • Вычисляет частоту интересующего класса в наборе данных.
  • Предоставляет информацию о доле интересующего класса в наборе данных.
  • Наиболее часто используется при анализе болезни

Он рассчитывается следующим образом:

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

Если доступна информация о распространенности, мы должны изменить наши расчеты PPV и NPV следующим образом:

Оценка F1

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

Он рассчитывается следующим образом:

Коэффициент корреляции Мэтьюза (MCC)

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

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

Его можно рассчитать следующим образом:

Реализация кода только с использованием Numpy

Эта реализация определяет различные показатели производительности как методы класса ClassificationMetrics, который принимает фактические метки y и предсказанные метки y_hat в качестве аргументов для своего конструктора. Каждый метод вычисляет определенную метрику производительности и возвращает ее значение. Обратите внимание, что в этой реализации предполагается, что метки представляют собой двоичные массивы, в которых 1 и 0 представляют интересующий класс и альтернативные классы соответственно.

import numpy as np

class ClassificationMetrics:
    '''
    This class implements all the classification metric(s) in Numpy.
    The functions can be called to calculate any metric(s).
    @param y_true: actual target labels
    @param y_pred: predicted target labels
    @param prevalence: known prevalence
    @return <np.longdouble>
    
    Owner: Debanjan Saha
    Published: Medium (2023-02-17)
    License: MIT
    '''
    def __init__(self, y_true, y_pred, prevalence=None):
        self.y_true = y_true
        self.y_pred = y_pred
        self.tp, self.tn, self.fp, self.fn = self._get_confusion_matrix()
        self.prevalence = prevalence

    def _get_confusion_matrix(self):
        tp = ((self.y_true == 1) & (self.y_pred == 1)).sum()
        tn = ((self.y_true == 0) & (self.y_pred == 0)).sum()
        fp = ((self.y_true == 0) & (self.y_pred == 1)).sum()
        fn = ((self.y_true == 1) & (self.y_pred == 0)).sum()
        return tp, tn, fp, fn
    
    def accuracy(self):
        return (self.tp + self.tn) / (self.tp + self.tn + self.fp + self.fn)
        
    def error_rate(self):
        return 1 - self.accuracy()

    def sensitivity(self):
        return self.tp / (self.tp + self.fn)

    def false_negative_rate(self):
        return self.fn / (self.tp + self.fn)

    def specificity(self):
        return self.tn / (self.tn + self.fp)

    def false_positive_rate(self):
        return self.fp / (self.tn + self.fp)

    def precision(self):
        return self.tp / (self.tp + self.fp)

    def negative_predictive_value(self):
        return self.tn / (self.tn + self.fn)

    def false_discovery_rate(self):
        return self.fp / (self.tp + self.fp)

    def false_omission_rate(self):
        return self.fn / (self.tn + self.fn)

    def prevalence(self):
        return (self.tp + self.fn) / (self.tp + self.tn + self.fp + self.fn)

    def f1_score(self):
        precision = self.precision()
        sensitivity = self.sensitivity()
        return 2 * precision * sensitivity / (precision + sensitivity)

    def adjusted_ppv(self):
        if self.prevalence is None:
            raise ValueError("Prevalence value must be provided to calculate adjusted PPV.")
        else:
            return self.prevalence * self.sensitivity() / ((self.prevalence * self.sensitivity()) + ((1 - self.prevalence) * self.false_positive_rate()))

    def adjusted_npv(self):
        if self.prevalence is None:
            raise ValueError("Prevalence value must be provided to calculate adjusted NPV.")
        else:
            return self.tn / ((self.tn * (1 - self.prevalence)) + (self.fn * self.prevalence))

    def matthews_correlation_coefficient(self):
        num = (self.tp * self.tn) - (self.fp * self.fn)
        denom = ((self.tp + self.fp) * (self.tp + self.fn) * (self.tn + self.fp) * (self.tn + self.fn)) ** 0.5
        if denom == 0:
            return 0
        else:
            return num / denom

Заключение

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

Крайне важно запомнить все эти формулы, потому что они могут понадобиться вам в повседневных задачах по науке о данных или во время собеседования, но запомнить их все может быть сложно из-за их большого количества. Но не волнуйтесь! Просто вспомните нотацию матрицы путаницы, которую я использовал, а затем изучите метрики, используя ячейки матрицы (n11, n12, n21, n22). Надеюсь, это поможет!

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