RaNxxx’s blog

データまわりの知識やノウハウを紹介するブログです

Adobe Analytics|個別概算カウント(APPROXIMATE COUNT DISTINCT)で数が合わない理由

今日は同僚に、Adobe上で、Store IDをカウントして出したいけど、

  1. Store IDをディメンションに適用して表示された行数
  2. 個別概算カウント機能でMetricsに適用して表示された値

が微妙に合わないのはなぜと聞かれました。

 

まず、結論からいうと、合わないのは当たり前です。
なぜなら、個別概算カウント機能は、count distinctとして表示されていますが、実質計算方法は全く別で、HyperLogLog(HLL)手法を用いて、選択したディメンションの個別カウントの概算値です。

 

※概算値の誤差 <= 5%
※参考:Adobe Analyticsのドキュメント:個別概算カウント(ディメンション)

 

 

似たようなAdobe関数だと、Count() 関数および RowCount() 関数があります。
この3つの関数の違いは主に以下です:

 

Count() 関数 & RowCount() 関数

RowCount()関数は、単に行数を数えた関数です。
SQLだと、count(1)みたいなものです。

その一方、Count()関数は、括弧に入っている1の代わりに、segmentを切ったりすることができます。
例えば、SQLのcount(distinct case when storeid is not null then 1 else 0 end)みたいなことができます。

 

Store IDをカウントする時に、null値に配慮できるのは、Count()関数です。

 

個別概算カウント & Count()やRowCount()

なぜCount()やRowCount()があるのに、わざわざ個別概算カウント関数を新しく作るかというと、
カウントしたいディメンションが、表のディメンションに入ってなくても使えるというメリットがあるからです。

 

Adobeのドキュメントでは、以下のようにメリット&デメリットについて説明をしています:

 この関数は HLL 手法を使用しているので、Count() や RowCount() よりもわずかに精度が低くなります。一方、Count() と RowCount() の数は正確です。

 

 つまり、正確な値というより、個別概算カウントは概算値として、
AdobeのWorkSpaceで、集計したいディメンションを入れずに、単独なMetricsとして集計することができます。