Добро пожаловать в этот учебник по обнаружению, построению графиков и обработке выбросов с помощью Python. В этом уроке мы начнем с обсуждения того, что такое выбросы и почему они важны. Затем мы рассмотрим методы обнаружения выбросов, включая графический метод и статистические тесты. Как только мы определили выбросы в наших данных, мы изучим различные подходы к их обработке, такие как их удаление или замена. На протяжении всего руководства мы будем использовать практические примеры и реальный набор данных (рис. 1-B), чтобы проиллюстрировать концепции и методы. Набор данных под названием клетки (можно найти здесь) основан на эксперименте, в котором под микроскопом измерялся диаметр клеток/спор гриба Aspergillus nidulans (рис. 1-А). Набор данных состоит из одного столбца числовых значений, представляющих диаметр ячеек в микрометрах. К концу этого руководства у вас должно быть четкое представление о том, как обнаруживать и обрабатывать выбросы в ваших данных, что позволит вам проводить более надежные и точные анализы и модели.

Оглавление:
· Каков источник выбросов?
· На что влияют выбросы?
· Визуализация выбросов< br /> ∘ Блочная диаграмма
· Выявление выбросов
Метод Z-оценки
· Обработка выбросов
Ограничение выбросов
Обрезка выбросов
· Ссылки:

Хотя в его определении могут быть вариации, выброс обычно характеризуется как точка данных, выходящая далеко за пределы ожидаемого диапазона для данной переменной или совокупности (Osborne & Overbay, 2004). Выбросы — это точки данных, которые значительно отличаются от остальной части набора данных. В научных исследованиях выбросы могут оказать существенное влияние на интерпретацию данных, поскольку они могут исказить статистический анализ, повлиять на точность прогностических моделей и исказить выводы (Osborne & Overbay, 2004).

Что является источником выбросов?

Выбросы могут быть связаны с различными механизмами или факторами, включая ошибки в данных, которые часто являются результатом человеческой ошибки, а также внутреннюю изменчивость самих данных (Anscombe & Guttman, 1960). Источник выбросов также может зависеть от конкретного домена или приложения. Например, в финансах выбросы могут быть вызваны экстремальными рыночными событиями, такими как обвал фондового рынка или внезапные изменения процентных ставок. В здравоохранении и биологии выбросы могут быть вызваны редкими заболеваниями или неожиданными реакциями на лечение.

На что влияют выбросы?

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

Визуализируйте выбросы

Блочная диаграмма

Одним из способов визуализации выбросов является использование блок-диаграмм (рис. 2). Блок-диаграммы — это тип графика, показывающий распределение набора данных. Они полезны для краткого и ясного обобщения основных характеристик данных.

Блочные диаграммы — это тип графика, который обеспечивает визуальное представление распределения набора данных по пяти основным сводным статистическим данным (рис. 2): минимальному и максимальному значениям, первому и третьему квартилям и медиане. Прямоугольник на графике представляет межквартильный диапазон (IQR), который представляет собой диапазон значений, покрывающий средние 50% данных (см. также ниже). Усы, выходящие из прямоугольника, указывают диапазон данных, который не считается выбросом. Любые точки данных, выходящие за пределы усов, отображаются как отдельные точки и считаются выбросами. Блочные диаграммы особенно полезны для сравнения распределения одной переменной по нескольким группам или условиям, позволяя легко выявлять различия в распределении или наличие выбросов.

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

В приведенном ниже коде показан пример создания коробчатых диаграмм (рис. 3) в Python с использованием библиотек matplotlib и seaborn для визуализации выбросов в фрейме данных «ячейка».

#Importing libraries
import pandas as pd
import numpy as np 
import matplotlib.pyplot as plt
import seaborn as sns

#Importing "cell" dataframe
df = pd.read_csv("cells.csv",  index_col="Cell ID")
fig, [ax1,ax2] = plt.subplots( nrows=1, ncols=2, figsize=(7,5))
# Create a boxplot using Matplotlib
ax1.boxplot(df['Diameter (micrometer)'])
# Add labels and title
ax1.set_xlabel("Data", fontsize=12)
ax1.set_ylabel('Cell  diameter', fontsize=12)
ax1.set_title('Boxplot using Matplotlib', fontsize=14)
# Create a boxplot using Seaborn
sns.boxplot(y=df['Diameter (micrometer)'],ax =ax2)
# Add labels and title
ax2.set_xlabel("Data", fontsize=12)
ax2.set_ylabel('Cell  diameter', fontsize=12)
ax2.set_title('Boxplot using Seaborn', fontsize=14)
# The plt.tight_layout() function is called to fit the plots within the figure cleanly.
# The pad parameter controls the padding between the subplots
plt.tight_layout(pad=3.1)
fig.suptitle("Visualizing outliers using boxplots", fontsize=20, y=1.01)

Обнаружение выбросов

Метод Z-оценки

Одним из широко используемых методов обнаружения выбросов является метод z-оценки. Метод z-оценки основан на понятии стандартного отклонения, которое измеряет количество вариаций или дисперсию набора данных от его среднего значения. Преобразование z-оценки вычисляет количество стандартных отклонений наблюдения от среднего значения набора данных. Как правило, выбросами считаются наблюдения с z-показателем больше 3 или меньше -3. Это связано с тем, что при нормальном распределении примерно 99,7% данных попадают в пределы трех стандартных отклонений от среднего значения. Таким образом, любое наблюдение, отличающееся от среднего более чем на три стандартных отклонения, считается выбросом.

Чтобы использовать преобразование Z-оценки для обнаружения выбросов:

  1. Рассчитайте среднее значение и стандартное отклонение набора данных.
  2. Для каждого наблюдения рассчитайте его z-показатель, используя формулу: z = (xi — μ) / σ, где x — значение наблюдения, μ — среднее значение набора данных, а σ — стандартное отклонение набора данных.
  3. Определите любые наблюдения с z-оценкой больше 3 или меньше -3.

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

Приведенный ниже код вычисляет z-показатели для столбца «Диаметр (микрометр)» в кадре данных «df». Во-первых, он вычисляет среднее значение и стандартное отклонение столбца, используя методы «.mean()» и «.std()» соответственно. Затем он вычисляет z-показатель для каждого наблюдения в столбце по формуле «z = (xi — μ) / σ», где xi — наблюдение, μ — среднее значение, а σ — стандартное отклонение. Он присваивает z-оценки новому столбцу в DataFrame под названием «Z-оценка». Затем он идентифицирует любые наблюдения с z-показателем больше 3 или меньше -3, используя логическое индексирование с символом «|». оператор (логическое ИЛИ), чтобы найти строки, в которых z-оценка больше 3 или меньше -3. Полученный DataFrame выводится на консоль. Наконец, он создает гистограмму (рис. 4) столбца «Диаметр (микрометр)», используя функцию «histplot» библиотеки Seaborn, и строит ее с помощью Matplotlib с указанным размером фигуры. Гистограмма показывает распределение данных «Диаметр (микрометры)» и может помочь определить любые потенциальные выбросы в наборе данных.

#Calculate the mean
mean = df['Diameter (micrometer)'].mean()
#Calculate the Standard deviation
std =df['Diameter (micrometer)'].std()
# Calculate z-scores and asign them to a new column
df["Z-score"] = (df['Diameter (micrometer)']-mean)/std
# Find observations with a z-score greater than 3 or less than -3
print(df[(df["Z-score"]>3) | (df["Z-score"]<-3)])
fig,ax = plt.subplots(figsize=(9,6))
# Plot histogram using Seaborn library to show distribution of dataset.
sns.histplot(x=df['Diameter (micrometer)'], data = df, ax=ax)

Метод межквартильного диапазона (IQR):

Однако метод Z-показателя действителен только в том случае, если распределение исходных данных является нормальным или приблизительно нормальным с гистограммой в форме колокола. Метод межквартильного диапазона (IQR) — это широко используемый метод обнаружения выбросов в ненормальных или асимметричных распределениях. Чтобы применить метод IQR, сначала упорядочите набор данных от наименьшего к наибольшему. Затем вычислите первый квартиль (Q1), найдя медиану нижней половины набора данных. Затем вычислите третий квартиль (Q3), найдя медиану верхней половины набора данных. Межквартильный размах (IQR) можно рассчитать, вычитая Q1 из Q3: IQR = Q3 — Q1. Верхние и нижние усы можно определить как 1,5-кратный IQR, добавленный к Q3 и вычтенный из Q1, соответственно. Любые точки данных за пределами усов считаются выбросами и должны быть нанесены на график как отдельные точки. Ящичковая диаграмма может быть построена с использованием рассчитанных значений для Q1, Q3, IQR и усов для визуализации распределения и любых обнаруженных выбросов.

Метод IQR — это простой и эффективный способ обнаружения выбросов в наборе данных, особенно в случаях, когда данные ненормальны или искажены. Напротив, метод Z-оценки может не сработать в этих ситуациях. Вот пример того, как реализовать метод IQR для обнаружения выбросов в Python:

Обработка выбросов

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

Ограничение выбросов

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

Ниже приведен код, демонстрирующий, как выполнить ограничение выбросов в Python:

Обрезка выбросов

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

Ниже приведен код, демонстрирующий, как выполнить обрезку выбросов в Python:

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

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

Использованная литература:

Анскомб, Ф.Дж., и Гуттман, И. (1960). Отказ от аутсайдеров. Технометрика, 2(2), 123–147. https://doi.org/10.2307/1266540

Осборн, Дж., и Овербей, А. (2004). Сила выбросов (и почему исследователи всегда должны их проверять). Практика. Оценивать. Рез. Оценка., 9.

X Коэн, М. (2023). Основная статистика и машинное обучение: интуиция, математика, код. https://www.udemy.com/course/statsml_x/