outliers() メソッド

数値型列における統計上の異常値を検出します。異常値の検出対象は、数値型列全体であるか、あるいは 1 つ以上のキー列の値に基づく複数のグループです。

構文

データフレーム名.outliers(keys = ["キー列", "...n"]|None, on = "数値列", distance = 標準偏差数, method = mean|median)

パラメーター

名前 説明
keys = ["キー列", "...n"] | None
  • キー列データフレームのデータをグループ化するために使用されるキー列

    各グループで、数値列のグループの数値の標準偏差が計算されます。このグループの標準偏差は、グループの異常値を検出するための基準値として使用されます。

    複数の列でグループ化する場合は、ネストされたグループを作成します。入れ子でのフィールド間の順序は、列を指定した順になります。

    キー列は出力データフレームの左端に配置されます。

    メモ

    この outliers() メソッドは、異常値を特定する前に、自動的にキー列でデータフレームを並べ替えます。

  • Noneデータはグループ化されません。数値列の異常値は整数として特定されます

    数値列標準偏差は整数として計算されます。この列の標準偏差は、列の異常値を検出するための基準値として使用されます。

on = "数値列"

異常値がないかどうかを調べる数値列。一度に 1 つの列しか調べることができません。

異常値とは、グループまたは列の標準偏差またはそのような標準偏差の指定倍数によって設定される上限と下限の範囲に含まれない値のことです。

distance = 標準偏差数

数値列において、平均または中央値から異常値の上限および下限までに含まれる標準偏差の数。任意の正の整数または 10 進数(0.5、1、1.5、2、...)を指定できます。

異常値の境界を作成するための式:

平均/中央値 ± (標準偏差数 * 標準偏差)

メモ

標準偏差はデータセットの分布の測定です。つまり、値の拡散方法を測定します。異常値計算は母集団標準偏差を使用します。

異常値の境界の例

distance = 2

数値列全体または各キー列グループに対し、以下が設定されます。

  • 平均または中央値より標準偏差の 2 倍だけ大きい、異常値の上限

    平均/中央値 + (2 * SD)

  • 平均または中央値より標準偏差の 2 倍だけ小さい、異常値の下限

    平均/中央値 – (2 * SD)

上限より大きいか下限より小さい任意の値が、異常値として出力結果に追加されます。

メモ

同じデータ セットに対し、標準偏差数の値を大きくすると、返される異常値の数が減る可能性があります。

method = mean | median

省略可能

数値列(異常値列)の値の中心点を計算するメソッド。

  • mean を指定すると、値の平均値が計算されます。
  • median を指定すると、値の中央値が計算されます。

中心点は、以下のいずれかについて計算されます。

  • 各キー列グループの数値
  • 整数の数値列

これらの中心点は、後で各グループ、または数値列の標準偏差を整数として計算する際に使用されます。

method を省略した場合は、デフォルトの平均値が使用されます。

ヒント

異常値がないかどうかを調べるデータに大きな偏りがある場合は、中央値を使用すると、データの大勢をより正しく表す結果を生成することができます。

戻り値

HCL データフレーム。

異常な取引金額の特定

売掛金データフレーム全体から、異常な取引金額を検出したいとします。

異常値の上下限を「Amount(金額)列から標準偏差の±3 倍」に設定します。次のテストにより、772 行のデータフレームで 16 個の異常値が返されます。

outliers_ar = accounts_receivable.outliers(keys = None, on = "Amount", distance = 3, method = "mean")

「標準偏差の±3.5 倍」にしてテストを繰り返します。異常値の上下限が Amount 列の値群の中心点から遠くなったため、6 個の異常値がこのテストによって返されます。

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 個の異常値が返されます。mean を指定すると、各顧客の取引グループについて、標準偏差と平均値が報告されます。

グループ番号 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 つが異常値として報告されたとします。これらは、その顧客の異常値境界を超えるためです。

異常値 下限 上限 異常値
(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 (上限)

中央値を使用した、顧客別の異常な取引金額の特定

平均値の代わりに中央値を使用した場合でも、上記の例で行ったのと同じ異常値テストを行うことができます。

outliers_customer_ar_median = accounts_receivable.outliers(keys = ["CustNum"], on = "Amount", distance = 3, method = "median")

上のテストでは、直前のテストで返された 7 個の異常値の代わりに、10 個の異常値が返されます。中央値と平均値では、データの性質に応じて多少異なる結果が返されます。

グループ番号 CustNum Amount median 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)

備考

入力データフレームのすべての列は自動的に出力データフレームに含まれます。異常値計算に直接関係しない列は、出力データフレームの右端に配置されます。