Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 离群点检测_Python_Machine Learning_Outliers_Anomaly Detection - Fatal编程技术网

Python 离群点检测

Python 离群点检测,python,machine-learning,outliers,anomaly-detection,Python,Machine Learning,Outliers,Anomaly Detection,我有一个包含产品名称和销售额的每日数据集(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

我有一个包含产品名称和销售额的每日数据集(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

看起来你不能提供你所做的任何代码,这个网站也不能为你提供代码。 但仍然看到你是新来的:

试试这个:

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)

将熊猫作为pd导入
将numpy作为np导入
产品名称=[
'P1',p2',p3',P1',p2',p3',P1',p2',p3',P1',p2',p3',P1',p2',p3'
]
日期=[
'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'
]
金额=[1000100018781540148201054023659958601000]
df=pd.DataFrame({'Product Name':ProductName,'Date':Date,'Amount':Amount})
df_Product=df.groupby('Product Name').median()
数据={'ProductName':'P1','Date':'03-04-2019','Amount':1525}
对于索引,df_Product.iterrows()中的行:

如果数据['Amount']>=行['Amount']-0.1*行['Amount']和数据['Amount'],则有许多方法可以检测异常值。它们是基于Z分数的模式、基于统计的检测或基于机器学习的异常值检测

最近,我对多维数据集使用了一种基于统计的OD检测模式。此模式需要
statsmodels

以下是示例代码:

将熊猫作为pd导入
将statsmodels.api作为sm导入
将matplotlib.pyplot作为plt导入
从scipy.stats导入zscore
df=pd.DataFrame(您的样本数据)
y_col=“金额”
X_cols=[“产品名称”,“日期”]
X=df[X_cols]
y=df[OD_y_col]
lm=sm.OLS(y,X).fit()
OD_结果=lm.异常值_测试()
打印(lm.summary())

打印(OD_结果)[OD_result.unadj_pAny code to share?产品名称、日期、金额P1,01-01-20191000 p2,01-01-20191000 p3,01-01-20191000 P1,02-01-20191878 p2,02-01-20191540 p3,02-01-20191482 P1,04-01-20192010 p2,04-01-20192540 p3,04-01-20192365 P1,06-01-01-2019995 p2,06-01-01-2019860 p3,06-01-20191000编辑问题并将其添加到问题中。这可能是您的明星ter编码并尝试应用
scikit SVM
进行异常检测。