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

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

Алгоритмы, чувствительные к выбросам:

  • Линейная регрессия
  • Логистическая регрессия
  • Кластеризация K-средних
  • K-ближайшие соседи (KNN)

Алгоритмы, менее чувствительные к выбросам:

  • Деревья решений
  • Случайные леса
  • Машины повышения градиента (GBM)
  • Наивный Байес

Способы выявления выбросов

Использование Z-оценки

##First let's plot a graph to see the distribution of data points

plt.figure(figsize=(16,5))
plt.subplot(1,2,1)
sns.distplot(df['cgpa'])

plt.subplot(1,2,2)
sns.distplot(df['placement_exam_marks'])

plt.show()

#Calculate Mean and Standard Deviation
print("mean of CGPA {}".format(df['cgpa'].mean()))
print("mean of CGPA {}".format(df['cgpa'].std()))

output:
mean of CGPA 6.96124000000001
mean of CGPA 0.6158978751323894


#Calculating the boundary values
# Here we are considering outliers as data points which are beyond the Max and Min 
# boundry values

print("Max value to be considered {}".format(df['cgpa'].mean() + 3*df['cgpa'].std()))
print("Min value to be considered {}".format(df['cgpa'].mean() - 3*df['cgpa'].std()))

output:
Max value to be considered 8.808933625397177
Min value to be considered 5.113546374602842


#now let's find the outliers in out dataset

df[(df['cgpa']> 8.80) | (df['cgpa'] < 5.11)]
Output:

Теперь есть два способа обработки выбросов. либо мы можем обрезать выбросы, либо мы можем сделать Capping. Ниже приведен пример обрезки.

# Excluding outliers and creating new data frame object with uniform distribution
new_df=df[(df['cgpa']< 8.80) & (df['cgpa'] > 5.11)]
new_df

Ограничение — это метод, при котором мы не удаляем выбросы, а устанавливаем для них максимальное и минимальное пороговые значения. Для вышеперечисленного, например, любой показатель «cgpa», превышающий 8,80, устанавливается на 8,80, а значение ниже 5,11 устанавливается на 5,11. Ниже приведен пример укупорки.

##Capping
upper_limit= df['cgpa'].mean() + 3*df['cgpa'].std()
lower_limit= df['cgpa'].mean() - 3*df['cgpa'].std()

import numpy as np

df['cgpa']= np.where( df['cgpa'] > upper_limit,upper_limit,
                    np.where(df['cgpa']< lower_limit,
                    lower_limit,df['cgpa']
                            )
                    )

df.shape
output: (1000, 3)

Использование IQR (межквартильный диапазон)

## Now let's treat the outliers of column "placement_exam_marks" by IQR method

df['placement_exam_marks'].describe()

output:
count    1000.000000
mean       32.225000
std        19.130822
min         0.000000
25%        17.000000
50%        28.000000
75%        44.000000
max       100.000000
Name: placement_exam_marks, dtype: float64


# This information gives us meaningful insight into data.
# as the mean value is greater than the 50th percentile, which means data is positively skewed.
##let's plot boxplot to gain insights of data distribution

sns.boxplot(df['placement_exam_marks'])

###Finding IQR
percentile_25 = df['placement_exam_marks'].quantile(0.25)
percentile_75 = df['placement_exam_marks'].quantile(0.75)

percentile_75, percentile_25

output: (44.0, 17.0)

Формула IQR: 75-й процентиль — 25-й процентиль.

IQR = percentile_75 - percentile_25
IQR

output: 27.0


Upper_limit=percentile_75 + 1.5 * IQR
Lower_limit=percentile_25 -1.5 * IQR

Upper_limit,Lower_limit

output: (84.5, -23.5)

Теперь у нас есть верхнее и нижнее пороговое значение для выбросов. Все, что выше 84,5 и ниже -23,5, считается выбросом. давайте узнаем эти точки во фрейме данных.

##Finding the outliers

df[df['placement_exam_marks'] > Upper_limit]

output:

поэтому давайте обрежем выбросы.

#Trimming
new_df = df[df['placement_exam_marks'] < Upper_limit]
new_df

output:

Вы можете выполнить Capping так же, как и мы, имея дело с выбросами с помощью метода Z-Score.

Итак, это все для понимания основных основ обработки выбросов.