データサイエンス100本ノックをAlteryxで。31日目(解答)

100本ノック

このページは解答編です。

↓ネ

↓タ

↓バ

↓レ

↓防

↓止

答えと解説

設問はこちらでした。

P-031: レシート明細データ(receipt.csv)に対し、店舗コード(store_cd)ごとに売上金額(amount)の標準偏差を計算し、降順で5件表示せよ。

※不偏標準偏差(与えられたデータが母集団の一部である標準偏差、n-1で割る)をまず出力しましょう。余裕があれば母集団の標準偏差(与えられたデータを集合全体とした標準偏差、nで割る)にもチャレンジしてください

解答ワークフローは以下のようになります。

標準偏差(Standard Deviation)について

今回は標準偏差を出す問題ですが、標準偏差について考えてみたいと思います。

標準偏差とは、分散と同様データのばらつきを表す指標です。標準偏差を2乗すると分散になります。

標準偏差を求めるための数式はこちらです。

Wikipediaより

標準偏差は、シグマの結果に対してn(レコード数)で割ったのちに平方根を取っています、不偏標準偏差の場合はn-1で割るところが異なります。

なお、母集団の標準偏差は今計算しているデータに対しての標準偏差ですが、不偏標準偏差は何かしら元となる集団、つまり母集団から一部抜き取ったデータ(サンプリングされたデータ)と考えた時の母集団の標準偏差となります。

ということで、今回のデータは特に母集団などがあるわけではないので、通常の標準偏差を取ればよい、ということになります(100本ノックの解答も通常の標準偏差となっています)。なお、母集団の標準偏差、不偏標準偏差についてはいろいろと言葉が統一されていないため、以下のように表に表してみましょう。

割る場合の分母Excelの関数名称
nSTDEVP, STDEVPA, STDEV.P母集団の標準偏差
n-1STDEV, STEVA, STDEV.S不偏標準偏差
※一部Wikipediaより参照

とはいえ、なかなかそこまでわかりにくいので、今回は両方の標準偏差を出してみましょう。

実際にワークフローを作っていきましょう

まず、型の変更からになります。今回は売上金額(amount)を計算していくので、数値型(Int16)にしておきます。不要な項目も削除します。

不偏標準偏差(n-1で割る)

不偏標準偏差(n-1で割る)はAlteryxでは簡単に計算することができます。集計ツールを使うだけです。

以下のような設定となります。store_cdでグループ化し、amountの「標準偏差」を選択します。

あとはamount(標準偏差の結果です)で降順にソートし、先頭から5件取得すれば完了です。

実際のワークフローは以下のようになります。

母集団の標準偏差(nで割る)

次に、母集団の標準偏差を出力してみましょう。なぜかAlteryxには母集団の標準偏差を一発で出す機能がありません。ちなみに、30問目のワークフローを少し改造するだけで計算できます。これは、分散の平方根を取るだけだからです。

30問目との差分で計算する

30問目との違いは、最後の計算式で平方根を取るというところです。つまり、元の定義の式について、分散と標準偏差で比較してみましょう。

分散の式
標準偏差の式

最後に平方根を取っているのが標準偏差です。つまり、以下の赤色の部分が差分です。

分散の最終導出式:

[Sum_xi-x]/[Count]

標準偏差の最終導出式:

SQRT([Sum_xi-x]/[Count])

ということで、以下の赤い部分のフォーミュラツールのみが差分となります。

設定は以下の通り。

定義から母集団の標準偏差を計算する

今度は、元の定義に対して1からワークフロー化したいと思います。

まず、平均を計算しましょう。集計ツールで各店舗コードごとにグループ化し、平均を取ります。

得られた平均値は、計算に用いるために元のデータに結合する必要があります。以下のように結合ツールで結合します。

結合ツールの設定は以下の通りです。キー列はstore_cdとし、不要な項目も削除します。

これで準備は整いましたので計算を進めていきましょう。

まず、定義の計算式のうち、赤い部分を計算していきましょう。

これは、各amountの値[amount]と平均値[Avg_amount]を引き算し、二乗すればよいです。二乗はPOW関数で可能です。つまり以下の計算式となります。

POW([amount]-[Avg_amount], 2)

なお、POW関数の前側は計算をする値で、後ろの数字はべき乗の乗数を記載します。今回は二乗なので2となります。

フォーミュラツールには以下のようにセットします。フィールド名は「xi-x」、データ型はDoubleとしています。

さて、ここから以下の赤い部分、シグマを計算していきます。シグマは基本的に合計しろ、ということなので、今回の場合は1からNまで、つまり先ほど求めた「xi-x」のすべての合計を行うということなので、集計ツールで合計を求めるだけです。また、ここでnも求めておきましょう。nはレコード数なので集計ツールでカウントを取ればオッケーです。つまり、集計ツールは以下のように設定します。

ここまで求められれば、あとは単純な割り算を行い、平方根を計算します。

SQRT([Sum_xi-x]/[Count])

フォーミュラツールは以下のように設定しています。

あとは、amountの昇順で並べ替えて先頭から5レコード抽出すれば完了です。実際のワークフローは以下の通りです。

まとめ

今回も、集計の問題でしたが、単なる集計に終わりませんでした。30問目は分散でしたが、今回は標準偏差でした。こちらも同様の問題があり、Alteryxのデフォルト機能では不偏標準偏差(n-1で割る)しか計算できないため、母集団の標準偏差(nで割る)を計算したいときは、ワークフローをしっかり組む必要があります。

なお、Excelで考えると、STDEV.Pが母集団の標準偏差(nで割る)、STDEV.Sが不偏標準偏差(n-1で割る)です。

解答ワークフローダウンロード

※2022/09/08更新

コメント

タイトルとURLをコピーしました