トレジャーデータ(Treasure Data)公式ブログ

トレジャーデータ(Treasure Data)公式ブログです。

トレジャーデータで実践:Basket 分析(頭の体操編)

始めに

バスケット分析(併売分析)は,アウトプットイメージやその分析の有用性についてはマーケティング業界の誰もが周知しているのに反して,実際にそれを実践できている所はそれ程多くはありません。

マーケット バスケット分析の使用 - Tableau

また,実践できているにしても上の Tableau のようなソフトウェアを入れなければならなかったり,実装のためのコストやリソースがかかっている所も少なくありません。さらに,そういったツールに頼っているところは,少し条件を変えただけの分析やより踏み込んだ分析に対応する柔軟性を兼ね備えるのは難しいところです。

本シリーズで紹介するトレジャーデータで実戦可能なバスケット分析コンテンツは,誰もがロジック・仕組みの理解から実践まで行えるように,できるだけわかりやすく具体的に紹介していきます。

その中で,一見ロジックや実装が難しさと捉えている世間の認識に対して,実はバスケット分析が持つ本質的な難しさは次の2つ:「計算量の問題」「結果の解釈の問題」であることに迫っていきます。

※ ここで扱う「バスケット分析」は単純に,同時購入された(同じレシート内で登場する)アイテムペアの共起頻度,共起度(コサイン係数,シンプソン係数)を求めるものとします。

※ バスケット分析は,より広域な手法(機械学習)も含んで「アソシエーション分析」と呼ばれることもあります。この分析手法は,蓄積されたユーザー毎の購入データを分析し,併売の関係性が強いアイテムの組み合わせやその割合,統計的に見て強い関係を持つアイテム間の関係(ルール)を抽出するデータマイニング手法で,「アイテム1 を購入した人は,アイテム2 も購入する確率が高い」という法則性(アソシエーションルール)を見つけ出す分析手法です。アソシエーション分析は,本シリーズの応用編として登場します。

 

 

上はバスケット分析の結果テーブルですが,「Sub Category ⊃ Goods Id」という階層を持ったグッズ同士の,一回の買い物において同時に購入されたペアの共起回数(度数)を算出しています。右から3番目の項目 "Cnt" が共起回数で,その次の "Cos Coeff"が「コサイン係数」,最後の "Simpson Coeff" が「シンプソン係数」で後者2つは共起度数となっています。詳細は後ほど紹介します。

SQLで頭の体操 〜組み合わせの計算〜

ゼロからバスケット分析を理解するためには,まずは頭の体操が必要です。ここでのポイントは様々な条件下でのモノとモノの組み合わせを,SQLを使って柔軟に求めて行く所から始めましょう。

Numbers:2つ数値の組み合わせ

今,1〜6 までの数値が入った "numbers" テーブルがあるとします。

1〜6までの数字を使って2つの数字の組み合わせをSQLで作って見ましょう。

課題1:2つの数字の組み合わせをSQLで全て求める 

同じテーブル同士をCROSS JOINして全組み合わせを算出します。

36個の数値の組み合わせ結果が得られました。

課題2:2つの数字の組み合わせで,同じ数字の組み合わせは避ける

Where 句で同じ数値を除外しています。

30個の数値の組み合わせ結果が得られました。

課題3:2つの数字の組み合わせで順序を気にしない

例えば「1, 2」と「2, 1」は同じものと扱います。また課題2に引き続き,同じ数字同士の場合も除外します。

先ほどの半分の15個の組み合わせが得られました。

このようにある一つのカラムに対して,存在する値の組み合わせを求めることはSQLで簡単に記述できます。

Matching:男女のマッチング

次に以下のような "men_and_women" テーブル(男:2人,女:3人)に対して,以下を考えます。

課題4:可能な男女のマッチングを考える(mistake)

とりあえず何も考えずに課題3と同種のクエリを実行してみます。

おやおやこれはいけません。一部で男同士,女同士のペアが作られてしまっています。

課題4':可能な男女のマッチングを考える(correct)

そこで上の様に明示的に JOIN キーを指定して,異なる gender の値をもつもののみを結合するようにします。

うまく男女のマッチングだけが抽出できました。

Trump:同じ絵柄のカードの組み合わせ

トランプは様々な組み合わせを考えるための最適な材料です。トランプには異なる4種の絵柄があり,それぞれの絵柄で1〜13の値を持ったカードがあります。さらに(ここでは目立ちませんが)ジョーカーという存在もあります。

この53枚のトランプに対して,いくつか組み合わせを考えてみましょう。

課題5:異なる絵柄のカードの組み合わせを考える

課題4と近い,異なる絵柄の数字の組み合わせパターンから始めましょう。以降,jokerは省くことにします。

2,028通りの組み合わせとなり,だいぶ多くなってきました。

課題6:同じ絵柄のカードであるが,同じ数字は省いた組み合わせを考える

同じ絵柄同士を抽出条件にして,課題3と同じ事をやります。

こちらは312通りとなりました。

課題7:いくつかのカードが抜かれた部分トランプの存在する課題6での組み合わせを考える

上のテーブルのように,いくつかのカードが抜けてしまったトランプに対して,課題6と同様に以下のクエリを実行します。

課題8:課題7で,絵柄を区別せず,数字の組み合わせの登場回数を考える

課題7のクエリを絵柄で区別せずに数字の組み合わせのみを考え,かつ組み合わせ毎の登場回数を算出してみましょう。

数字のペア:{1,8}, {3,8}, {3,13} などは全体で3回登場していることがわかります。

さて,この課題において

  • 絵柄 → レシートID(またはユーザーID)
  • 数字 → アイテムID

マッピングすると,課題7では「同じレシート内に存在するアイテムの全ての組み合わせ」を考えている事に等しくなります。

そして課題8は,「全レシートを通じて同時購入されたアイテムペアの登場頻度をカウントする」のと同義となります。

 いかがでしょうか?組み合わせ問題を考えているうちに,気づいたらバスケット分析に近い所までやってきましたね。次回は具体的なECログを用いてバスケット分析を実践していきましょう。