Итак, во-первых, что такое выброс?

Давайте посмотрим на изображение, а затем начнем статью

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

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

Почему это так важно?

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

Статистика для понимания выбросов.

1. Население - весь набор данных вместе называется совокупностью. Например, если есть данные о 10 000 человек, то все это вместе называется совокупностью данных.

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

3. Процентиль - это процент точек данных, которые отстают от рассматриваемых точек данных в отсортированном массиве. например, A = [1, 4, 6, 9, 11, 15, 18, 19, 21, 25, 27, 29, 200], здесь процентиль числа 19 равен (7/14) * 100 = 50%. И цифры вроде 200 - это выбросы.

4. Z-оценка - z-оценка говорит о том, в какое стандартное отклонение попадает точка данных. Он имеет формулу (x-среднее) / стандартное отклонение.

5. Межквартильный диапазон - диапазон значений от 25 до 75 процентилей.

[ 1, 4, 6, 9,11, 15, 18, 19, 21, 200, 25, 27 ,29]
import numpy as np 
outliers = []
def z_score(data):
 thresold = 3
 mean = np.mean(data)
 std = np.std(data)
 for i in data:
 z_score = (i-mean)/std
 if (np.abs(z_score) > thresold):
 outliers.append(i)
 return outliers

Выход: 200

Определение z-показателя с использованием интерквартильного диапазона:

import numpy as np 
Data = [ 1, 4, 6, 9,11,300, 15, 18, 19, 21, 200, 25, 27 ,29]
Data = sorted(Data)
q1,q3 = np.percentile(Data,[25,75])
iqr = q3 - q1 
lower_bound = q1 - (1.5*iqr)
upper_bound = q3 + (1.5*iqr)
outlier = []
def iqr(data):
    for i in data:
        if (i< lower_bound or i> upper_bound):
            outlier.append(i)
    return outlier

Выход: [200 300]