Обнаружение выбросов с помощью Python
Обнаружение выбросов в машинном обучении с помощью проверки гипотез.
В этой статье я расскажу вам об обнаружении выбросов в машинном обучении. Выбросы – это термин, обычно используемый аналитиками и специалистами по обработке данных, поскольку он требует особого внимания. Если его игнорировать, это может привести к совершенно неверным оценкам.
Проще говоря, обнаружение выброса – это наблюдение, которое выбивается из общей картины в выборке и расходится с ней.
Что такое выброс?
Выброс – это наблюдение, которое численно отличается от остальных данных или, в двух словах, представляет собой значение, выходящее за пределы допустимого диапазона. Давайте рассмотрим конкретный пример, чтобы посмотреть, что происходит с набором данных без выбросов.
Данные без выбросов |
Данные с выбросами |
|
---|---|---|
Данные |
1, 2, 3, 3, 4, 5, 4 |
1, 2, 3, 3, 4, 5, 400 |
Среднее |
3.142 |
59.714 |
Медиана |
3 |
3 |
Стандартное отклонение |
1.345185 |
150.057 |
|
|
|
Как видите, набор данных с выбросами имеет существенно отличающееся среднее значение и стандартное отклонение. В первом сценарии мы скажем, что среднее значение составляет 3,14. Но с выбросом среднее значение достигнет 59,71. Это полностью изменило бы оценку.
Возьмем конкретный пример выброса. В компании из 50 сотрудников 45 человек с ежемесячной зарплатой 6,000 рупий, 5 опытных специалистов с ежемесячной зарплатой 100,000 рупий каждый. Если посчитать среднее значение, то среднемесячная зарплата сотрудников компании составляет 14,500 рупий, и это даст нам искривленную общую картину.
Но если взять медиану зарплаты, то это будет 6000 рупий, что гораздо лучше усредненного значения. По этой причине медиана здесь является подходящей мерой для оценки среднего. И вы можете увидеть эффект выброса.
А теперь давайте кратко рассмотрим основные причины выбросов, прежде чем приступить к задаче обнаружения выбросов:
- Ошибки ввода данных: человеческие ошибки, например, ошибки, вызванные во время сбора, записи или ввода данных, могут вызвать выбросы в данных.
- Ошибки измерения: самый частый источник выбросов. Это происходит, когда используемый измерительный прибор оказывается неисправным.
- Естественные выбросы: когда выброс не является искусственным (из-за ошибки), он является естественным. К этой категории относится большинство реальных данных.
Обнаружение выбросов в машинном обучении с помощью проверки гипотез
Теперь я буду использовать язык программирования Python для задачи обнаружения выбросов в машинном обучении.
Выбросы могут быть двух типов: одномерные и многомерные. Выше мы обсуждали пример с одномерным выбросом. Эти выбросы можно найти, когда мы посмотрим на распределение одной переменной. Многомерные выбросы – это выбросы в n-мерном пространстве.
Проверка гипотез – распространенный метод обнаружения выбросов в машинном обучении. Проверка гипотез – это метод проверки утверждения или гипотезы о параметре в совокупности с использованием данных, измеренных в выборке. В этом методе мы проверяем гипотезу, определяя вероятность того, что статистическая величина выборки могла бы быть выбрана, если бы гипотеза относительно параметра общей совокупности была бы верной.
Цель проверки гипотезы – определить вероятность того, что параметр совокупности, такой как среднее значение, вероятно, будет истинным. Проверка гипотез состоит из четырех этапов:
- Формулировка предположения.
- Определение критериев для принятия решения.
- Расчет статистики теста.
- Принятие решения.
Теперь давайте посмотрим, как использовать язык программирования Python для реализации проверки гипотез для задачи обнаружения выбросов в машинном обучении:
import numpy as np import scipy.stats as stats x = np.array([12,13,14,19,21,23]) y = np.array([12,13,14,19,21,23,45]) def grubbs_test(x): n = len(x) mean_x = np.mean(x) sd_x = np.std(x) numerator = max(abs(x-mean_x)) g_calculated = numerator/sd_x print("Grubbs Calculated Value:",g_calculated) t_value = stats.t.ppf(1 - 0.05 / (2 * n), n - 2) g_critical = ((n - 1) * np.sqrt(np.square(t_value))) / (np.sqrt(n) * np.sqrt(n - 2 + np.square(t_value))) print("Grubbs Critical Value:",g_critical) if g_critical > g_calculated: print("From grubbs_test we observe that calculated value is lesser than critical value, Accept null hypothesis and conclude that there is no outliers\n") else: print("From grubbs_test we observe that calculated value is greater than critical value, Reject null hypothesis and conclude that there is an outliers\n") grubbs_test(x) grubbs_test(y)
Результат:
Вычисленное значение Grubbs: 1.4274928542926593
Критическое значение Grubbs: 1.887145117792422
Из grubbs_test мы видим, что вычисленное значение меньше критического значения, принимаем нулевую гипотезу и делаем вывод об отсутствии выбросов
Вычисленное значение Grubbs: 2.2765147221587774
Критическое значение Grubbs: 2,019968507680656
Из grubbs_test мы видим, что вычисленное значение больше критического значения, отклоняем нулевую гипотезу и делаем вывод, что есть выбросы
Одна из основных проблем машинного обучения – выбросы. Если вы не будете учитывать выбросы в данных, это приведет к снижению производительности вашей модели машинного обучения.
Надеюсь, вам понравилась эта статья о задаче обнаружения выбросов в машинном обучении с использованием проверки гипотез и языка программирования Python.