背景
クッキーが全て取得できない場合でも UU 数を知りたい。
iPhone などのiOSのブラウザでは第三者クッキー(別ドメインのクッキー)が焼けないようになっている。 これは、広告を運用する上では非常に大きな問題である。 なぜなら広告のドメインは広告が表示されるページのドメインではないから、第三者クッキーとなるからである。
今ある手がかりを元になんとか統計を使ってUU数を調べる方法はないのだろうか。
方法
早速始めよう。
用意するデータ
同じ UU がアクセスした頻度を imps とそのUU数を表したデータを準備する。 例えば、一回しかアクセスしていない UU は imps = 1 の UU数に、 2回アクセスした場合には imps = 2 の UU 数にカウントする。
例えば次のようになる。
imps | uu |
---|---|
1 | 141497411 |
2 | 1952850 |
3 | 929600 |
4 | 677190 |
5 | 479118 |
6 | 377811 |
7 | 301407 |
8 | 252147 |
9 | 212153 |
10 | 184203 |
11 | 159196 |
12 | 141028 |
13 | 123652 |
14 | 111885 |
15 | 101167 |
16 | 91964 |
17 | 84616 |
18 | 78076 |
19 | 71527 |
20 | 66685 |
... | ... |
上記のデータは、ログから次のSQLで取得するイメージである。
select imps, count(1) uu from ( select uuid, count(1) imps FROM log_data group by uuid) group by imps
面倒なことに、クッキーが焼けていない UU は全て imps = 1 に混じってカウントされいる。これはクッキーの仕様上仕方ないこと。 (クッキーが焼けた場合のみカウントしようとすると、2回目以降でしか確認できないため、imps = 1 は原理上カウントできないことになってしまうため)
この imps = 1 の中に焼けていないクッキーも含まれていて、この焼けていないクッキーのUU数と焼けているがimps = 1 のUU数を推定するのが、今回の課題となる。
べき乗則を利用する
であるが、今回のクッキーの話に適用する。
先の頻度 imps ごとの UU 数を、imps をで、そのUU数を で表すとする。すると、
の式がべき乗則に従った分布の場合成り立つと考えられる。( はなんからの値)
数式だけでは分かりにくいと思うので、先のデータの impsとUU数の関係を二次元のグラフで見てみよう。
縦軸と横軸は対数にしてあるが、頻度の対数とUU数の対数のプロットが直線上に並んでいる。この様にプロットが直線上に並ぶときべき乗則に従った分布であると考えられる。
この直線を imps = 1 まで伸ばしていけば、頻度 imps = 1 の UU 数が推定できる。それには、この直線(線形関数)を決めているパラメータ を求める必要がある。
この を求める方法は色々あるが、今回は最小二乗法で求めることにしたい。
線形関数の最小二乗法は解析的に求めることができるので特別な分析ソフトウエアなどは必要としない。 ExcelやSQL上で容易に計算することができる。
例えば、SQLで求めるなら次のような感じである。
SELECT (n*d-c*e)/(n*b-e*e) AS a, (b*c-d*e)/(n*b-e*e) AS b, sum_uu FROM (SELECT sum(ln(imps)*ln(imps)) AS b, sum(ln(uu)) AS c, sum(ln(imps)*ln(uu)) AS d, sum(ln(imps)) AS e, count(1) AS n, sum(uu) AS sum_uu FROM imps_uu)
この例の場合、
が得られる。
これを使うと
だから、
と、クッキーが焼けて頻度が imps = 1 のUU数は、4927084 UUと推定できる。
クッキーが焼けていない UU 数
残るはクッキーが焼けていない UU 数の推定である。クッキーが焼けていないデータは、元のデータの imps =1 のUU数から、先の推定で分かった UU を引いたものである。 この例では、
が、そのインプレッションとなる。これはUU数ではないことに注意する。
さて、このインプレッションがどのようなUU数になるかは、クッキーが焼けている既知の頻度とUU数の分布に従うとしよう。 全インプレッション数がすでに求まっているのであれば、クッキーが焼けている既知のインプレッション数は、全インプレッション数からクッキーが焼けていないインプレッション数を引けば良い。 この例だと、全インプレッション数は、361042790 であるので、
である。これを使って残りのインプレッションがどこに分布するか計算できる。 その分布にしたがった残りのインプレッションの各頻度のインプ数からその頻度で割ることでUU数が求まる。 それらの合計のUU数がクッキーが焼けていないUU数である。すなわち、次の式で表せる。
ここで、 は、それぞれ、 残りのインプレッション数、クッキーが焼けているUUのインプレッション数である。 この例だと、 である。 最終的に、クッキーが焼けていない UU 数は、8199399 となった(少数切り捨て)。
全UU数
クッキーが焼けているUU数+クッキーが焼けていない UU 数となる。
クッキーが焼けているUU数は、imps = 2 以上の UU数と、べき乗則によって推定した imps = 1 のUU数である。 この例の場合、
である。また、クッキーが焼けていない UU 数は8199399 だった。
よって、求める全UU数は、
である。
まとめ
クッキーが取得できない場合に、既に取得できているクッキーの頻度データにもとづき、UU数を推定する手法について述べた。特殊な計算は必要なくSQLやExcelだけで計算できることを示した。
この記事は、VOYAGE GROUP Advent Calendar 2017 - Qiita に参加しています。