このページは解答編です。
↓ネ
↓タ
↓バ
↓レ
↓防
↓止
答えと解説
設問はこちらでした。
P-078: レシート明細データ(receipt.csv)の売上金額(amount)を顧客単位に合計し、合計した売上金額の外れ値を抽出せよ。ただし、顧客IDが”Z”から始まるのものは非会員を表すため、除外して計算すること。なお、ここでは外れ値を第1四分位と第3四分位の差であるIQRを用いて、「第1四分位数-1.5×IQR」を下回るもの、または「第3四分位数+1.5×IQR」を超えるものとする。結果は10件表示せよ。
※結果はcustomer_idの昇順でソートすること
解答ワークフローは以下のようになります。
32問目で行ったパーセンタイルを使って外れ値を抽出する問題です。
四分位範囲(IQR)
四分位範囲とは、以下の図で示すように、第1四分位と第3四分位の間のことを言います。つまり、75パーセンタイル-25パーセンタイルでIQRが求まります。
上の図は値が等分で散らばっていた場合のケースといえるので、今回の方法で外れ値が抽出できるように思わないかもしれませんが、データは偏っていることが多く、実際は以下のようになっているでしょう。
どこから外れ値とするかは色々な考え方があるかと思いますが、こちらの例ではIQRの1.5倍の範囲を超えたものは外れ値としています(ちなみに、Tableauでの出力結果です)。
ワークフローの作成
それではワークフローの作成に戻りましょう。基本的には基礎的な内容の積み重ねとなります。
まずいつものcustomer_idがZで始まるものを除外していきたいと思います。フィルターツールでStartsWith関数で取り除けます。カスタムフィルターで以下の通りの計算式を使いましょう。
!StartsWith([customer_id], "Z")
次に、セレクトツールを使って、集計のためにデータ型の変更と不要項目の削除を行いましょう。
最初にセレクトツールを使って、集計のためにデータ型の変更と不要項目の削除を行いましょう。
次に、customer_idごとに売上金額(amount)の合計を求めましょう。集計ツールにて、customer_idでグループ化し、amountの合計を計算します。これも恒例行事ですね!
ここから、第1四分位、第3四分位を求めていきます。32問目でも行った通り、集計ツールでパーセンタイルを使います。左下の方にパーセンタイルの値をいくつにするかのオプションが出るので、ここを使います。第1四分位は25、第3四分位は75を入力します。また、わかりやすくするためにそれぞれフィールド名を付けていきます。パーセンタイルを25にしたものは、Percentile_amount_25、パーセンタイルを75にしたものは、Percentile_amount_75としています。
次に、ここで求めた第1四分位、第3四分位をcustomer_idごとに集計したデータにフィールド付加ツールを使って付加します。つまり、以下のようなワークフローになります。
次に、フォーミュラツールでIQRを計算していきます。これは非常に単純な計算です。フィールド名はそのままズバリ「IQR」、データ型は数値型(Double)とします。
[Percentile_amount_75]-[Percentile_amount_25]
最後の仕上げに、フィルターツールで外れ値を抽出しましょう。amountが「第1四分位-1.5×IQR」より小さいか、「第3四分位+1.5×IQR」より大きいものを外れ値とするので、カスタムフィルターで以下のようにします。
[amount]<[Percentile_amount_25]-1.5*[IQR] OR
[amount]>[Percentile_amount_75]+1.5*[IQR]
ここまで行けばほぼ完了です。あとは、ソートツールでcustomer_idの昇順に並び替え、セレクトツールで不要データを削除し、サンプリングツールなどで先頭から10レコード抽出すれば完了です。
まとめ
今回も外れ値を抽出する問題でした。ただ、統計の言葉が出てくるので、慣れてない方は戸惑うかもしれませんが、基礎的な内容で対応可能ですので、言葉にも慣れていただければと思います。
コメント