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

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

本サイトは移転しました。新サイトにリダイレクトします。

トレジャーデータで実践:Basket 分析(実行編)

本記事は移転しました。新サイトにリダイレクトします。

はじめに

トレジャーデータはクラウドでデータマネージメントサービスを提供しています。

 

バスケット分析シリーズの第3回目です。実際に実行するところまで見ていきましょう。

EC購買サンプルログ

前回の最後にも記載しましたが,今回使用する購買ログの項目とサンプルを抜粋しておきます。

項目名(抜粋) サンプル1 サンプル2
  time 1379880709 1337749470
  member_id 2026429 1931260
  goods_id 583266 109601
  category  Automotive and Industrial  Automotive and Industrial
  sub_category  Industrial Supplies  Lab and Scientific
  ship_date  2013-09-27  2021-01-03
  amount 1 1
  price 277 300

上のデータ項目をきっちり合わせる必要はありませんが,上の項目を保持したテーブルを持っていれば,様々な分析用途に使えます。バスケット分析において最低限必要な項目を赤,あると良い項目を黒でリストアップしてみます:

  • goods_id:アイテムを識別するID。
  • order_id (, order_date, ship_date, receipt_id ):個人の1回の注文を識別するためのID(発注ID,レシートID,発注時間)または日付(発注日,同日内の購入を共起とみなす場合)です。
  • goods_name:アイテムの名称。アイテム名で集計結果が出れば,人間にとっては理解しやすいアウトプットになります。
  • category, sub_category:カテゴリ,サブカテゴリ。goods_id の組み合わせが多すぎる場合はその上位階層であるカテゴリ,サブカテゴリを共起計算に用います。
  • member_id:会員を識別するID。バスケット分析を,1回の買い物単位での同時購入ではなく,メンバー単位で行う際に必要となります。
  • amount:アイテムの注文個数です。バスケット分析で個数に重みをつけて共起計算する際や,price との掛け合わせで購入額で重みをつけて共起計算する際に使います。
  • price:アイテムの(購入時での)価格。

バスケット分析クエリ

| A | , | B |

まず,アイテム単体の登場回数を別個で集計しておきます。バスケット分析を行う場合には共起係数を計算するために,アイテムごと単独での登場回数が必要になります。

| A  ∩  B | 

頭の体操編の課題8を思い出して下さい。以下のクエリは個人の1回の注文で同時に購入されたアイテム群から作られるペアの組み合わせを列挙し,各ペアの共起回数を,全ての注文で足し合わせる事で算出しています。アイテムのペアを A, B としたとき,この条件での組み合わせ数を | A ∩ B | と書きます。

f:id:doryokujin:20150501135828j:plain

年ごとにバスケット分析を行っています。下の図はセレクトボックスで年を切り替えることができます。

アイテムの登場回数をx軸,y軸に,共起回数の大きさをバブルの大きさと色で表した散布図
共起回数の大きさをバブルの大きさと色で表した散布図Top50
  • 共起回数は,アイテムのどちらか登場回数が大きい方にひきずられて大きくなってしまう傾向があります。少数同士のペアで共起性の強いものはこの指標では見つけることができません。
  • 下の図は,| A |,| B | の出現回数が大きいペアは,下図で見るように関連性が薄いものであっても,出現回数が小さいペアより共起回数が大きくなるケースが多々あります。

f:id:doryokujin:20150501143518j:plain

共起係数

共起係数(尺度)をあらわす指標は代表的なものとして以下の3つが挙げられます。それぞれの係数に優劣はありません。これらの係数のそれぞれの特徴を把握し,うまく使い分ける事が肝要です。

Simpson 係数

式:| A ∩ B | / min ( | A |, | B | )

f:id:doryokujin:20150501143928j:plain

アイテムの登場回数をx軸,y軸に,Simpson係数の大きさをバブルの大きさと色で表した散布図
Simpson係数の大きさをバブルの大きさと色で表した散布図Top50
  • Simpson係数の分母は値の小さい方のアイテムAの登場回数を取るので,共起回数と少ない方のアイテムの登場回数が近ければ近いほどこの係数は大きくなります。
  • ゆえにSimpson係数の大きいペアの小さい方のアイテムAは,単独では登場せずに必ず他のアイテムと共起して現れてくる特殊なアイテムを表現しています。
  • 下図のように,小さい方のアイテムが大きい方に深く入り込んでいる場合にSimpson係数は極めて高くなります。

f:id:doryokujin:20150501144406j:plain

Cosine 係数

式:| A ∩ B | / sqrt ( | A | * | B | )

f:id:doryokujin:20150501144640j:plain

アイテムの登場回数をx軸,y軸に,Cosine係数の大きさをバブルの大きさと色で表した散布図
Cosine係数の大きさをバブルの大きさと色で表した散布図Top50
  • Cosine係数は,ペアの単独での登場回数がほぼ近い関係のもので共起回数が多いものを発見してくれます。どちらかの登場回数に引っ張られる共起回数や,少ない方に引っ張られるSimpson係数に比べてバランスの良い係数となっています。

Dice 係数

式:2 * | A ∩ B | / ( | A | + | B | )

f:id:doryokujin:20150501144848j:plain

アイテムの登場回数をx軸,y軸に,Dice係数の大きさをバブルの大きさと色で表した散布図
Dice係数の大きさをバブルの大きさと色で表した散布図Top50
  • Dice係数もCosine係数と同様の性質を持っています。

 

また,アイテム同士の共起の可視化として,以下の様なグラフ表現も有効です。各ノードがアイテムを表し,共起回数を辺の太さで表現しています。

f:id:doryokujin:20150428153820p:plain

次回はバスケット分析の他の分野への応用に入っていきます。