Alteryxで加重平均を求める

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

今回は、Alteryxで加重平均を求める方法を紹介したいと思います。

加重平均とは

加重平均は重み付きの平均値となります。 通常、平均というとすべての値を足してデータ数で割ったもの(算術平均, 相加平均)をイメージするかと思います。 これに対して、加重平均では個々の値の重みをかけたものの平均をとります。

例として以下のようなものを考えてみましょう。

ある製品を製造する会社で工場を5つ保有しています。 これらの工場は、規模の違いから1日あたりの生産数にも差があります。 また、設備の違いから製品に含まれる欠陥品の割合にも違いがあります。 会社全体の指標として、この欠陥品の割合を下げたいとなったため、まずは現在全体でどれくらいの割合になっているかを調べることにしました。 各工場で欠陥品が以下の割合で含まれる時、全体での欠陥品が含まれる割合はどれくらいになるか。

工場名 1日の製造数 欠陥品の割合
A 2000000 3%
B 500000 1%
C 1000000 5%
D 3000000 5%
E 700000 2%

さて、欠陥品の割合の平均を計算してみましょう。

\[ \frac{3 + 1 + 5 + 5 + 2 }{5} = 3.2 \]

というわけで、3.2%ということになりました。 これであってるでしょうか?

確認してみましょう。

まず、全体での製造数は

\[ 2000000 + 500000 + 1000000 + 3000000 + 700000 = 7200000 \]

です。 各工場での欠陥品の数は、それぞれ割合をかければいいので、

工場名 計算 1日の欠陥品の数
A 2000000 * 0.03 60000
B 500000 * 0.01 5000
C 1000000 * 0.05 50000
D 3000000 * 0.05 150000
E 700000 * 0.02 14000

となり、これらを足し合わせると、279000となります。 これを先ほどの全体での製造数で割ると、およそ3.9%となります。

計算が合わないですね。 これは、最初の平均値の取り方では、各工場での生産能力が考慮されていないことに影響されています。

加重平均では、これら工場ごと生産数の違いを重みとしてとります。 生産能力が高いほど、全体に与える影響が大きいのので、その分大きな重みを持たせるといった感じです。

では、この重みはどのように求めればいいのでしょうか? この場合だと、製造数において、各工場が全体に占める割合を利用します。

そのため、各工場ので製造数を全体の値7200000で割った値を求めます。

工場名 計算 重み
A 2000000 / 7200000 0.278
B 500000 / 7200000 0.067
C 1000000 / 7200000 0.139
D 3000000 / 7200000 0.417
E 700000 / 7200000 0.098

これらの値を重みとしてかけた値を足しあわせます。

\[ 3 * 0.278 + 1 * 0.067 + 5 * 0.139 + 5 * 0.417 + 2 * 0.098 = 3.9 \]

先ほどの割合と一致しました。

このように重み付きで求める値が、加重平均となります。

N件のデータがあって、その各値がx, 重みがwとした時の加重平均は

\[ w_1 x_1 + w_2 x_2 +, ..., + w_N x_N \]

で求められます。 それっぽく書くと、

\[ \sum_{i=1}^{N} w_i x_i \]

ベクトル表記だと

\[ {\bf w}^T{\bf x} \]

となります。

余談 : この計算って?

この表記は加重平均以外にもデータ分析をする上でよく見かけるものです。 機械学習なんかをしていると、このような計算式が内部に含まれていてることがよくあります。

主な使い方としては、観測されたデータのxからwの値を予測するようなものになります。 ディープラーニングなんかでもこんな感じの計算をなんども繰り返して、wの値を求めるようなことが内部では行われています。

Alteryxでやってみる

さて、では実際にAlteryxでやってみましょう。 ワークフローは以下のようになります。

スクリーンショット 2017-11-14 17.23.08

処理の流れは、先ほどの解説と同じことをしています。

重みの計算

前半は重みの計算をしています。

スクリーンショット 2017-11-14 17.23.08 2

まず、Summarizeツールで全体の製造数を求めています。 以下のようにGroup Byを指定せずに「1日の製造数」の合計を求めることで計算できます。

スクリーンショット 2017-11-14 17.33.02

計算結果は以下のように先ほど計算した合計値と一致しているのが確認できます。

スクリーンショット 2017-11-14 17.33.26

続いて、Append Fieldツールでこの合計値を元データの列として追加しています。 これで、以下のようなデータを得ることができます。

スクリーンショット 2017-11-14 17.35.09

最後にFormulaツールで、重みの計算を行います。

[1日の製造数] / [Sum_1日の製造数]

結果は以下のようになります。

スクリーンショット 2017-11-14 17.40.18

なお、有効桁数の関係で先ほどの計算とは結果が異なっていますが、こちらの方がより精度の高い計算となります。

加重平均を計算する

これで、必要な値の準備ができました。 加重平均を計算してみましょう。

スクリーンショット 2017-11-14 17.23.08 3

とはいえ、実はこの計算は1つのツールで実現できます。 その計算のためのツールが、Weighted Averageツールとなります。

image58

このツールの設定は以下のようになります。

スクリーンショット 2017-11-14 17.44.11

必要に応じてGroup化の設定もできますが、xに対応する値と、wに対応する値を選択するのみとなります。

最終的な出力結果は以下のようになり、目的の結果が得られていることが確認できます。

スクリーンショット 2017-11-14 17.45.30

おわりに

今回は、加重平均の解説とAlteryxで計算する方法について書きました。

一見すると難しい概念のようにも見えるかもしれませんが、今回のように計算の方法自体が通常の平均ではダメな場合のほか、 要素ごとに異なる重みをもうけたいといった場面は多々あるかと思います。

参考

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400