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

Математика

Предположение:возведение в квадрат меньших чисел делает их еще меньше, а возведение в квадрат больших чисел делает их еще больше.

Предположим, набор чисел,

2, 3, 101, 202, 240, 265, 385, 1005, 2050

Можно прямо сказать, что экстремумы не совпадают с другими данными, это выбросы, почему? Данные сортируются и значения распределяются по определенному диапазону, а остальное — это ошибки в данных. Реальный мир не так чист, как этот. Поэтому нам нужно будет применить некоторые преобразования к этим данным, следующее сделает именно это.

Сведите их в квадрат. Это даст нам,

4, 9, 10201, 40804, 57600, 70225, 148225, 1010025, 4202500

Теперь спроецируйте эти данные в трех измерениях.

Чтобы лучше понять, давайте предположим, что большое оранжевое пятно на графике выше — это Солнце, а остальные точки вокруг него — это планеты. Мы видим, что есть четыре точки (обведены), которые не соответствуют остальным точкам.

Рассчитать расстояние до Солнца

Для этого мы разделим задачу на две части: расстояния над солнцем и под солнцем. В качестве расстояния мы будем использовать евклидово расстояние в трехмерном пространстве.

Координаты Солнца: x, y, z= (4.0, 472.55555555555554, 615510.3333333334)

Выше Солнца:

Точка 1005: 394515.025976
Точка 2050: 3586990.013524

Под солнцем:

Точка 2: 615506.513217
Точка 4: 615501.512449
Точка 101: 605309.447372
Точка 202: 574706.397019
Точка 240: 557910.381802
Точка 265: 545285.372835
Точка 385: 467285.341536

На основе этих данных мы будем рассчитывать две медианы. В дополнение к этому нам необходимо также определить координаты x, y, z, относящиеся к медианам.

Медиана над Солнцем: 1990752,51975; x, y, z = (1, 3, 5105)

Медиана ниже Солнца: 574706,397019; x, y, z = (3, 202, 40804)

Рассчитайте расстояние до центра от новых точек, таких как upper_distribution_length и lower_distribution_length.

upper_distribution_length=610405.513944

lower_distribution_length=574706.397019

Чтобы найти z_dist_plane1 и z_dist_plane2

z_dist_plane1 = 615510.3333333334 +( 610405.513944* 1 →верхний коэффициент масштабирования)

z_dist_plane2 = 615510.3333333334 — ( 574706.397019* 1 → Нижний коэффициент масштабирования)

Эти два определяют расстояния плоскости от центра.

Мы можем настроить коэффициент масштабирования на основе данных и графика hcps (Heilo-centric Planar Slicing Plot).

Настройка верхнего коэффициента масштабирования на 0,5.

Результирующий список чисел после фильтрации будет примерно таким

101, 202, 240, 265, 385

Закулисная аналогия Солнца и планет привела к названию пакета vcosmos (Виртуальный Космос).

Код

Установка пакета и импорт необходимых модулей. Я использую тот же набор данных, который использовался в предыдущих демонстрациях CO2.csv, который доступен здесь.

pip install vcosmos
import pandas as pd
from spatial_domain.anamoly import O_Sieve
df=pd.read_csv('co2.csv')
print(df.head)
#   Make       Model Vehicle Class  Engine Size(L)  ...  Fuel Consumption Hwy (L/100 km) Fuel Consumption Comb (L/100 km) Fuel Consumption Comb (mpg)  CO2 Emissions(g/km)
# 0  ACURA         ILX       COMPACT             2.0  ...                              6.7                              8.5                          33                  196
# 1  ACURA         ILX       COMPACT             2.4  ...                              7.7                              9.6                          29                  221
# 2  ACURA  ILX HYBRID       COMPACT             1.5  ...                              5.8                              5.9                          48                  136
# 3  ACURA     MDX 4WD   SUV - SMALL             3.5  ...                              9.1                             11.1                          25                  255
# 4  ACURA     RDX AWD   SUV - SMALL             3.5  ...                              8.7                             10.6                          27                  244

# [5 rows x 12 columns]

Вызов класса O_Sieve.

seive= O_Sieve(df,'CO2 Emissions(g/km)',tsf=2.95,bsf=2)
clean_data=seive.filtered_data()
plot=seive.hcps_plot()
print(clean_data.head())
# Filtering Initiated....
# Filtering Complete.
# Ouliers Removed: 86
#     Make       Model Vehicle Class  Engine Size(L)  ...  Fuel Consumption Hwy (L/100 km) Fuel Consumption Comb (L/100 km) Fuel Consumption Comb (mpg)  CO2 Emissions(g/km)
# 0  ACURA         ILX       COMPACT             2.0  ...                              6.7                              8.5                          33                  196
# 1  ACURA         ILX       COMPACT             2.4  ...                              7.7                              9.6                          29                  221
# 2  ACURA  ILX HYBRID       COMPACT             1.5  ...                              5.8                              5.9                          48                  136
# 3  ACURA     MDX 4WD   SUV - SMALL             3.5  ...                              9.1                             11.1                          25                  255
# 4  ACURA     RDX AWD   SUV - SMALL             3.5  ...                              8.7                             10.6                          27                  244

# [5 rows x 12 columns]

Полученный график также содержит диаграммы до и после очистки в дополнение к графику hcps для проверки процесса очистки.

Подвести итог,

  1. Возведите значения в квадрат так, чтобы выбросы всегда находились на крайних концах.
  2. Рассчитайте расстояния от точек данных до центра.
  3. Найдите медианное расстояние и получите координаты, вычислите расстояние от центра до новых координат.
  4. Добавьте расстояние к координате z Солнца и умножьте их на масштабные коэффициенты.
  5. Отрегулируйте коэффициенты масштабирования, чтобы получить очищенный набор данных.

Спасибо за чтение.

Чтобы узнать больше о параметрах и коде, посетите Pypi и Github.

Если вы хотите внести свой вклад в проект или предложить что-нибудь. Пожалуйста, свяжитесь со мной
[email protected]