Count-Min スケッチ
概要
Count-Min スケッチ (count-min sketch) [1] は大規模データセットにおいて頻度や重み付け合計を効率的に推定するための確率的データ構造である。膨大な数の要素を複数のハッシュ関数を用いて異なるカウンターにマッピングし、その最小値を参照することで頻度を推定する。この手法は結果として得られる合計頻度に誤差を含むが、要素ごとにカウンターを設けるよりはるかにメモリ使用量が少なく、挿入やクエリーも高速である。データストリーム分析、ネットワークトラフィックのモニタリング、検索クエリーの頻度分析などに広く利用されている。
Table of Contents
アルゴリズム
要素
Count-Min スケッチはデータストリームから得られた要素
ハッシュの衝突による加算の重複を考慮すると、
なお、Count-Min スケッチでは
設定
Count-Min スケッチのカウンターは
例として Fig 1 のような
更新
データストリームから要素と量のペア
Fig 2 の例では Count-Min スケッチを
照会
更新された Count-Min スケッチからある要素
Fig 3 の例では一連の更新の後に
誤差パラメータ
2 つの誤差パラメータのうち
ある時点
式 (
誤差パラメータ
レンジクエリー
Count-Min スケッチでレンジクエリー (range query; 範囲クエリー) を実装する場合、前述のような点クエリーを繰り返して実装することも可能だが 2 つの問題がある。一つ目は誤差が累積すること。過大評価された誤差は範囲
二進レンジ (dyadic range; 二進区間) とはパラメータ
二進レンジを使用してレンジクエリーに近似的に応答するために、
Fig 4 の例は最大
二進レンジ Count-Min スケッチ構造の更新とクエリーは、時間計算量
適用例
ハッシュテーブルのような決定論的な構造と比べて Count-Min スケッチが有利な点は (1) 要素
思いつく範囲で (1) の対象は、検索キーワードなどユーザが自由に入力できる値、IP アドレス、URL、地理データの位置情報メッシュ、スマフォなどの小型デバイスの識別子や電話番号、ゲームや映像での敵キャラや弾などのオブジェクト、ページングなどのデータの領域、など。また (2) の対象は、グラフやヒートマップのように全体的な印象として人間が認知する出力、効率化のための自動のシステム最適化、動画の再生回数や投稿のインプレッション数、など。これらの組み合わせで実用的な例があれば Count-Min スケッチの適用を検討する価値があるだろう。
自然言語処理: 自然言語処理では文書に含まれる単語の出現頻度が頻繁に使われている。[2] では単語の分布的類似性を見つけるための点相互情報 (PMI; point-wise mutual information) を得るために Count-Min スケッチを応用している。
分位数: レンジクエリーにより中央値やパーセンタイルのような分位数 (quantile) の近似値を探索する。
Heavy Hitting の抽出
ジップの法則 (Zipf's law) とは、一部の要素が全体の頻度をほとんどの頻度を締め、それ以外の大多数が極めて小さい頻度となるような、現実世界で頻繁に見られるモデルである。例えば EC サイトでは、少数の売れ筋商品が全体の販売数の大多数を占め、それ以降は販売数の少ない多数のロングテール商品が占める形となる。Count-Min スケッチは前述のように推定合計頻度が大きい方が相対誤差が少ないことから、このようなモデルで頻度の大きい上位の要素を抽出するようなタスクで有効である。
Count-Min スケッチは更新と同時に新しいカウンター値を取得してその時点の推定合計頻度を得ることができる。これにヒープ (heap) のようなデータ構造を組み合わせると、頻度の上位を占める Heavy Hitting (大ヒット) 要素を少ない計算量で更新し続けることができる。
キャッシュ戦略の最適化: Web 検索やデータベースでは高頻度にアクセスされるクエリーの検索結果をキャッシュして次回以降の応答を高速する手法が一般的に行われている。ただし検索キーワードや SQL は膨大なパターンとなることから、すべてのクエリーの頻度を保存して計測する方法は現実的ではない。Count-Min スケッチで Heavy Hitting を保持することで、どのクエリーの頻度が高くキャッシュすべきかを少ないメモリ空間と計算量で決定することができる。
また、データベースのバッファプールのようにページ単位で読み書きが行われる設計では、頻繁にアクセスされるページを優先的にメモリに保持しておくことでデータのアクセス速度を改善することができる。
参考文献
- Cormode, G., Muthukrishnan, S. (2004). An Improved Data Stream Summary: The Count-Min Sketch and Its Applications. In: Farach-Colton, M. (eds) LATIN 2004 : Theoretical Informatics. LATIN 2004. Lecture Notes in Computer Science, vol 2976. Springer, Berlin, Heidelberg.
- Dzejla Medjedovic, Emin Tahirovic, Ines Dedovic. 大規模データセットのためのアルゴリズムとデータ構造. マイナビ出版 (2024)


