同じ注文で一緒に買われた商品ペアの件数を数えるには?

注文内の重複商品を先にまとめ、同じ注文の商品同士を結合します。自分自身との組み合わせと逆順を除き、ペアごとの注文数を数えます。

説明図: 同じ注文内の商品重複を含む元の9行の注文明細
架空のデータを使った説明図です。実際の画面キャプチャではありません。

一緒に買われることが多い商品を調べるには、注文ごとの商品ペアを作り、そのペアを含む注文数を数えます。注文内の重複商品を先にまとめ、同じ一覧を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件です。商品の数量が増えても、同時購入した注文の件数は増えません。

  1. 元の表を結果の基準にし、「結果を整理」で「集計」を追加します。「まとめる項目」でOrderIDとProductIDを1つずつ選びます。「集計方法」は「件数」のまま、「結果の項目名」にLineCountと入力します。
  2. 「適用」して8行になったことを確認し、「結果を保存」でExcelに保存します。商品同士の組み合わせを作るため、新しい作業にこの8行を持つシートを2つ読み込みます。例ではシート名をBasketとPartnerに分けています。必要なら保存ファイルのコピーでシート名を手動変更してください。
  3. 両方の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

説明図: 3種類の商品ペアと注文数

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?の質問を参考に、架空のデータを用意しました。