- Обнаружение и удаление выбросов в Python – легко понять гид
- Что такое выбросы в Python?
- Почему необходимо удалить выбросы от данных?
- Обнаружение выбросов – IQR подход
- Удаление выбросов
- Заключение
- Читайте ещё по теме:
- Как удалить выбросы в Python
- Как идентифицировать выбросы в Python
- Как удалить выбросы в Python
- Когда удалять выбросы
- Дополнительные ресурсы
- Практическое занятие: обнаружение и обработка выбросов в Python с использованием правила 1.5 IQR
Обнаружение и удаление выбросов в Python – легко понять гид
Здравствуйте, читатели! В нашей серии обработки и анализа данных сегодня мы посмотрим на обнаружение и удаление выбросов в Python.
Здравствуйте, читатели! В нашей серии обработки данных и анализа данных сегодня мы посмотрим на Обнаружение и удаление выбросов в питоне.
Что такое выбросы в Python?
Перед погружением глубоко в концепцию Выбросы Давайте понять происхождение необработанных данных.
Необработанные данные, которые подаются в систему, обычно генерируются от опросов и извлечения данных из действий в реальном времени в Интернете. Это может привести к изменению данных в данных, и существует вероятность ошибки измерения при записи данных.
Это когда выбросы вступают в сцену.
Оформление – это точка или набор точек данных, которые лежат от остальных значений данных набора данных Отказ То есть это точка данных, которые отображаются вдали от общего распределения значений данных в наборе данных.
Выбросы возможны только в непрерывных значениях. Таким образом, обнаружение и удаление выбросов применимы только к значениям регрессии.
В основном, выбросы, по-видимому, расходятся от общего правильного и хорошо структурированного распределения элементов данных. Это можно считать как Ненормальное распределение, которое появляется вдали от класса или население.
Поняв концепцию выбросов, давайте сейчас сосредоточимся на необходимости удаления выбросов в предстоящем разделе.
Почему необходимо удалить выбросы от данных?
Как обсуждалось выше, выбросы являются точками данных, которые лежат вдали от обычного распределения данных и приводит к тому, что ниже воздействие на общее распределение данных:
- Влияет на общую стандартную вариацию данных.
- Манипулирует общее среднее значение данных.
- Преобразует данные в перекошенную форму.
- Это вызывает смещение в оценке точности модели обучения машины.
- Влияет на распределение и статистику набора данных.
Из-за вышеуказанных причин необходимо обнаружить и избавиться от выбросов до моделирования набора данных.
Обнаружение выбросов – IQR подход
Выбросы в наборе данных могут быть обнаружены методами ниже:
В этой статье мы реализуем метод IQR для обнаружения и лечения выбросов.
IQR – аббревиатура для межступного диапазона Отказ Он измеряет статистическую дисперсию значений данных как мера общего распространения.
IQR эквивалентен разницей между первым квартилем (Q1) и третьим квартилью (Q3) соответственно.
Здесь Q1 относится к первому квартилю I.e. 25% и Q3 относится к третьему квартилю I.e. 75%.
Мы будем использовать Boxplots для обнаружения и визуализации выбросов, присутствующих в наборе данных.
Коробки изображают распределение данных с точки зрения квартилей и состоит из следующих компонентов
- Q1-25%
- Q2-50%
- Q3-75%
- Нижняя граница/усы
- Верхний усы/граница
Любая точка данных, которая лежит ниже нижней границы, и над верхней границей рассматривается как выброс.
Давайте теперь будем реализовать BoxPlot для обнаружения выбросов в приведенном ниже примере.
Первоначально мы импортировали набор данных в окружающую среду. Вы можете найти набор данных здесь Отказ
import pandas import numpy BIKE = pandas.read_csv("Bike.csv")
Кроме того, мы сегрегировали переменные в числовые и категорические значения.
numeric_col = ['temp','hum','windspeed'] categorical_col = ['season', 'yr', 'mnth', 'holiday', 'weekday', 'workingday', 'weathersit']
Мы применяем BoxPlot, используя BoxPlot () Функция на числовых переменных, как показано ниже:
Как видно выше, вариабельная «ветряная скорость» содержит выбросы, которые лежат над нижней границей.
Удаление выбросов
Сейчас самое время лечить выбросы, которые мы обнаружили, используя BoxPlot в предыдущем разделе.
Используя IQR, мы можем следовать приведенному ниже подходу для замены выбросов в нулевое значение:
- Рассчитайте первый и третий квартиль (Q1 и Q3).
- Кроме того, оцените межквартирный диапазон, IQR-Q1 Отказ
- Оцените нижнюю границу, ниже * 1.5
- Оцените верхнюю границу, Верхний * 1.5.
- Замените точки данных, которые лежат за пределами нижней и верхней границы с Нулевое значение Отказ
for x in ['windspeed']: q75,q25 = np.percentile(BIKE.loc[:,x],[75,25]) intr_qr = q75-q25 max = q75+(1.5*intr_qr) min = q25-(1.5*intr_qr) BIKE.loc[BIKE[x] < min,x] = np.nan BIKE.loc[BIKE[x] >max,x] = np.nan
Таким образом, мы использовали numpy.percentile () Метод Для расчета значений Q1 и Q3. Кроме того, мы заменили выбросы с numpy.nan как нулевые значения.
Заменив выбросы NAN, давайте теперь проверьте сумму нулевых значений или отсутствующих значений, используя код ниже:
Сумма подсчета нулевых значений/выбросов в каждом столбце набора данных:
season 0 yr 0 mnth 0 holiday 0 weathersit 0 temp 0 hum 0 windspeed 5 cnt 0 dtype: int64
Теперь мы можем использовать любую из приведенных ниже методов для лечения нулевых значений:
- Вмешивает недостающие значения со средним, средним или навязчивым значениями.
- Снимите нулевые значения (если пропорция сравнительно меньше)
Здесь мы бросили бы нулевые значения, используя Pandas.dataframe.dropna () функция
Обработавшись к выбросам, давайте теперь проверяем наличие отсутствующих или нулевых значений в наборе данных:
season 0 yr 0 mnth 0 holiday 0 weathersit 0 temp 0 hum 0 windspeed 0 cnt 0 dtype: int64
Таким образом, все выбросы, присутствующие в наборе данных, были обнаружены и обработаны (удалены).
Заключение
По этому, мы подошли к концу этой темы. Не стесняйтесь комментировать ниже, если вы столкнетесь с любым вопросом.
Для более таких постов, связанных с Python. Оставайтесь настроиться и до тех пор, до тех пор, пока, счастливое обучение !! 🙂.
Читайте ещё по теме:
Как удалить выбросы в Python
Выброс — это наблюдение, которое лежит аномально далеко от других значений в наборе данных. Выбросы могут быть проблематичными, поскольку они могут повлиять на результаты анализа.
В этом руководстве объясняется, как идентифицировать и удалять выбросы в Python.
Как идентифицировать выбросы в Python
Прежде чем вы сможете удалить выбросы, вы должны сначала решить, что вы считаете выбросом. Есть два распространенных способа сделать это:
1. Используйте межквартильный диапазон.
Межквартильный размах (IQR) — это разница между 75-м процентилем (Q3) и 25-м процентилем (Q1) в наборе данных. Он измеряет разброс средних 50% значений.
Вы можете определить наблюдение как выброс, если оно в 1,5 раза превышает межквартильный размах, превышающий третий квартиль (Q3), или в 1,5 раза превышает межквартильный размах, меньше первого квартиля (Q1).
Выбросы = наблюдения > Q3 + 1,5*IQR или Q1 – 1,5*IQR
2. Используйте z-значения.
Z-оценка показывает, сколько стандартных отклонений данного значения от среднего. Мы используем следующую формулу для расчета z-показателя:
z = (X — μ) / σ
- X — это одно необработанное значение данных.
- μ — среднее значение населения
- σ — стандартное отклонение населения
Вы можете определить наблюдение как выброс, если его z-оценка меньше -3 или больше 3.
Выбросы = наблюдения с z-показателями> 3 или
Как удалить выбросы в Python
Как только вы решите, что вы считаете выбросом, вы можете идентифицировать и удалить их из набора данных. Чтобы проиллюстрировать, как это сделать, мы будем использовать следующий кадр данных pandas:
import numpy as np import pandas as pd import scipy.stats as stats #create dataframe with three columns 'A', 'B', 'C' np.random.seed(10) data = pd.DataFrame(np.random.randint(0, 10, size=(100, 3)), columns=['A', 'B', 'C']) #view first 10 rows data[:10] A B C 0 13.315865 7.152790 -15.454003 1 -0.083838 6.213360 -7.200856 2 2.655116 1.085485 0.042914 3 -1.746002 4.330262 12.030374 4 -9.650657 10.282741 2.286301 5 4.451376 -11.366022 1.351369 6 14.845370 -10.798049 -19.777283 7 -17.433723 2.660702 23.849673 8 11.236913 16.726222 0.991492 9 13.979964 -2.712480 6.132042
Затем мы можем определить и удалить выбросы, используя метод z-оценки или метод межквартильного диапазона:
Метод Z-оценки:
#find absolute value of z-score for each observation z = np.abs(stats.zscore(data)) #only keep rows in dataframe with all z-scores less than absolute value of 3 data_clean = data[(z<3).all(axis=1)] #find how many rows are left in the dataframe data_clean.shape (99,3)
Метод межквартильного диапазона:
#find Q1, Q3, and interquartile range for each column Q1 = data.quantile(q=.25) Q3 = data.quantile(q=.75) IQR = data.apply(stats.iqr) #only keep rows in dataframe that have values within 1.5\*IQR of Q1 and Q3 data_clean = data[~((data < (Q1-1.5\*IQR)) | (data >(Q3+1.5\*IQR))).any(axis=1)] #find how many rows are left in the dataframe data_clean.shape (89,3)
Мы можем видеть, что метод z-показателя идентифицировал и удалил одно наблюдение как выброс, в то время как метод межквартильного диапазона идентифицировал и удалил 11 наблюдений как выбросы.
Когда удалять выбросы
Если в ваших данных присутствует один или несколько выбросов, вы должны сначала убедиться, что они не являются результатом ошибки ввода данных. Иногда человек просто вводит неправильное значение данных при записи данных.
Если выброс оказался результатом ошибки ввода данных, вы можете решить присвоить ему новое значение, такое как среднее значение или медиана набора данных.
Если значение является истинным выбросом, вы можете удалить его, если оно окажет значительное влияние на общий анализ. Просто не забудьте упомянуть в своем окончательном отчете или анализе, что вы удалили выброс.
Дополнительные ресурсы
Если вы работаете с несколькими переменными одновременно, вы можете использовать расстояние Махаланобиса для обнаружения выбросов.
Практическое занятие: обнаружение и обработка выбросов в Python с использованием правила 1.5 IQR
Одним из самых больших недостатков для производительности любой модели являются выбросы, присутствующие в данных. В идеале выбросы - это экстремальные значения для определенного столбца, которые влияют на обобщение данных и модели. Выбросы в основном влияют на модели регрессии, поскольку они радикально меняют уравнение, как показано на диаграмме разброса ниже.
Здесь вы можете очень хорошо заметить, что всего два пункта повлияли на модель линейной регрессии (оценка R² составляет всего 47%).
Однако, когда выброс удален, вы видите, что производительность модели резко улучшается с 48% до 95%. Разве это не круто!
Цель обнаружения и обработки выбросов - гарантировать, что вы получите наилучшую модель из данных, учитывая тот факт, что ваши данные подходят для работы с алгоритмом. В этом случае данные линейны и совместимы с алгоритмом линейной регрессии. Итак, давайте посмотрим, как обнаруживать и удалять выбросы из ваших данных в Python с помощью правила 1.5 IQR.
IQR означает межквартильный диапазон. Давайте посмотрим определение IQR в Википедии.
В описательной статистике межквартильный размах, также называемый средним или средним 50%, или технически H-разбросом, является мерой статистической дисперсии, равной разнице между 75-м и 25-м процентилями или между верхним и нижним квартилями, IQR = Q₃ - Q₁.
Действия по обнаружению выбросов путем определения нижней и верхней границы данных:
1. Расположите данные в порядке возрастания
2. Вычислите Q1 (первый квартал)
3. Рассчитайте Q3 ( третий квартиль)
4. Найдите IQR = (Q3 - Q1)
5. Найдите нижний диапазон = Q1 - (1,5 * IQR)
6. Найдите верхний диапазон = Q3 + (1,5 * IQR)
Как только вы получите верхнюю и нижнюю границу, все, что вам нужно сделать, это удалить любые значения, которые меньше нижней границы или больше верхней границы.
Теперь давайте посмотрим на код того же:
import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline
2. Создайте образец набора данных с выбросами.
sample = pd.DataFrame([[1000],[2000],[3000],[4000],[5000],[6000],[7000],[8000],[9000],[20000]] , columns=[‘Salary’])
Как вы видите, в наборе данных я добавил экстремальное значение, то есть 20000. Давайте проверим диаграмму рассеяния, чтобы увидеть выброс,
В этом наборе данных 20000 - крайнее значение. Давайте проверим, помогает ли нам правило 1.5IQR!
3. Давайте напишем функцию выброса, которая будет возвращать нам нижнее и верхнее значения.
def outlier_treatment(datacolumn): sorted(datacolumn) Q1,Q3 = np.percentile(datacolumn , [25,75]) IQR = Q3 — Q1 lower_range = Q1 — (1.5 * IQR) upper_range = Q3 + (1.5 * IQR) return lower_range,upper_range
4. Используя указанную выше функцию, давайте получим нижнюю и верхнюю границы значений.
lowerbound,upperbound = outlier_treatment(sample.Salary)
5. Давайте проверим, какой столбец считается выбросом.
sample[(sample.Salary < lowerbound) | (sample.Salary >upperbound)]
Приведенный выше код дает следующий результат:
5. Теперь давайте удалим выбросы из набора данных.
sample.drop(sample[ (sample.Salary > upperbound) | (sample.Salary < lowerbound) ].index , inplace=True)
6. Давайте посмотрим на диаграмму рассеяния после удаления выбросов.
Как видите, после удаления выброса данные теперь хорошо работают с линейной регрессией.