同じ注文で一緒に買われた商品ペアの件数を数えるには?
注文内の重複商品を先にまとめ、同じ注文の商品同士を結合します。自分自身との組み合わせと逆順を除き、ペアごとの注文数を数えます。
一緒に買われることが多い商品を調べるには、注文ごとの商品ペアを作り、そのペアを含む注文数を数えます。注文内の重複商品を先にまとめ、同じ一覧を2つ用意してOrderIDで結合します。10と20、20と10のように順序が逆のペアは1組として扱います。
重複した明細を注文数に加えない
架空の元データは9行です。ProductIDの10、20、30は数値の識別子で、大小を比べてペアを片方向だけ残します。文字や意味のある先頭ゼロを含む商品コードを数値に変換しないでください。その場合は元データに別の一意な数値識別子を用意します。
| OrderID | ProductID |
|---|---|
| O1 | 10 |
| O1 | 10 |
| O1 | 20 |
| O1 | 30 |
| O2 | 10 |
| O2 | 20 |
| O3 | 20 |
| O3 | 30 |
| O4 | 10 |
O1の商品10は2行ありますが、10と20を同時購入した注文としてはO1の1件です。商品の数量が増えても、同時購入した注文の件数は増えません。
- 元の表を結果の基準にし、「結果を整理」で「集計」を追加します。「まとめる項目」でOrderIDとProductIDを1つずつ選びます。「集計方法」は「件数」のまま、「結果の項目名」にLineCountと入力します。
- 「適用」して8行になったことを確認し、「結果を保存」でExcelに保存します。商品同士の組み合わせを作るため、新しい作業にこの8行を持つシートを2つ読み込みます。例ではシート名をBasketとPartnerに分けています。必要なら保存ファイルのコピーでシート名を手動変更してください。
- 両方のOrderIDを「一致する行のみ」で接続します。Basketを結果の基準にし、両方のProductIDを表示します。LineCountとPartner側のOrderIDは非表示にします。
自分自身とのペアと逆順を除く
「結果を整理」に次の順序でステップを追加します。
- 「計算」でPartnerのProductIDからBasketのProductIDを引き、ProductGapという名前にします。
- 「絞り込み」でProductGapが0より大きい行を残します。10→10は差が0、20→10は負の値なので除外され、10→20だけが残ります。
- 「集計」を追加して両方のProductIDでまとめます。「集計方法」は「件数」のまま、「結果の項目名」にPairOrdersと入力します。「並べ替え」を追加し、1つ目の商品IDを「昇順」にします。同じステップの「並べ替え項目を追加」で2つ目の商品IDも「昇順」にして「適用」を押します。
結合直後の行数は、各注文の商品種類数を2乗して足した数になります。この例では3²+2²+2²+1²=18行で、同じ商品同士と逆順の組を除くと、注文ごとのペアが5行残ります。1つの注文に多くの商品がある場合は、短い期間から試してください。
ペアごとの注文数を確認する
| ProductID | Partner_ProductID | PairOrders |
|---|---|---|
| 10 | 20 | 2 |
| 10 | 30 | 1 |
| 20 | 30 | 2 |
Partner_ProductIDは2つ目の商品IDです。実際の表示名の接頭部分はシート名によって変わる場合があります。10と20はO1・O2、20と30はO1・O3に含まれます。商品が1つだけのO4からペアは作られません。
件数が多すぎる場合は、注文・商品を1行にまとめる処理を最初に確認します。この結果は実際の注文に含まれるペアの件数であり、購入確率や推薦による売上効果を計算したものではありません。
自分のファイルで始めましょう
JOIN SHEETを使ってみる ↗Excel・CSVの作業はPCでご利用ください。
新しいタブで開くため、作業中のデータは置き換わりません。
サンプルの検証日:
出典
How can I see in Excel which products were most often bought in pairs?の質問を参考に、架空のデータを用意しました。