Challenge #8: Aggregate Consumer Purchases 〜購買パターンを集計する〜 Alteryx Weekly Challenge
こんにちは、にいのです。
Alteryx Communityでは毎週課題が与えられ、条件を満たすワークフロー作成に挑戦できるWeekly Challengeというコンテンツがあります。 当ブログでも挑戦した成果を発表するWeekly Challengeシリーズが盛り上がっており、ブログを公開するとメンバーから「こういうやり方もあるよ!」と別解を教えてもらえることもあります。
今回は「Challenge #8: Aggregate Consumer Purchases」で購買パターンの集計に挑戦しました。
問題内容
Challenge#8のお題は、対象となる購買パターンの集計です。
とあるお店がMeal Dealというセット割引の制度を導入しようとしており、 Burger
か Pizza
と一緒に Side
と Drink
を購入するパターンの割引を検討しています。
インプットファイルには「購買実績(Point of Sale)」と「商品のタイプテーブル(Lookup Table)」の2種類が用意されています。
購買実績(269375レコードあります!):
商品のタイプテーブル:
上記インプットファイルを、下記の形でアウトプットすることがゴールです。
Potential Meal Deal
2013/7/1以降のMeal Dealに該当するパターンの購買実績の総数Total
2013/7/1以降の購買の総数%
購買総数に占めるMeal Dealに該当するパターンの購買実績の割合
購買実績の商品をタイプ分けし、該当の購買パターンを集計することが今回のポイントとなります。それでは、早速実践していきます。
実践!
私が作成したワークフローはこちらです。
ツール数が多くなってしまいましたが、このフローで実現している処理は下記の通りです。
- 購買実績を2013/7/1以降のレコードに絞る
- 購買実績の商品にタイプを付与する
- Meal Deal対象の商品にフラグを付与
- Meal Deal対象となる購買パターンとそうでないものに分ける
- 購買総数に占めるMeal Dealに該当するパターンの購買実績の割合を計算
購買実績を2013/7/1以降のレコードに絞る
今回の対象は2013/7/1以降のデータですので、初期段階で日付を絞ります。データをフィルターするのに適しているFilter Toolを使い、2013/7/1以降のデータを抽出します。
購買実績の商品にタイプを付与する
購買実績には商品名は記載されていますが、タイプがないのでPizzaなのかDrinkなのかわかりません(なんとなくはわかりますが…)。そこで、購買実績と商品タイプテーブルとを商品名をキーにして突合させ、購買実績にタイプを付与しましょう。ExcelであればVLookup関数を使用しますが、AlteryxではJoin Toolを使って実現可能です。
「Join by Specific Fields」をキーとなる「Desc」に設定し、商品タイプテーブルの「Desc」は不要なためチェックを外します。
実行すると右端にタイプが付与されました。
Meal Deal対象の商品にフラグを付与
購買実績にタイプが付与されたはいいのですが、実は商品タイプにはSoup
やSalad
といったMeal Dealの割引対象外のものがあります。Formula Toolを使って対象となるBurger
、Pizza
、Drink
、Side
のみにフラグを付与しましょう。
今回はswitch文を使い、新たに「Flag」列を作成しました。対象のタイプにはフラグを付与し、そうでないものに関してはNullをセットしています。
実行すると、右端にFlag列が追加されました。
Meal Deal対象となる購買パターンとそうでないものに分ける
購買実績ごとにタイプを付与し、Meal Deal対象のタイプにフラグをつけることができました。次はMeal Dealに該当するパターンの実績とそうでないものに分けます。まずはCross Tab Toolを使って、購買実績をタイプ別に確認できるようにしましょう。
以下はCross Tab Toolの設定です。購買実績の単位(TicketID)でグループ化し、ヘッダは商品タイプ(Type)、値に前項で付与したFlagがセットされるよう設定しました。「Method for Aggregating Values」には、最初に見つかった文字を表示させる「First」を設定します。
実行するとタイプが列となり、値にフラグがセットされました。例えば、TicketID:102398の実績はDrink、Pizza、Sideの注文だったことがわかります。
Meal Dealの対象とならないSoup
やSalad
は不要なため、Select Toolで消しておきましょう。
必要な項目のみに絞ることができました。スッキリです。
ついにMeal Dealのパターンにマッチするレコードとそうでないものを分けられる段階にやってきました。再びFilter Toolの出番です。注文した商品のタイプにはフラグが立っており、そうでないものにはNullがセットされているので、パターンにマッチするかどうかをIsNull
を使って判断します。
Meal Dealの対象となるパターンは下記の3通りです。
Burger | Pizza | Drink | Side |
---|---|---|---|
1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
0 | 1 | 1 | 1 |
実行するとパターンにマッチするものはTrueに、
マッチしないものはFalseに出力されます。
購買総数に占める該当パターンの購買実績の割合を計算
購買実績に占めるMeal Dealのパターンの割合を、 Meal Dealのパターンに該当するレコード数 / 購買実績の総数 * 100
で算出します。
前項で抽出した結果を元に、まずはMeal Dealのパターンに該当するレコード数を算出しましょう。ここではSummarize Toolを使用します。Fieldより「TicketID」を選択し、Actionsのドロップダウンリストより「Count」を選びます。
Meal Dealの対象となるパターンは10964件あるとわかりました。
購買実績の総数は、Filter Toolでデータをフィルタする直前のTicketIDをカウントします。実行結果は15497件です。
Summarize Toolが二手に分かれているので、Join Toolで結合します。
今回は単純に列を結合するだけなので「Join by Record Position」を選択し、列名を指定の通りリネームします。
必要な数値が揃ったので、Formula Toolを使って割合を計算します。
実行すると、ゴールと同じ形になりました!
おわりに
Weekly Challengeには難易度が設定されていますので、自分にあったレベルからスタートしてみるのもいいかもしれません。今回挑戦したWeekly Challenge#8はBeginnerレベルでしたが、そこそこのツール数となりました。特にCross Tab Toolの使い方の理解を深められるので、未挑戦の方はぜひチャレンジしてみてください。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。