如何检测数据库中的异常数据点

我目前有一个数据库,其中包含一些标记错误的价格数据。

示例数据:

Product - Price - SalesDateProdA  - 10  - 1/1/2016ProdB  - 20  - 1/2/2016ProdA  - 100 - 1/3/2016ProdB  - 20  - 1/4/2016ProdB  - 21  - 1/5/2016ProdA  - 11  - 1/6/2016

在这个数据集中,记录“ProdA – 100 – 1/3/2016”是有错误的。很可能是输入价格的人犯了打字错误。此外,不同日子上的ProdA可能会改变其价格,这使得这个问题变得有趣。

有什么工具可以帮助我识别这种类型的记录?SQL能帮助我检测异常数据点吗?我应该开始研究机器学习来解决这个问题吗?


回答:

这个问题有点主观,但你可以识别那些数值与平均值相差最远的行。我会通过计算z分数并查看最大/最小的z分数来做到这一点。

z分数是数值减去平均值再除以标准差。这里是一个计算的例子:

select t.*,       (price - avg_price) / nullif(std_price, 0) as z_pricefrom t join     (select product, avg(price) as avg_price, stdev(price) as std_price      from t      group by product     ) tt     on t.product = tt.productorder by abs(z_price) desc;

标准差的函数可能会因你使用的数据库而异,但大多数数据库都支持这种函数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注