Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright © BrainPad Inc. All Rights Reserved.
DeltaCubeにおけるユニークユーザー集計高速化
(理論編)
2016年6月10日
Copyright © BrainPad Inc. All Rights Reserved.
1. DeltaCubeとは
2
Copyright © BrainPad Inc. All Rights Reserved. 3
 DMPのセグメント作成に特化したデータマネジメントツール
 プライベートDMP 「Rtoaster」とシームレスに連携可能
 Rtoast...
Copyright © BrainPad Inc. All Rights Reserved.
 セグメント作成機能
– DMPに蓄積されたデータ(行動データ、CRMデータ、外部データ、
セグメントデータ等)を元に、ユーザー数を確認しながら直感...
Copyright © BrainPad Inc. All Rights Reserved.
 DeltaCubeは、蓄積されたデータ(Webサイトのトラッキングログ等)
を元に、ユーザーのセグメントを作成するツール
– 様々な条件設定が可能...
Copyright © BrainPad Inc. All Rights Reserved.
 DeltaCubeではPrestoという分散処理ミドルウェアを集計に利用
– Prestoを用いて厳密に集計を行っている
– これを概算値でよいの...
Copyright © BrainPad Inc. All Rights Reserved.
2. Prestoとは
7
Copyright © BrainPad Inc. All Rights Reserved.
2013/11/06に米FacebookがOSSとして公開。
公式ドキュメント(https://prestodb.io/docs/current/in...
Copyright © BrainPad Inc. All Rights Reserved.
 「SQLクエリエンジン」とあるように、SQLクエリを投げられる
 例えば、t_log_dataテーブルにWebページのトラッキングを格納して
い...
Copyright © BrainPad Inc. All Rights Reserved.
3. approx_distinctとは
10
Copyright © BrainPad Inc. All Rights Reserved.
https://prestodb.io/docs/current/functions/aggregate.html
 Prestoに用意されている(...
Copyright © BrainPad Inc. All Rights Reserved.
 標準誤差((おそらく正規)誤差分布の標準偏差)2.3%で値を返す
– ただし、これは全ての入力に対して誤差の上限を与えるものではない
 「app...
Copyright © BrainPad Inc. All Rights Reserved.
4. HyperLogLogとは
13
Copyright © BrainPad Inc. All Rights Reserved.
(元論文)
Philippe Flajolet, Éric Fusy, Oliver Gandouet and Frederic Meunier,
H...
Copyright © BrainPad Inc. All Rights Reserved.
 ユーザーを識別する値(ユーザーID等)を2進数にハッシュ化するハッ
シュ関数を用意しておく
– ハッシュ値の各ビットは独立であるとする
 全デー...
Copyright © BrainPad Inc. All Rights Reserved.
 下記元論文のFig. 2参照
– http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pd...
Copyright © BrainPad Inc. All Rights Reserved.
 定義
– 集合𝐷の要素を2進数(無限長)にハッシュ化する関数をℎと定義する
(ℎ: 𝐷 → 0, 1 ≡ {0, 1}∞)
– 2進数𝑠 ∈ {0...
Copyright © BrainPad Inc. All Rights Reserved.
 集合Mに含まれる要素𝒗 ∈ Mについて、以下の手順を繰り返す
– 𝑣をハッシュ化した値を𝑥とおく(𝑥 ≔ ℎ(𝑣))
– 𝑥の左から𝑏ビット目まで...
Copyright © BrainPad Inc. All Rights Reserved.
 元論文のFig. 3参照
– http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf
...
Copyright © BrainPad Inc. All Rights Reserved.
 𝒎の値とその際の𝜶 𝒎の値
– 𝛼16 = 0.673
– 𝛼32 = 0.697
– 𝛼64 = 0.709
– 𝛼 𝑚 = 0.7213/(1...
Copyright © BrainPad Inc. All Rights Reserved.
 推定値(𝑬)に対して補正をかけて最終的な推定値(𝑬∗)とする
– 𝐸 ≤
5
2
𝑚の場合(ただし𝑚 ≥ 16)
• もしレジスタの値が0であるよ...
Copyright © BrainPad Inc. All Rights Reserved.
 誤差をさらに小さくするための手法がいくつか考案されている
– 閾値を設定し、途中でアルゴリズムを切り替える
• Stefan Heule, Mar...
Copyright © BrainPad Inc. All Rights Reserved.
5. HyperLogLogのPrestoにおける実装
23
Copyright © BrainPad Inc. All Rights Reserved. 24
approx_distinctはHyperLogLogを利用
 approx_distinctでは
HyperLogLogが利用されている
–...
Copyright © BrainPad Inc. All Rights Reserved.
 https://github.com/airlift/airlift/blob/master/stats/docs/hl
l.md
 ハッシュ関...
Copyright © BrainPad Inc. All Rights Reserved.
8. 参考文献
26
Copyright © BrainPad Inc. All Rights Reserved.
 Philippe Flajolet, Éric Fusy, Oliver Gandouet and Frederic Meunier,
Hyper...
Copyright © BrainPad Inc. All Rights Reserved.
株式会社ブレインパッド
〒108-0071 東京都港区白金台3-2-10 白金台ビル3F
TEL:03-6721-7001
FAX:03-6721-7...
Upcoming SlideShare
Loading in …5
×

DeltaCubeにおけるユニークユーザー集計高速化(理論編)

3,501 views

Published on

Prestoを利用したユニークユーザー集計の高速化に関するデータマネジメントツール「DeltaCube」の資料①

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

DeltaCubeにおけるユニークユーザー集計高速化(理論編)

  1. 1. Copyright © BrainPad Inc. All Rights Reserved. DeltaCubeにおけるユニークユーザー集計高速化 (理論編) 2016年6月10日
  2. 2. Copyright © BrainPad Inc. All Rights Reserved. 1. DeltaCubeとは 2
  3. 3. Copyright © BrainPad Inc. All Rights Reserved. 3  DMPのセグメント作成に特化したデータマネジメントツール  プライベートDMP 「Rtoaster」とシームレスに連携可能  Rtoasterの様々なデータを組み合わせて新たなセグメントを高速に作成することが可能  作成したセグメントのユーザー数をスピーディーに確認可能 DeltaCube(デルタキューブ)とは プライベートDMP 外部DSP外部DSPCRMデータ サイト デジタル広告 メールアプリ 新規セグメントデータ 行動データ、 セグメントデータ等 DeltaCube で作成したセグメントに 最適なアクションを実施! 外部DSP外部DSPパブリックDMP Yahoo! DMP 等 会員属性等 直感的にセグメントを作成!
  4. 4. Copyright © BrainPad Inc. All Rights Reserved.  セグメント作成機能 – DMPに蓄積されたデータ(行動データ、CRMデータ、外部データ、 セグメントデータ等)を元に、ユーザー数を確認しながら直感的な 操作でセグメントを作成することが可能 – 作成したセグメント同士を掛け合わせ可能  クラスタリング機能 – これまでの弊社データ分析の知見を活かし、DMPに蓄積されたデータ を用いた自動クラスタリング機能 – 類似ユーザー同士を自動分類してセグメントを作成 – 自動作成された各セグメントの特徴(どのようなユーザーが含まれる か)を推定して表示 – サイト全体のユーザー像を把握可能 4 DeltaCubeの主な機能 今回はこちらのユーザー数を確認 する機能の高速化についてのお話
  5. 5. Copyright © BrainPad Inc. All Rights Reserved.  DeltaCubeは、蓄積されたデータ(Webサイトのトラッキングログ等) を元に、ユーザーのセグメントを作成するツール – 様々な条件設定が可能 • 集計期間、閲覧URL、デバイスなど  結果を確認しながら、ストレスなくセグメントを作成するには、設定し た条件に一致するユニークユーザーの数を高速に確認したい – しかし、集計対象のデータは膨大で厳密に集計していては遅い • Webサイトの全てのユーザーのサイト内での全ての行動ログなど • 1日で数百~数百万ユーザーの全てのログが出てくる • これをDeltaCubeでは最大180日間までの期間で集計可能 – 1人単位まで厳密に出す必要はなく、ボリューム感がわかれば良い • 推定値で良い 5 ユニークユーザー数確認機能
  6. 6. Copyright © BrainPad Inc. All Rights Reserved.  DeltaCubeではPrestoという分散処理ミドルウェアを集計に利用 – Prestoを用いて厳密に集計を行っている – これを概算値でよいので高速化したい 6 ユニークユーザー数確認機能の高速化 この数値を 高速に求め たい! DeltaCubeセグメント作成時の例
  7. 7. Copyright © BrainPad Inc. All Rights Reserved. 2. Prestoとは 7
  8. 8. Copyright © BrainPad Inc. All Rights Reserved. 2013/11/06に米FacebookがOSSとして公開。 公式ドキュメント(https://prestodb.io/docs/current/index.html)によると、 “Presto is a distributed SQL query engine designed to query large data sets distributed over one or more heterogeneous data sources.” そのまま訳すと「1つ以上のデータソースに分散した大規模なデータセット に対してクエリを実行するために設計された分散SQLクエリエンジン」。  特徴  全てのデータをインメモリで処理するため、レスポンスが非常に速い  個々のタスクを並列で処理させるため、高速  オンラインからのアドホックな参照クエリに向いている  複数のデータソースに対して一度に集計を実行可能 8 Prestoとは
  9. 9. Copyright © BrainPad Inc. All Rights Reserved.  「SQLクエリエンジン」とあるように、SQLクエリを投げられる  例えば、t_log_dataテーブルにWebページのトラッキングを格納して いたとする – uid列にユーザーを識別するためのユーザーIDが入っている – 当然他のデータが入る列が存在している  ここでユニークユーザー数(以降、UU数)を数えるには、以下の様な クエリを実行する  Prestoでは、COUNT(DISTINCT x)の推定値を返す関数がある – approx_distinctといい、推定であるため高速に動作する 9 Prestoでユニークユーザ集計 SELECT COUNT(DISTINCT uid) FROM t_log_data WHERE (絞り込みたい条件) ; uid datetime site page ・・・ agent Uid1 2016-06-08 12:00:00 www.brainpad.co.jp /top ・・・ PC Uid2 ・・・ ・・・ ・・ ・・・ ・・・ Uid1 ・・・ ・・・ ・・ ・・・ ・・・ t_log_dataテーブルのイメージ
  10. 10. Copyright © BrainPad Inc. All Rights Reserved. 3. approx_distinctとは 10
  11. 11. Copyright © BrainPad Inc. All Rights Reserved. https://prestodb.io/docs/current/functions/aggregate.html  Prestoに用意されている(概算)集計関数の一つで、入力データxの cardinality(カーディナリティ、異なり数、濃度)の推定値を返す関数 – つまり、「COUNT(DISTINCT x)」の推定値を返す関数  使用例 – 使い方は簡単 11 approx_distinctとは(1) SELECT COUNT(DISTINCT uid) FROM t_log_data WHERE (絞り込みたい条件) ; SELECT approx_distinct(uid) FROM t_log_data WHERE (絞り込みたい条件) ; 厳密に 集計 概算で 集計
  12. 12. Copyright © BrainPad Inc. All Rights Reserved.  標準誤差((おそらく正規)誤差分布の標準偏差)2.3%で値を返す – ただし、これは全ての入力に対して誤差の上限を与えるものではない  「approx_distinct(x, e)」のようにして利用することも可能 – この場合、標準誤差がeを超えないように推定を行う – ただし、これも誤差の上限を与えるものではない – 0.01150 ≤ e ≤ 0.26000で与える必要がある(2016/06/10現在)  内部ではHyperLogLogと呼ばれるアルゴリズムが利用されている – HyperLogLogやそのPrestoでの実装など、詳細については後述 12 approx_distinctとは(2)
  13. 13. Copyright © BrainPad Inc. All Rights Reserved. 4. HyperLogLogとは 13
  14. 14. Copyright © BrainPad Inc. All Rights Reserved. (元論文) Philippe Flajolet, Éric Fusy, Oliver Gandouet and Frederic Meunier, HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm, 2007. http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf  データのcardinalityを推定するアルゴリズム  近最適(near-optimal)な確率的アルゴリズム  大規模なデータに対して高速かつ省メモリで実行可能  Webサイトのトラッキングログなどを元に、UU数推定に利用可能  Base-2 RankというMinHashの手法の1つを利用している – MinHashやBase-2 Rankについては、以下の資料がわかりやすい – http://www.slideshare.net/iwiwi/minhash – http://recruit.gmo.jp/engineer/jisedai/blog/redis_fast_countin g/ 14 HyperLogLogとは
  15. 15. Copyright © BrainPad Inc. All Rights Reserved.  ユーザーを識別する値(ユーザーID等)を2進数にハッシュ化するハッ シュ関数を用意しておく – ハッシュ値の各ビットは独立であるとする  全データをハッシュ化する – 各ハッシュ値において、先頭に0が連続する個数を数える – これが最も多かったときの、連続した0の個数を𝑝として記録しておく  データに含まれるUU数は𝟐 𝒑と推定する – なぜ? – ハッシュ値の各ビットが独立であるとすると、各ビットで0が出る確 率は 1 2 であり(1が出る確率と半々)、0が𝑝個連続する確率は 1 2 𝑝 – つまり、実際に0が𝑝個連続する(確率 1 2 𝑝で出てくる)ようなデータ (ユーザー)が存在したので、元となるデータには2 𝑝種類のデータが 含まれていたであろうと推定する 15 HyperLogLogの基礎 実際には、ハッシュ関数1つでは乱暴
  16. 16. Copyright © BrainPad Inc. All Rights Reserved.  下記元論文のFig. 2参照 – http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf HyperLogLogの一般的なアルゴリズム(1) 16
  17. 17. Copyright © BrainPad Inc. All Rights Reserved.  定義 – 集合𝐷の要素を2進数(無限長)にハッシュ化する関数をℎと定義する (ℎ: 𝐷 → 0, 1 ≡ {0, 1}∞) – 2進数𝑠 ∈ {0, 1}∞ を与えるとその左から数えて最初に1が出るビットの 位置を返す関数を𝜌と定義する • 例:𝜌 0001 … = 4  入力データ – 入力として集合𝐷に含まれる要素の多重集合Mを与える • 例:サイトのログに出てくるユーザーID列の値(重複あり)  仮定と初期化 – 𝑚 = 2 𝑏となるような𝑚を決定する(ただし𝑏 は任意の整数) – 𝑚個のレジスタ( 𝑀 1 , 𝑀 2 , … , 𝑀[𝑚] )を−∞に初期化しておく 17 HyperLogLogの一般的なアルゴリズム(2) 「ハッシュ関 数が1つでは 乱暴」と言っ ていた件につ いての工夫。 でもハッシュ 関数は1つ? 最も長く続いた0の数を記録しておくもの
  18. 18. Copyright © BrainPad Inc. All Rights Reserved.  集合Mに含まれる要素𝒗 ∈ Mについて、以下の手順を繰り返す – 𝑣をハッシュ化した値を𝑥とおく(𝑥 ≔ ℎ(𝑣)) – 𝑥の左から𝑏ビット目までに1を加えた値を𝑗とおく ( 𝑗 = 1+ < 𝑥1 𝑥2 … 𝑥 𝑏 >2 ) – 𝑥の左から𝑏ビット目までを除いた2進数を𝑤とおく ( 𝑤 ≔ 𝑥 𝑏+1 𝑥 𝑏+2 …) – 𝜌(𝑤)が𝑀[𝑗]より大きければ𝑀[𝑗]の値を𝜌(𝑤)に更新 (𝑀 𝑗 ≔ max(𝑀 𝑗 , 𝜌 𝑤 ) )  indicator functionを計算する – 𝑍 ≔ 𝑗=1 𝑚 2−𝑀[𝑗] −1  M のCardinalityの推定値を計算する – 𝐸 ≔ 𝛼 𝑚 𝑚2 𝑍 – 𝛼 𝑚 ≔ 𝑚 0 ∞ (log2( 2+𝑢 1+𝑢 )) 𝑚 𝑑𝑢 −1 HyperLogLogの一般的なアルゴリズム(3) ハッシュ関数は1つ だが、bビット目ま でのハッシュ値を レジスタの決定に 用いる。 つまり擬 似的に後半のビッ ト列が別のハッ シュ関数によって 出た値と考える。 ※ここから具体的な推定値計算に入る レジスタごとに出た推定 値の平均を取りたいが、 指数になっているため単 純な平均ではなく、 normalized bias corrected harmonic meanをとっている。 18
  19. 19. Copyright © BrainPad Inc. All Rights Reserved.  元論文のFig. 3参照 – http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf  cardinalityが 𝟎. . 𝟏𝟎 𝟗 の範囲の場合の実用的なアルゴリズムと パラメータ(𝒎)が載っている  一般的アルゴリズム(前述)との相違点を次スライド以降に記載 19 HyperLogLogの実用的なアルゴリズム(1)
  20. 20. Copyright © BrainPad Inc. All Rights Reserved.  𝒎の値とその際の𝜶 𝒎の値 – 𝛼16 = 0.673 – 𝛼32 = 0.697 – 𝛼64 = 0.709 – 𝛼 𝑚 = 0.7213/(1 + 1.079/𝑚) 𝑓𝑜𝑟 𝑚 ≥ 128  ハッシュ値は32ビットの2進数 – 元は無限長  レジスタの初期値は0 – 元は−∞ 20 HyperLogLogの実用的なアルゴリズム(2) 各レジスタに保存する整数 の範囲は 0. . L + 1 − log2 𝑚 となる(ここでは 𝐿 = 32 )。 つまり各レジスタでメモリ は5ビットもあれば十分。 よって全体でもメモリは5𝑚 ビットあれば足りる。 驚きの省メモリ!
  21. 21. Copyright © BrainPad Inc. All Rights Reserved.  推定値(𝑬)に対して補正をかけて最終的な推定値(𝑬∗)とする – 𝐸 ≤ 5 2 𝑚の場合(ただし𝑚 ≥ 16) • もしレジスタの値が0であるようなレジスタの数(𝑉)が0でない場合 – 𝐸∗ ≔ 𝑚 log(𝑚/𝑉) • そうでない場合 – 𝐸∗ ≔ 𝐸 – 5 2 𝑚 ≤ 𝐸 ≤ 1 30 232の場合 • 𝐸∗ ≔ 𝐸 – 𝐸 ≥ 1 30 232の場合 • 𝐸∗ ≔ −232 log(1 − 𝐸/232)  標準誤差は 𝟏.𝟎𝟒 𝒎 – cardinalityが極大化すれば 21 HyperLogLogの実用的なアルゴリズム(3) Hit Counting(Linear Counting)と呼ばれる アルゴリズム。 Kyu-young Whang, Brad T. Vander-zanden and Howard M. Taylor, A Linear-Time Probabilistic Counting Algorithm for Database Applications, 1990. http://dblab.kaist.ac.kr/Prof/pdf/Whang199 0%28linear%29.pdf • 𝑚個の入れ物に𝑛個の球を投げて、球が 一つも入らない入れ物の数は𝑚𝑒−𝜇 個 • つまり𝜇 ≔ 𝑛 𝑚 • 空の入れ物の数を𝑉とおけば、 𝑛 = 𝑚 log(𝑚/𝑉)と推定できる
  22. 22. Copyright © BrainPad Inc. All Rights Reserved.  誤差をさらに小さくするための手法がいくつか考案されている – 閾値を設定し、途中でアルゴリズムを切り替える • Stefan Heule, Marc Nunkesser, Alexander Hall , HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm, 2013. • https://stefanheule.com/papers/edbt13-hyperloglog.pdf – 事前に推定値補正用のテーブルを作成しておく • 同上 • https://docs.google.com/document/d/1gyjfMHy43U9OWBXxfaeG- 3MjGzejW1dlpyMwEYAAWEI/view?fullscreen – ハッシュ値が最小のものだけを用いるのではなく、計算過程で出てき たものも利用する (そのときそのようなハッシュ値が出る確率を考慮) • Edith Cohen, All-Distances Sketches, Revisited: HIP Estimators for Massive Graphs Analysis, 2014. • http://arxiv.org/pdf/1306.3284.pdf 22 HyperLogLogの改善
  23. 23. Copyright © BrainPad Inc. All Rights Reserved. 5. HyperLogLogのPrestoにおける実装 23
  24. 24. Copyright © BrainPad Inc. All Rights Reserved. 24 approx_distinctはHyperLogLogを利用  approx_distinctでは HyperLogLogが利用されている – https://github.com/prestodb/p resto/blob/master/presto- main/src/main/java/com/face book/presto/operator/aggregat ion/ApproximateCountDistinctA ggregations.java – ソースコードにそのまま HyperLogLogという名前がある • 内部ではAirliftというパッケージ を利用 • Airlift : RESTサービスを構築する ためのフレームワーク
  25. 25. Copyright © BrainPad Inc. All Rights Reserved.  https://github.com/airlift/airlift/blob/master/stats/docs/hl l.md  ハッシュ関数はMurmurHash3-128bit – 衝突困難性、一様性、計算コストに優れている – 実際に利用するのは128ビットではなく64ビットもしくは26ビット  LinearCounting用のメソッドも準備 – https://github.com/airlift/airlift/blob/master/stats/src/main/ja va/io/airlift/stats/cardinality/Utils.java  推定値補正用のテーブルも準備 – https://github.com/airlift/airlift/blob/master/stats/src/main/ja va/io/airlift/stats/cardinality/BiasCorrection.java 25 AirliftにおけるHyperLogLogの実装
  26. 26. Copyright © BrainPad Inc. All Rights Reserved. 8. 参考文献 26
  27. 27. Copyright © BrainPad Inc. All Rights Reserved.  Philippe Flajolet, Éric Fusy, Oliver Gandouet and Frederic Meunier, HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm, 2007. – http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf  Stefan Heule, Marc Nunkesser, Alexander Hall , HyperLogLog in Practice: Algorithmic Engineering of a State of The Art Cardinality Estimation Algorithm, 2013. – https://stefanheule.com/papers/edbt13-hyperloglog.pdf  Edith Cohen, All-Distances Sketches, Revisited: HIP Estimators for Massive Graphs Analysis, 2014. – http://arxiv.org/pdf/1306.3284.pdf  Kyu-young Whang, Brad T. Vander-zanden and Howard M. Taylor, A Linear-Time Probabilistic Counting Algorithm for Database Applications, 1990. – http://dblab.kaist.ac.kr/Prof/pdf/Whang1990%28linear%29.pdf  RedisのBitCountとHyperLogLogを使用した超高速Unique User数集計 – http://recruit.gmo.jp/engineer/jisedai/blog/redis_fast_counting/  乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩- – http://www.slideshare.net/iwiwi/minhash 27 参考文献
  28. 28. Copyright © BrainPad Inc. All Rights Reserved. 株式会社ブレインパッド 〒108-0071 東京都港区白金台3-2-10 白金台ビル3F TEL:03-6721-7001 FAX:03-6721-7010 info@brainpad.co.jp Copyright © BrainPad Inc. All Rights Reserved. www.brainpad.co.jp

×