Обнаружение выбросов и обработка с помощью Python: методы и примеры

Введение:

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

💡Я пишу о машинном обучении на Средних || Гитхаб || Каггл || Линкедин. 🔔 Следите за Нхи Йен, чтобы быть в курсе будущих обновлений!

Тематическое исследование

Мы будем использовать набор данных Boston Housing Prices из библиотеки Scikit-learn для нашего тематического исследования. Набор данных содержит информацию о ценах на жилье в Бостоне на основе различных характеристик, таких как уровень преступности, количество комнат и расстояние до центров занятости.

1. Визуализация выбросов

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

# Import required libraries
from sklearn.datasets import load_boston
import seaborn as sns

# Load Boston Housing Prices dataset
boston = load_boston()

# Create seaborn box plot for target variable
sns.boxplot(x=boston.target)

В этом коде мы сначала загружаем набор данных Boston Housing Prices, используя функцию load_boston() из библиотеки Scikit-learn. Затем мы создаем блочную диаграмму для целевой переменной (т. е. цен на жилье), используя функцию sns.boxplot() из библиотеки Seaborn.

Блочная диаграмма — это визуальное представление распределения данных, которое помогает нам выявлять выбросы. Прямоугольник представляет межквартильный диапазон (IQR), который представляет собой диапазон между 25-м и 75-м процентилем данных. Линия внутри поля представляет собой медиану данных. Усы простираются от поля до точек данных, которые находятся в пределах 1,5-кратного IQR. Любые точки данных за пределами этого диапазона считаются выбросами и отображаются как отдельные точки.

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

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

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

# Import required libraries
from sklearn.datasets import load_boston
import numpy as np

# Load Boston Housing Prices dataset
boston = load_boston()

# Create numpy array for target variable
target = np.array(boston.target)

# Calculate Z-scores for target variable
z_scores = (target - np.mean(target)) / np.std(target)

# Set threshold for Z-score values
threshold = 3

# Find indices of outliers based on Z-score values
outlier_indices = np.where(np.abs(z_scores) > threshold)[0]

# Remove outliers from target variable
target = np.delete(target, outlier_indices)

# Print summary
print(f"Initial target variable shape: {boston.target.shape}")
print(f"Target variable shape after removing outliers: {target.shape}")

Выход:

Initial target variable shape: (506,)
Target variable shape after removing outliers: (506,)

В этом коде мы создаем массив numpy для целевой переменной (т. е. цен на жилье) и вычисляем Z-показатели для этой переменной, используя формулу (x - mean(x)) / std(x). Мы устанавливаем порог 3 для абсолютного значения Z-показателей и находим индексы выбросов на основе этого порога. Наконец, мы удаляем выбросы из целевой переменной с помощью функции np.delete() и печатаем сводку результатов.

3. Метод IQR

Метод межквартильного диапазона (IQR) — еще один статистический метод выявления выбросов. Мы можем использовать метод IQR для выявления и удаления выбросов из набора данных о ценах на жилье в Бостоне:

# Import required libraries
from sklearn.datasets import load_boston
import numpy as np

# Load Boston Housing Prices dataset
boston = load_boston()

# Create numpy array for target variable
target = np.array(boston.target)

# Calculate IQR for target variable
q1, q3 = np.percentile(target, [25, 75])
iqr = q3 - q1

# Set threshold for IQR values
threshold = 1.5

# Find indices of outliers based on IQR values
outlier_indices = np.where((target < q1 - threshold * iqr) | (target > q3 + threshold * iqr))[0]

# Remove outliers from target variable
target = np.delete(target, outlier_indices)

# Print summary
print(f"Initial target variable shape: {boston.target.shape}")
print(f"Target variable shape after removing outliers: {target.shape}")

Выход:

Initial target variable shape: (506,)
Target variable shape after removing outliers: (466,)

В этом коде мы создаем массив numpy для целевой переменной (т. е. цен на жилье) и вычисляем межквартильный диапазон (IQR) для этой переменной с помощью функции np.percentile(). Мы устанавливаем порог 1,5 для значений IQR и находим индексы выбросов на основе этого порога. Наконец, мы удаляем выбросы из целевой переменной с помощью функции np.delete() и печатаем сводку результатов.

4. Винсоризация

Winsorization — это метод обработки выбросов путем замены экстремальных значений ближайшими значениями, которые не считаются выбросами. Мы можем использовать метод Winsorization для обработки выбросов в наборе данных о ценах на жилье в Бостоне:

# Import required libraries
from sklearn.datasets import load_boston
import numpy as np
from scipy.stats import mstats

# Load Boston Housing Prices dataset
boston = load_boston()

# Create numpy array for target variable
target = np.array(boston.target)

# Apply Winsorization to target variable
winsorized_target = mstats.winsorize(target, limits=[0.05, 0.05])

# Print summary
print(f"Initial target variable shape: {boston.target.shape}")
print(f"Target variable shape after Winsorization: {winsorized_target.shape}")Conclusion

Выход:

Initial target variable shape: (506,)
Target variable shape after Winsorization: (506,)

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

Заключение

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

Если вы нашли эту статью интересной, ваша поддержка в следующих шагах поможет мне поделиться знаниями с другими:

👏 Дайте статье 50 хлопков

💻 Следуй за мной

📚 Читать больше статей на Медиуме

🔗 Подключайтесь в социальных сетях Github| Линкедин| Каггл

#OutlierDetection #DataCleaning #PythonProgramming #MachineLearning #DataScience