Search Consoleでデータをフィルタすると元データよりも多くなるのはブルームフィルタが原因

[レベル: 上級]

Search Console のデータにフィルタをかけると、元の全体のデータよりも数値が多くなる場合があります。
大きな理由は「ブルームフィルタ」を Google が利用しているためです。

フィルタリングデータが全体のデータよりも高いのはどうして?

2023 年 9 月の英語版 SEO オフィスアワーで次の質問が取り上げられました。

Search Consoleで、フィルタリングされたデータが全体のデータよりも高い理由がわかりません。理解できません。

Gary Illyes(ゲイリー・イリース)氏は次のように説明します。

まず、この質問が僕は大好きだが、おそらく間違った理由からだ。

短い答えは、大量のデータを処理する必要があるため、ブルームフィルタを多用していることだ。ブルームフィルタは、時間とストレージを大幅に節約できる。

長い答えも、大量のデータを処理する必要があるため、ブルームフィルタを多用していることだ。でも、ブルームフィルタについてさらに詳しく説明したいと思う。

膨大な数のアイテム(数十億、数兆)を含むセットを処理する場合、高速に検索するのは非常に困難だ。これが、ブルームフィルタが役立つ場所だ。ブルームフィルタを使用すると、メインセットの可能性のあるアイテムのハッシュを含む別のセットを参照して、そこでデータを検索できる。ハッシュを最初に検索するため、比較的高速だ。ただし、ハッシュは、意図的かどうかにかかわらず、データ損失を伴う場合がある。この欠落しているデータが、あなたが実際に経験しているものだ。データが少なければ少ないほど、メインセットに何かが存在するかどうかについての予測は正確になる。

つまり、ブルームフィルタは、データセットに存在するかどうかを予測することで検索を高速化するが、精度が低下する。データセットが小さいほど、予測は正確になる。

ブルームフィルタの特性が理由

ブルームフィルタ (Bloom filters) とは、SGE によれば次のような技術です。

ブルームフィルタは、1970年にBurton H. Bloomによって考案された確率的データ構造です。ブルームフィルタは、データが集合に含まれているかどうかを判定するために使用されます。ブルームフィルタは、メモリ空間をあまり消費せず、データの存在を非常に効率的に判定することができます。ブルームフィルタは、データベース以外にも、仮想通貨、IPフィルタリング、辞書、ルーター、Chromeブラウザなどで使用されています。ブルームフィルタの判定は正確ではなく、偽陽性(false positive)の可能性があります。つまり、含まれていないのに含まれていると誤って判定される可能性があります。

簡潔に言えば、ブルームフィルタを使うと大量のデータを高速に処理できます。
しかし、(データをハッシュかする過程で)データの損失が発生する場合があります。
データサイズが大きくなればなるほど、損失が増える傾向にあります。

Search Console でもブルームフィルタを使用しているため、特にデータが多いサイトでは、フィルタ後の数値が元の数値よりも多くなるケースが顕著になるのでしょう。

データの不一致を発生させるに理由には、匿名化されたクエリもありました。
これとは別に、ブルームフィルタなるものの利用も理由でした。

100%完全なデータではないということを認識して割り切っておくと、Search Console の分析で頭を抱えずに済みそうです。