SlideShare a Scribd company logo
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」とシームレスに連携可能
 Rtoasterの様々なデータを組み合わせて新たなセグメントを高速に作成することが可能
 作成したセグメントのユーザー数をスピーディーに確認可能
DeltaCube(デルタキューブ)とは
プライベートDMP
外部DSP外部DSPCRMデータ
サイト デジタル広告 メールアプリ
新規セグメントデータ
行動データ、
セグメントデータ等
DeltaCube で作成したセグメントに
最適なアクションを実施!
外部DSP外部DSPパブリックDMP
Yahoo! DMP 等
会員属性等
直感的にセグメントを作成!
Copyright © BrainPad Inc. All Rights Reserved.
 セグメント作成機能
– DMPに蓄積されたデータ(行動データ、CRMデータ、外部データ、
セグメントデータ等)を元に、ユーザー数を確認しながら直感的な
操作でセグメントを作成することが可能
– 作成したセグメント同士を掛け合わせ可能
 クラスタリング機能
– これまでの弊社データ分析の知見を活かし、DMPに蓄積されたデータ
を用いた自動クラスタリング機能
– 類似ユーザー同士を自動分類してセグメントを作成
– 自動作成された各セグメントの特徴(どのようなユーザーが含まれる
か)を推定して表示
– サイト全体のユーザー像を把握可能
4
DeltaCubeの主な機能
今回はこちらのユーザー数を確認
する機能の高速化についてのお話
Copyright © BrainPad Inc. All Rights Reserved.
 DeltaCubeは、蓄積されたデータ(Webサイトのトラッキングログ等)
を元に、ユーザーのセグメントを作成するツール
– 様々な条件設定が可能
• 集計期間、閲覧URL、デバイスなど
 結果を確認しながら、ストレスなくセグメントを作成するには、設定し
た条件に一致するユニークユーザーの数を高速に確認したい
– しかし、集計対象のデータは膨大で厳密に集計していては遅い
• Webサイトの全てのユーザーのサイト内での全ての行動ログなど
• 1日で数百~数百万ユーザーの全てのログが出てくる
• これをDeltaCubeでは最大180日間までの期間で集計可能
– 1人単位まで厳密に出す必要はなく、ボリューム感がわかれば良い
• 推定値で良い
5
ユニークユーザー数確認機能
Copyright © BrainPad Inc. All Rights Reserved.
 DeltaCubeではPrestoという分散処理ミドルウェアを集計に利用
– Prestoを用いて厳密に集計を行っている
– これを概算値でよいので高速化したい
6
ユニークユーザー数確認機能の高速化
この数値を
高速に求め
たい!
DeltaCubeセグメント作成時の例
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/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とは
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テーブルのイメージ
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に用意されている(概算)集計関数の一つで、入力データ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
(絞り込みたい条件)
;
厳密に
集計
概算で
集計
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)
Copyright © BrainPad Inc. All Rights Reserved.
4. HyperLogLogとは
13
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とは
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つでは乱暴
Copyright © BrainPad Inc. All Rights Reserved.
 下記元論文のFig. 2参照
– http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf
HyperLogLogの一般的なアルゴリズム(1)
16
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の数を記録しておくもの
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
Copyright © BrainPad Inc. All Rights Reserved.
 元論文のFig. 3参照
– http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf
 cardinalityが 𝟎. . 𝟏𝟎 𝟗 の範囲の場合の実用的なアルゴリズムと
パラメータ(𝒎)が載っている
 一般的アルゴリズム(前述)との相違点を次スライド以降に記載
19
HyperLogLogの実用的なアルゴリズム(1)
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𝑚
ビットあれば足りる。
驚きの省メモリ!
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(𝑚/𝑉)と推定できる
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の改善
Copyright © BrainPad Inc. All Rights Reserved.
5. HyperLogLogのPrestoにおける実装
23
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サービスを構築する
ためのフレームワーク
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の実装
Copyright © BrainPad Inc. All Rights Reserved.
8. 参考文献
26
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
参考文献
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

More Related Content

PDF
RedisのBitCountとHyperLogLogを使用した超高速Unique User数集計
PDF
オンラインゲームソリューション@トレジャーデータ
PDF
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
PDF
20140708 オンラインゲームソリューション
PDF
Treasure Data Intro for Data Enthusiast!!
PDF
トレジャーデータ新サービス発表 2013/12/9
PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
PDF
トレジャーデータ流,データ分析の始め方
RedisのBitCountとHyperLogLogを使用した超高速Unique User数集計
オンラインゲームソリューション@トレジャーデータ
Prestoで実現するインタラクティブクエリ - dbtech showcase 2014 Tokyo
20140708 オンラインゲームソリューション
Treasure Data Intro for Data Enthusiast!!
トレジャーデータ新サービス発表 2013/12/9
IoT時代におけるストリームデータ処理と急成長の Apache Flink
トレジャーデータ流,データ分析の始め方

What's hot (20)

PDF
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
PDF
トレジャーデータのバッチクエリとアドホッククエリを理解する
PDF
事例で学ぶトレジャーデータ 20140612
PDF
最近のストリーム処理事情振り返り
ODP
Hadoop for programmer
PPTX
今さら聞けないHadoop セントラルソフト株式会社(20120119)
PPTX
Azure Search 大全
PPTX
Azure Datalake 大全
PDF
FluentdやNorikraを使った データ集約基盤への取り組み紹介
PDF
気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-
PDF
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
PDF
並列データベースシステムの概念と原理
PDF
Treasure Data × Wave Analytics EC Demo
PDF
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
PPTX
Hadoopカンファレンス2013
PDF
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
PDF
実践機械学習 — MahoutとSolrを活用したレコメンデーションにおけるイノベーション - 2014/07/08 Hadoop Conference ...
PPT
クラウド時代の並列分散処理技術
PDF
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
PPT
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータのバッチクエリとアドホッククエリを理解する
事例で学ぶトレジャーデータ 20140612
最近のストリーム処理事情振り返り
Hadoop for programmer
今さら聞けないHadoop セントラルソフト株式会社(20120119)
Azure Search 大全
Azure Datalake 大全
FluentdやNorikraを使った データ集約基盤への取り組み紹介
気象庁XMLのSPARQL APIを利用してデータを俯瞰しよう -SPARQLとRによる可視化-
Sparkによる GISデータを題材とした時系列データ処理 (Hadoop / Spark Conference Japan 2016 講演資料)
並列データベースシステムの概念と原理
Treasure Data × Wave Analytics EC Demo
Amazon Elastic MapReduce@Hadoop Conference Japan 2011 Fall
Hadoopカンファレンス2013
Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会)
実践機械学習 — MahoutとSolrを活用したレコメンデーションにおけるイノベーション - 2014/07/08 Hadoop Conference ...
クラウド時代の並列分散処理技術
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Amazon Redshift ベンチマーク Hadoop + Hiveと比較
Ad

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

PDF
DeltaCubeにおけるユニークユーザー集計高速化(実践編)
PDF
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
PDF
データ解析技術入門(R編)
PDF
Rブートキャンプ
PDF
El text.tokuron a(2019).yamamoto190627
PDF
第9回 配信講義 計算科学技術特論A(2021)
PDF
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
PPTX
Approximate Scalable Bounded Space Sketch for Large Data NLP
PDF
Sec15 dynamic programming
PDF
関数型プログラミング入門 with OCaml
PDF
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
PPTX
Introduction to Functional Programming
PDF
Log解析の超入門
PDF
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
PDF
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
PPTX
純粋関数型アルゴリズム入門
ODP
Collective_Intelligence_chap2
PDF
データベース設計徹底指南
PDF
Sakashita
PDF
More modern gpu
DeltaCubeにおけるユニークユーザー集計高速化(実践編)
Jubatusのリアルタイム分散レコメンデーション@TokyoNLP#9
データ解析技術入門(R編)
Rブートキャンプ
El text.tokuron a(2019).yamamoto190627
第9回 配信講義 計算科学技術特論A(2021)
乱択データ構造の最新事情 -MinHash と HyperLogLog の最近の進歩-
Approximate Scalable Bounded Space Sketch for Large Data NLP
Sec15 dynamic programming
関数型プログラミング入門 with OCaml
CMSI計算科学技術特論B(12) 大規模量子化学計算(1)
Introduction to Functional Programming
Log解析の超入門
Jubatusのリアルタイム分散レコメンデーション@TokyoWebmining#17
「現実世界に活かす数学」 (麻布高等学校、教養総合、数学講義 5 回目)
純粋関数型アルゴリズム入門
Collective_Intelligence_chap2
データベース設計徹底指南
Sakashita
More modern gpu
Ad

More from BrainPad Inc. (20)

PDF
Oss LT会_20210203
PDF
Business utilization of real estate image classification system using deep le...
PDF
ブレインパッドにおける機械学習プロジェクトの進め方
PDF
機械学習システムのアーキテクチャアラカルト
PDF
機械学習システム開発案件の事例紹介
PDF
れこめん道~とあるエンジニアの苦闘の日々
PDF
DMPの分析機能を実現する技術
PDF
機械学習システムを受託開発 する時に気をつけておきたい事
PDF
システム開発素人が深層学習を用いた画像認識で麻雀点数計算するLINEbotを作ったハナシ
PDF
Python研修の作り方 - teaching-is_learning-
PDF
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
PDF
2018.08.21-機械学習工学研究会 現場を交えた勉強会発表資料
PDF
GKEとgRPCで実装する多言語対応・スケーラブルな内部API
PDF
実証実験報告セミナー資料 20180328(抜粋版)
PPTX
エンジニア勉強会資料_⑥エンジニアが主導する組織マネジメントや開発体制の継続的改善
PDF
エンジニア勉強会資料_⑤広告プロダクトとプラットフォームの開発
PDF
エンジニア勉強会資料_④Rtoaster×Myndエンジンによる興味キーワード分析機能開発事例
PDF
エンジニア勉強会資料_③Rtoasterの11年
PDF
エンジニア勉強会資料_②エンジニア・デザイナ・プロダクトオーナーが推薦するプロトタイプドリブン開発
PDF
エンジニア勉強会資料_①ブレインパッドの中で僕たちは何を開発しているのか?
Oss LT会_20210203
Business utilization of real estate image classification system using deep le...
ブレインパッドにおける機械学習プロジェクトの進め方
機械学習システムのアーキテクチャアラカルト
機械学習システム開発案件の事例紹介
れこめん道~とあるエンジニアの苦闘の日々
DMPの分析機能を実現する技術
機械学習システムを受託開発 する時に気をつけておきたい事
システム開発素人が深層学習を用いた画像認識で麻雀点数計算するLINEbotを作ったハナシ
Python研修の作り方 - teaching-is_learning-
2018 builderscon airflowを用いて、 複雑大規模なジョブフロー管理 に立ち向かう
2018.08.21-機械学習工学研究会 現場を交えた勉強会発表資料
GKEとgRPCで実装する多言語対応・スケーラブルな内部API
実証実験報告セミナー資料 20180328(抜粋版)
エンジニア勉強会資料_⑥エンジニアが主導する組織マネジメントや開発体制の継続的改善
エンジニア勉強会資料_⑤広告プロダクトとプラットフォームの開発
エンジニア勉強会資料_④Rtoaster×Myndエンジンによる興味キーワード分析機能開発事例
エンジニア勉強会資料_③Rtoasterの11年
エンジニア勉強会資料_②エンジニア・デザイナ・プロダクトオーナーが推薦するプロトタイプドリブン開発
エンジニア勉強会資料_①ブレインパッドの中で僕たちは何を開発しているのか?

Recently uploaded (9)

PDF
Qlik TECH TALK セミナー:What's New In Qlik ~ 2025年7月リリース最新機能のご紹介
PDF
液体クラトム抽出物供給側分析:世界の生産能力・販売量・平均価格動向(2025-2031)
PDF
【QYResearch】人形ロボット産業の市場構造と今後の発展方向に関する分析レポート
PDF
世界半導体用酸化ハフニウム市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
PDF
グローバルロープウェイ用スチールワイヤーロープ市場2025:主要企業のシェア、売上動向、競争戦略
PDF
XCMSを用いた質量分析データ処理_BioCAsia2021_yamamoto.pdf
PDF
限外ろ過膜調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
PDF
商用ウェブカメラ市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
PDF
口腔内スキャナー市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
Qlik TECH TALK セミナー:What's New In Qlik ~ 2025年7月リリース最新機能のご紹介
液体クラトム抽出物供給側分析:世界の生産能力・販売量・平均価格動向(2025-2031)
【QYResearch】人形ロボット産業の市場構造と今後の発展方向に関する分析レポート
世界半導体用酸化ハフニウム市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
グローバルロープウェイ用スチールワイヤーロープ市場2025:主要企業のシェア、売上動向、競争戦略
XCMSを用いた質量分析データ処理_BioCAsia2021_yamamoto.pdf
限外ろ過膜調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
商用ウェブカメラ市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
口腔内スキャナー市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測

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

  • 1. Copyright © BrainPad Inc. All Rights Reserved. DeltaCubeにおけるユニークユーザー集計高速化 (理論編) 2016年6月10日
  • 2. Copyright © BrainPad Inc. All Rights Reserved. 1. DeltaCubeとは 2
  • 3. Copyright © BrainPad Inc. All Rights Reserved. 3  DMPのセグメント作成に特化したデータマネジメントツール  プライベートDMP 「Rtoaster」とシームレスに連携可能  Rtoasterの様々なデータを組み合わせて新たなセグメントを高速に作成することが可能  作成したセグメントのユーザー数をスピーディーに確認可能 DeltaCube(デルタキューブ)とは プライベートDMP 外部DSP外部DSPCRMデータ サイト デジタル広告 メールアプリ 新規セグメントデータ 行動データ、 セグメントデータ等 DeltaCube で作成したセグメントに 最適なアクションを実施! 外部DSP外部DSPパブリックDMP Yahoo! DMP 等 会員属性等 直感的にセグメントを作成!
  • 4. Copyright © BrainPad Inc. All Rights Reserved.  セグメント作成機能 – DMPに蓄積されたデータ(行動データ、CRMデータ、外部データ、 セグメントデータ等)を元に、ユーザー数を確認しながら直感的な 操作でセグメントを作成することが可能 – 作成したセグメント同士を掛け合わせ可能  クラスタリング機能 – これまでの弊社データ分析の知見を活かし、DMPに蓄積されたデータ を用いた自動クラスタリング機能 – 類似ユーザー同士を自動分類してセグメントを作成 – 自動作成された各セグメントの特徴(どのようなユーザーが含まれる か)を推定して表示 – サイト全体のユーザー像を把握可能 4 DeltaCubeの主な機能 今回はこちらのユーザー数を確認 する機能の高速化についてのお話
  • 5. Copyright © BrainPad Inc. All Rights Reserved.  DeltaCubeは、蓄積されたデータ(Webサイトのトラッキングログ等) を元に、ユーザーのセグメントを作成するツール – 様々な条件設定が可能 • 集計期間、閲覧URL、デバイスなど  結果を確認しながら、ストレスなくセグメントを作成するには、設定し た条件に一致するユニークユーザーの数を高速に確認したい – しかし、集計対象のデータは膨大で厳密に集計していては遅い • Webサイトの全てのユーザーのサイト内での全ての行動ログなど • 1日で数百~数百万ユーザーの全てのログが出てくる • これをDeltaCubeでは最大180日間までの期間で集計可能 – 1人単位まで厳密に出す必要はなく、ボリューム感がわかれば良い • 推定値で良い 5 ユニークユーザー数確認機能
  • 6. Copyright © BrainPad Inc. All Rights Reserved.  DeltaCubeではPrestoという分散処理ミドルウェアを集計に利用 – Prestoを用いて厳密に集計を行っている – これを概算値でよいので高速化したい 6 ユニークユーザー数確認機能の高速化 この数値を 高速に求め たい! DeltaCubeセグメント作成時の例
  • 7. Copyright © BrainPad Inc. All Rights Reserved. 2. Prestoとは 7
  • 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. 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. Copyright © BrainPad Inc. All Rights Reserved. 3. approx_distinctとは 10
  • 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. 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. Copyright © BrainPad Inc. All Rights Reserved. 4. HyperLogLogとは 13
  • 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. 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. Copyright © BrainPad Inc. All Rights Reserved.  下記元論文のFig. 2参照 – http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf HyperLogLogの一般的なアルゴリズム(1) 16
  • 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. 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. Copyright © BrainPad Inc. All Rights Reserved.  元論文のFig. 3参照 – http://algo.inria.fr/flajolet/Publications/FlFuGaMe07.pdf  cardinalityが 𝟎. . 𝟏𝟎 𝟗 の範囲の場合の実用的なアルゴリズムと パラメータ(𝒎)が載っている  一般的アルゴリズム(前述)との相違点を次スライド以降に記載 19 HyperLogLogの実用的なアルゴリズム(1)
  • 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. 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. 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. Copyright © BrainPad Inc. All Rights Reserved. 5. HyperLogLogのPrestoにおける実装 23
  • 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. 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. Copyright © BrainPad Inc. All Rights Reserved. 8. 参考文献 26
  • 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. 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