Обнаружение выбросов и обработка с помощью 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 хлопков
💻 Следуй за мной
📚 Читать больше статей на Медиуме
#OutlierDetection #DataCleaning #PythonProgramming #MachineLearning #DataScience