トレジャーデータで実践:Basket 分析(心の準備編)
本記事は移転しました。新サイトにリダイレクトします。
Treasure Data - データ分析をクラウドで、シンプルに。 - Treasure Data
はじめに
前回の「頭の体操編」では,数字やトランプの組み合わせの抽出をSQLで実践してみました。本題に入る前に,今回はこの「組み合わせ」が引き起こすバスケット分析の本質的な問題の1つ:「計算量の問題」について説明し,分析の際にはいつもこの問題を心にとめておいてもらえる事を目的としています。
SQLで頭の体操 〜組み合わせの計算〜(続)
前回に引き続いてもう2つだけ頭の体操をしましょう。下のトランプテーブルを使います。
課題9:53枚のトランプのペアの組み合わせを全て考える。
今回の課題はシンプルに,53種のカードのペアが取り得る組み合わせ(順序は別とします)を考えてみましょう。クエリは課題1と同じです。
さて,このクエリで全部で何種類のペアが生成されたのでしょうか?
答えは 2,809 通り,これは 53×53 の値となっています。一般に n 通りの値のバリエーションを持つテーブルに対して,全ての組み合わせを求めるような計算では,その計算過程で n × n の組み合わせが生成され,処理されていきます。
ECの場合では,アイテムの品揃えが 10 万点以上,なんてところもざらにあると思います。そのような場合でバスケット分析を行う事は,100億通りの組み合わせが計算過程で考慮されることになります。
従来のシングルノードのデータベースではこのオーダーの計算量は対応できるレベルのものではありませんでした。インプットデータは小さくても組み合わせで「爆発」してしまうバスケット分析などが,簡単に実現できなかった原因の1つにこの問題があったのです。
課題10:53枚のトランプのトリプレット(三つ組み)の組み合わせを全て考える。
蛇足ですが,トランプの可能な3枚の組み合わせを考えると何通りの組み合わせが生まれてくるのでしょうか?
答えは 53×53×53 = 148,877 通りです。
もちろん,組み合わせの順序を区別しなかったり,同じカードの重複を避ける(いくつかの課題で求めてみましたね)ことで計算量は 1/2 〜 1/10 程度に減らすことができますが,逆に言えばその程度にしか工夫余地が無い事を示していることになります。
Treasure Data で組み合わせ問題を扱うことのメリット
トレジャーデータのようなクラウド型データ分析基盤でこれらの問題を扱うことのメリットは2つあります:
- 計算リソースを増やすことで力業で解決できる(かもしれない)
- 誤って大負荷のクエリを投げてしまっても,誰にも迷惑をかけない
1. は,実は多くのケースでは,Hiveのコア数(分散処理するノードの数)を増やせば,力業で何とかなるという事実です。従来のRDBMSでは大きなテーブル同士のJOIN,特に全組み合わせを出す "CROSS JOIN" 処理は御法度とされていましたが,大規模データ処理基盤上ではそれにトライする余地が含まれています。
2. は,様々なトライ&エラーを繰り返す「分析」という業務において非常に大きなメリットとなります。従来,データ分析はサービスのすぐ近くにありました。この状況下での分析は,購買履歴やアクセス履歴が書き出されているデータベースやサーバーに直接,またはそのレプリケーションに対して間接的にクエリを投げていました。これでは誤って大負荷のクエリを投げてしまったら,サービス自身に影響を与えてしまうことになり社内のサーバー管理者に迷惑をかけてしまうことになります。
「クラウド」型データ分析基盤は,データ分析をあえてサービスと切り離してクラウド上に隔離することによって,周囲に迷惑をかけずにのびのびと分析を行う環境を実現しました。バスケット分析やパス分析は,このような環境で初めてトライできる先進的な試みなのです。
EC購買サンプルログ
それでは今回扱うECの購買サンプルログを紹介します。"sales_slip" というテーブル名のこの購買ログには約50万点のgoodsが出現します。
バスケット分析で扱うアイテムのペアは同じもの同士を除き,かつペアの順序は同一視しますので最大 ( 50万件 × 50万件 - 50万件 ) / 2 ≃ 1250億通り の組み合わせが出現することになります。
time | member_id | goods_id | category | sub_category | order_date | ship_date | amount | price |
---|---|---|---|---|---|---|---|---|
Sep 23, 2013 @ 05:11:49 AM | 2026429 | 583266 | Automotive and Industrial | Industrial Supplies | 2013-09-24 13:26:07 | 2013-09-27 | 1 | 277 |
Feb 17, 2013 @ 03:21:27 AM | 1931260 | 109601 | Automotive and Industrial | Lab and Scientific | 1900-01-01 00:00:00 | 2021-01-03 | 1 | 300 |
Dec 21, 2012 @ 08:19:02 AM | 1962900 | 608838 | Books and Audible | Books | 2012-12-25 13:47:22 | 2012-12-28 | 1 | 4753 |
May 23, 2012 @ 02:05:38 PM | 1931260 | 109601 | Automotive and Industrial | Lab and Scientific | 1900-01-01 00:00:00 | 2021-01-03 | 1 | 300 |
May 23, 2012 @ 02:04:30 PM | 1931260 | 109601 | Automotive and Industrial | Lab and Scientific | 1900-01-01 00:00:00 | 2021-01-03 | 1 | 300 |
Dec 15, 2011 @ 07:48:31 AM | 288865 | 547369 | Movies and Music and Games | CDs and Vinyl | 2011-12-20 14:08:15 | 2011-12-23 | 1 | 2648 |
Dec 11, 2011 @ 10:15:50 PM | 1447334 | 544392 | Home and Garden and Tools | Fine Art | 2011-12-13 14:05:04 | 2011-12-16 | 1 | 2648 |
Nov 12, 2011 @ 04:29:42 PM | 907986 | 538981 | Sports and Outdoors | Leisure Sports and Game Room | 2011-11-15 14:00:03 | 2011-11-18 | 1 | 8458 |
Oct 30, 2011 @ 10:10:23 PM | 1931260 | 109601 | Automotive and Industrial | Lab and Scientific | 1900-01-01 00:00:00 | 2021-01-03 | 1 | 300 |
Sep 03, 2011 @ 11:24:29 PM | 1447249 | 525469 | Movies and Music and Games | Musical Instruments | 2011-09-06 13:56:21 | 2011-09-09 | 1 | 952 |
↑ 必要な項目のみを抽出しましたが,ECの購買ログは概ね上の様な構造を持っています。今回,「categoty」,「sub_category」には amazon.com と同じカテゴリ構造 を割り振っています。
次回は実際にバスケット分析を進めていくとともに,トレジャーデータではこの規模のデータセットに対してどの程度のパフォーマンスを出すのかも紹介していくつもりです。
業界向けクエリテンプレート
トレジャーデータでは,分析プラットフォームの提供に加えて,
- 購買ログを初めとした一連のEC向けサンプルデータセット
- バスケット分析やRFM分析をはじめとした一連の分析クエリテンプレート
をセットにした業界別アディショナルプランも提供しております。ご興味のある方はこれを機にトレジャーデータへぜひ一度お問い合わせ下さい。
↓ クエリテンプレートページの一例