Обнаружение выбросов - PullRequest
       46

Обнаружение выбросов

0 голосов
/ 03 марта 2019

У меня есть ежедневный набор данных с названием продукта и объемом продаж (в формате CSV). Эти данные за последний 1 год.Мне нужно найти средний объем продаж для каждого продукта и создать модель с именем продукта и средним значением для суммы продаж

Теперь, когда я даю сегодняшние данные с помощью Название продукта и объем продаж, модель должна датьНаименования продуктов, объем продаж которых варьируется от + / - 10% от среднего значения по модели.

Пример данных

ProductName,Date,Amount
P1,01-01-2019,1000
p2,01-01-2019,1000
p3,01-01-2019,1000
P1,02-01-2019,1878
p2,02-01-2019,1540
p3,02-01-2019,1482
P1,04-01-2019,2010
p2,04-01-2019,2540
p3,04-01-2019,2365
P1,06-01-2019,995
p2,06-01-2019,860
p3,06-01-2019,1000

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Существует множество способов обнаружения выбросов.Это режим на основе Z_score, обнаружение на основе статистики или обнаружение выброса на основе машинного обучения.

В последнее время я использую режим обнаружения OD на основе статистики для многомерного набора данных.Этот режим потребует statsmodels lib.

Вот пример кода: импорт панд как pd импорт statsmodels.api как sm импорт matplotlib.pyplot как plt из scipy.stats import zscore

df=pd.DataFrame(Your_sample_data)
y_col = "amount"
X_cols = ["ProductName","Date"]
X=df[X_cols]
y=df[OD_y_col]

lm = sm.OLS(y,X).fit()
OD_result =lm.outlier_test()

print(lm.summary())
print(OD_result[OD_result.unadj_p<=confidence_level])

Надеюсь, что приведенный выше псевдокод может помочь вам.

0 голосов
/ 03 марта 2019

Кажется, что вы не можете предоставить какой-либо код того, что вы сделали, и этот сайт не может предоставить вам код.Но все еще видя, что вы новичок здесь:

Попробуйте это:

import pandas as pd
import numpy as np

ProductName = [
    'P1', 'p2', 'p3', 'P1', 'p2', 'p3', 'P1', 'p2', 'p3', 'P1', 'p2', 'p3'
]
Date = [
    '01-01-2019', '01-01-2019', '01-01-2019', '02-01-2019', '02-01-2019',
    '02-01-2019', '04-01-2019', '04-01-2019', '04-01-2019', '06-01-2019',
    '06-01-2019', '06-01-2019'
]
Amount = [1000, 1000, 1000, 1878, 1540, 1482, 2010, 2540, 2365, 995, 860, 1000]

df = pd.DataFrame({'Product Name': ProductName, 'Date': Date, 'Amount': Amount})
df_Product = df.groupby('Product Name').median()

data = {'ProductName':'P1','Date':'03-04-2019','Amount':1525}
for index,row in df_Product.iterrows():
    if data['Amount'] >= row['Amount'] - 0.1*row['Amount'] and data['Amount'] <= row['Amount'] + 0.1*row['Amount']:
        print(index)

...