outliers() 方法
识别数值列中的统计异常值。可以为整个列识别异常值,也可以基于一个或多个键列中的相同值为单独的组进行识别。
语法
数据帧名称.outliers(keys = ["键列", "...n"]|None, on = "数值列", distance = 标准偏差数, method = mean|median)
参数
名称 | 描述 |
---|---|
keys = ["键列", "...n"] | None |
|
on = "数值列" |
要审查其是否存在异常值的数值列。您一次只能审查一个列。 异常值是落在由组或列标准偏差或者由标准偏差的指定倍数设立的上限和下限外部的值。 |
distance = 标准偏差数 |
在数值列中,从平均值或中值到上异常边界和下异常边界的标准偏差数。您可以指定任何正整数或小数 (0.5, 1, 1.5, 2 . . . ) 用于创建异常值边界的公式是: 平均值/中值 ± (标准偏差数 * 标准偏差) 说明 标准偏差是对数据集的离差 — 即值的分散性的度量。异常值计算使用总体标准偏差。 异常值边界的示例distance = 2 为整个数值列或者为每个键列组设立:
任何大于上边界或者小于下边界的值都作为异常值被包括在输出结果中。 说明 对于相同数据集,随着您增加标准偏差数中的值,您可能减小返回的异常值的数量。 |
method = mean | median 可选 |
用于计算数值列(异常值列)中的值的中点的方法。
为下列两者之一计算中点:
该中点随后被用于计算每个组或者整个数值列的标准偏差。 如果您省略 method,则使用默认值 mean。 提示 如果您审查以寻找异常值的数据被显著歪曲,则使用 median 可能生成更能代表该数据块的结果。 |
返回
HCL 数据帧。
示例
识别反常的交易金额
您想要识别整个应收账款数据帧中的反常交易金额。
您决定将异常值边界设置为 Amount 列的标准偏差的 3 倍。该测试返回包含 772 行的数据帧中的 16 个异常值。
outliers_ar = accounts_receivable.outliers(keys = None, on = "Amount", distance = 3, method = "mean")
您重复执行该测试,但是将标准偏差倍数增加到 3.5。该测试现在只返回 6 个异常值,因为异常值边界远离 Amount 列中的值的中点。
outliers_ar = accounts_receivable.outliers(keys = None, on = "Amount", distance = 3.5, method = "mean")
识别对每个客户而言反常的交易金额
对于应收账款数据帧中的每个客户,您想要识别任何反常的交易金额。
您决定将异常值边界设置为每个客户的交易组的标准偏差的 3 倍。
outliers_customer_ar = accounts_receivable.outliers(keys = ["CustNum"], on = "Amount", distance = 3, method = "mean")
该测试返回 7 个异常值。为每个客户的交易组报告平均值和标准偏差:
group no | CustNum | Amount | mean | stdev | distance |
---|---|---|---|---|---|
0 | 65003 | 4,954.64 | 833.83 | 1015.58 | 3 |
1 | 262001 | 3,567.34 | 438.81 | 772.44 | 3 |
1 | 262001 | (2,044.82) | 438.81 | 772.44 | 3 |
2 | 376005 | (931.55) | 484.57 | 411.18 | 3 |
3 | 501657 | 5,549.19 | 441.14 | 1332.80 | 3 |
4 | 811002 | 3,409.82 | 672.10 | 634.20 | 3 |
5 | 925007 | 3,393.87 | 906.16 | 736.48 | 3 |
如何为客户 262001 识别异常值
客户 262001 在应收帐款数据帧中具有 101 个交易,其中有两个被报告为异常值,因为它们超过该客户的异常值边界:
异常值 | 下边界 | 上边界 | 异常值 |
---|---|---|---|
(2,044.82) | (1,878.51) | 2,756.13 | 3,567.34 |
如何为客户 262001 计算异常值边界
异常值边界是客户 262001 的所有交易的平均值加上或减去这些交易的标准偏差的指定倍数。
所有客户 262001 交易的平均值 | 438.81 |
标准偏差的指定倍数 | 3 |
交易的标准偏差 | 772.44 |
438.81 ± (3 * 772.44) = 438.81 ± 2,317.32 = (1,878.51)(下边界) = 2,756.13(上边界) |
使用 median 识别超出每个客户的正常值的交易金额
您使用 median 而不是 mean 执行与您在上面的示例中执行的测试相同的异常值测试。
outliers_customer_ar_median = accounts_receivable.outliers(keys = ["CustNum"], on = "Amount", distance = 3, method = "median")
该测试返回 10 个异常交易,而不是在之前测试中返回的 7 个交易。根据数据性质的不同,median 和 mean 可能返回稍微不同的结果:
group no | CustNum | Amount | 中值 | stdev | distance |
---|---|---|---|---|---|
0 | 65003 | 4,954.64 | 663.68 | 1015.58 | 3 |
1 | 262001 | 3,567.34 | 450.67 | 772.44 | 3 |
1 | 262001 | (2,044.82) | 450.67 | 772.44 | 3 |
2 | 376005 | (931.55) | 517.16 | 411.18 | 3 |
3 | 501657 | 4,426.14 | 146.80 | 1332.80 | 3 |
3 | 501657 | 5,549.19 | 146.80 | 1332.80 | 3 |
4 | 811002 | 3,409.82 | 624.53 | 634.20 | 3 |
5 | 925007 | 2,972.78 | 717.88 | 736.48 | 3 |
5 | 925007 | 3,030.71 | 717.88 | 736.48 | 3 |
5 | 925007 | 3,393.87 | 717.88 | 736.48 | 3 |
如何为每个客户计算异常值边界
异常值边界是每个客户的交易的中值,加上或减去这些交易的标准偏差的指定倍数。
例如,对于客户 262001:450.67 ± (3 * 772.44)
备注
输入数据帧中的所有列都被自动包括在输出数据帧中。不直接参与异常值计算的列被定位于输出数据帧的最右侧。