Комплексный анализ пяти популярных показателей

Введение

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

В этой статье мы рассмотрим пять популярных показателей: среднюю абсолютную ошибку (MAE), среднюю абсолютную ошибку в процентах (MAPE), среднеквадратичную ошибку (MSE), среднеквадратичную ошибку (RMSE) и R². К концу этой статьи вы сможете правильно понять, что именно каждая метрика сообщает о моделях и их производительности.

Конечно, метрики, упомянутые в этой статье, — не единственные доступные для оценки моделей регрессии, но они чрезвычайно популярны на соревнованиях Kaggle и других задачах регрессии, которые вы найдете в Интернете. Для получения дополнительной информации о метриках регрессии, в том числе о тех, которые не рассматриваются в этой статье, не стесняйтесь взглянуть на эту ссылку на веб-сайте Scikit-learn.

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

# Importing MAE from the sklearn library
from sklearn.metrics import mean_absolute_error

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

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

MAE = Σ|Yᵢ — Ŷᵢ| ÷ п

Где:

Yᵢ = представляет истинное значение образца iᵗʰ

Ŷᵢ = представляет прогнозируемое значение для выборки iᵗʰ

|…| = Функция абсолютного значения, т. е. расстояние между двумя значениями

Σ = сумма абсолютных разностей по всем образцам

n = общее количество выборок данных

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

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

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

Вот как вы могли бы реализовать оценку MAE в Python, используя библиотеку Scikit-learn:

# True and predicted values
y_true = np.array([5, 2, 7, 3, 9])
y_pred = np.array([4.2, 2.2, 6.4, 3.9, 10.5])

# Computing MAE score
mae = mean_absolute_error(y_true, y_pred)

# Printing results
print(f'Mean Absolute Error = {mae}')
Mean Absolute Error = 0.7999999999999999

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

# Importing the MAPE metric from sklearn
from sklearn.metrics import mean_absolute_percentage_error

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

MAPE = (Σ[(|Yᵢ — Ŷᵢ|) ÷ |Yᵢ|] ÷ n) * 100

Где:

Yᵢ = представляет истинное значение образца iᵗʰ

Ŷᵢ = представляет прогнозируемое значение для выборки iᵗʰ

|…| = Функция абсолютного значения, т. е. расстояние между двумя значениями

Σ = сумма квадратов разностей между истинными и прогнозируемыми значениями

n = общее количество выборок данных

Для вычисления оценки MAPE мы применяем подход, очень похожий на оценку MAE. Начнем с определения абсолютного значения разницы между истинным значением Yᵢ и прогнозируемым значением Ŷᵢ, и затем мы делим его на абсолютное значение истинного значения |Yᵢ|. Это дает нам индивидуальную абсолютную процентную ошибку для каждой точки данных. Мы суммируем эти значения и делим их на общее количество точек данных n. Чтобы получить процентные значения, мы умножаем результат на 100.

Измеряя точность нашей модели в процентах, MAPE позволяет нетехническим заинтересованным сторонам чрезвычайно легко понять, что она передает. Если наша модель прогнозирования цен на жилье имеет MAPE, равную 4, это означает, что в среднем наша модель отклоняется в прогнозировании цен на 4%.

Вот как вы обычно применяете оценку MAPE к Python:

# True and predicted values
y_true = np.array([5, 2, 7, 3, 9])
y_pred = np.array([4.2, 2.2, 6.4, 3.9, 10.5])

# Computing the MAPE score
mape = mean_absolute_percentage_error(y_true, y_pred)
mape = mape * 100 # Converting decimals to percentage

# Printing results
print(f'Mean Absolute Percentage Error = {mape}%')
Mean Absolute Percentage Error = 16.247619047619047%

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

# Importing MSE from sklearn
from sklearn.metrics import mean_squared_error

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

MSE = Σ(Yᵢ — Ŷᵢ)² ÷ n

Где:

Yᵢ = представляет истинное значение образца iᵗʰ

Ŷᵢ = представляет прогнозируемое значение для выборки iᵗʰ

(…)² = представляет квадрат разницы между истинными и прогнозируемыми значениями

Σ = сумма квадратов разностей между истинными и прогнозируемыми значениями

n = общее количество выборок данных

Оценка MSE рассчитывается путем вычисления разницы между истинным значением Yᵢи прогнозируемым значением Ŷᵢ. Затем разности возводятся в квадрат, поэтому мы исключаем отрицательные остатки, и эти квадраты разностей суммируются. Затем мы делим его на общее количество n выборок данных.

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

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

Вот как вы могли бы реализовать оценку MSE на Python, используя библиотеку Scikit-learn:

# True and predicted values
y_true = np.array([5, 2, 7, 3, 9])
y_pred = np.array([4.2, 2.2, 6.4, 3.9, 10.5])

# Computing the MSE score
mse = mean_squared_error(y_true, y_pred)

# Printing results
print(f'Mean Squared Error = {mse}')
Mean Squared Error = 0.82

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

Среднеквадратичную ошибку (RMSE) можно рассматривать как стандартное отклонение остатков в нашей регрессионной модели. Это просто квадратный корень из оценки MSE, и мы используем тот же точный метод библиотеки Scikit-learn для получения этой метрики. Вот его формула:

RMSE = √(Σ(Yᵢ — Ŷᵢ)² ÷ n)

Где:

Yᵢ = представляет истинное значение образца iᵗʰ

Ŷᵢ = представляет прогнозируемое значение для выборки iᵗʰ

(…)² = представляет квадрат разницы между истинными и прогнозируемыми значениями

Σ = сумма квадратов разностей между истинными и прогнозируемыми значениями

n = общее количество выборок данных

√ = представляет функцию извлечения квадратного корня

Чтобы упростить приведенную выше формулу, мы получаем квадрат разницы между Yᵢи Ŷᵢ. Мы суммируем их, делим на общее количество n образцов, а затем вычисляем его значение квадратного корня.

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

Однако его интерпретация проще, чем у MSE, поскольку его значения выражаются в тех же единицах, что и целевая переменная Y. Например, если мы строим регрессионную модель, которая прогнозирует дневную доходность определенной акции, значение RMSE, равное 2,8, будет означать, что в среднем прогнозы модели отличаются от фактической дневной доходности на 2,8%, поскольку они даны в процентных значениях.

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

Чтобы применить показатель RMSE к Python, вы по-прежнему используете метод mean_squared_error, но устанавливаете для параметра squared значение False.

# True and predicted values
y_true = np.array([5, 2, 7, 3, 9])
y_pred = np.array([4.2, 2.2, 6.4, 3.9, 10.5])

# Computing the RMSE score
rmse = mean_squared_error(y_true, y_pred,
                      squared = False) # Squared = False, returns the RMSE

# Printing results
print(f'Root Mean Squared Error = {rmse}')
Root Mean Squared Error = 0.9055385138137416

Коэффициент детерминации (R²)

# Importing the R-Squared metric from sklearn
from sklearn.metrics import r2_score

Коэффициент детерминации (оценка R²) — это мера, представляющая долю дисперсии целевой переменной, которая объясняется независимыми переменными. Это показатель того, насколько хорошо наша модель соответствует данным. Формула выглядит следующим образом:

R² = 1 — [(Σ(Yᵢ — Ŷᵢ)²) ÷ (Σ(Yᵢ — Ȳ)²)]

Где:

Yᵢ = представляет истинное значение образца iᵗʰ

Ŷᵢ = представляет прогнозируемое значение для выборки iᵗʰ

Ȳ = представляет среднее значение фактических значений

Σ = сумма квадратов разностей между истинными значениями и прогнозируемыми значениями, а также истинными значениями и средним значением истинных значений.

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

Значения оценки R², как правило, находятся в диапазоне от 0 до 1, хотя у вас могут быть и отрицательные значения. Как правило, значение ближе к 1 означает более подходящую модель. Тем не менее, важно учитывать другие показатели, такие как MAE, MSE, MAPE или RMSE, наряду с R², чтобы получить более глубокое понимание производительности модели, поскольку один только R² может вводить в заблуждение, учитывая, что он не информирует о величине отклонений между прогнозируемыми значениями. и действительные значения.

Чтобы использовать оценку R² в среде Python, выполните следующие действия:

# True and predicted values
y_true = np.array([5, 2, 7, 3, 9])
y_pred = np.array([4.2, 2.2, 6.4, 3.9, 10.5])

# Computing R-Squared score
r2 = r2_score(y_true, y_pred)

# Printing result
print(f'R² score = {r2}')
R² score = 0.875

Скорректированный R²

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

R²ₐdⱼ = 1 — [(1 — R²) * (n — 1) ÷ (n — k — 1)]

Где:

R² = коэффициент детерминации R²
n = общее количество выборок данных< br /> k = количество независимых переменных в регрессионной модели

Скорректированный R² будет наказывать вас за добавление дополнительных независимых переменных, которые не являются существенными для объяснения изменения целевой переменной, что делается для исправления того факта, что обычное R² имеет тенденцию увеличиваться с каждым новым независимым свойством, добавляемым в модель, независимо от его эффективность.
В целом скорректированный R² всегда будет меньше или равен R². Его значения имеют тенденцию быть положительными, но они также могут быть отрицательными, что обычно происходит, когда R² равно нулю.
В Scikit-learn нет специальной функции для вычисления скорректированного показателя R² регрессионной модели. Однако определить собственную функцию Adjusted R² довольно просто. Вот как это сделать:

def adjusted_r_squared(r2, X): # It takes as input the R² score and the X dataframe, containing independent features
    n = X.shape[0] # Obtaining the number of samples in the X dataframe
    k = X.shape[1] # Obtaining the number of independent variables in the X dataframe
    R2_adj = 1 - ((1 - r2) * (n - 1) / (n - k - 1))
    return R2_adj

Какая метрика лучше?

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

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

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

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

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

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

Заключение

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

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

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

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

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

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

Большое спасибо за чтение,

Луис Фернандо Торрес

ЛинкедИн

Каггл