1. エンジニアがもがくラジオ
  2. SNS炎上の構造とHyperLogLogで..
2025-08-12 33:27

SNS炎上の構造とHyperLogLogで学ぶデータの数え方

  • 最近のエンジニア界隈の動向と雰囲気

  • 日本人がSNSで炎上しやすい背景と文化的要因

  • ポジティブな反応や雰囲気を広げるための考え方

  • アルゴリズムで優遇されやすいユーザー行動とは?

  • 分析ツールでユニークユーザー数を数える方法

    • HyperLogLogの仕組みと特徴(少ないメモリで大量データを推定)
    • HyperLogLogという名前の由来

  • ----少し出遅れてエンジニアとしてのキャリアをスタートさせた、わたくし「とっく」が技術に必死にしがみついたり、キャリアについて迷ったり、色々と試行錯誤して成長しようともがく様子をお届けする番組です。ご意見・ご感想は、Twitterのハッシュタグ #エンジニアがもがくラジオ にお寄せください。【とっく】𝕏: https://x.com/tokkuu・Profile: https://www.tokku-tech.dev/【イルカ】Twitch: https://www.twitch.tv/irukamindYouTube: https://www.youtube.com/@irukamindTikTok: https://www.tiktok.com/@irukamind88𝕏: https://x.com/irukamindInstagram: https://www.instagram.com/irukamind88


  • サマリー

    このエピソードでは、SNSの炎上の構造やその影響、ハイパーログログというアルゴリズムについて議論されています。特に、SNSがどのように情報の民主化を促進し、社会的な反応を引き起こすかが考察されています。SNSでの炎上や騒動の原因を探求しながら、HyperLogLogを通じてデータのカーディナリティを推定する手法などを学びます。また、ユーザーデータのユニークな識別や、それに関連する確率的なアプローチについての理解が深まります。SNS炎上のメカニズムを理解することが重要であり、このエピソードではHyperLogLogを用いたデータの数え方に焦点を当て、その算出方法について詳しく解説されています。

    エンジニア界隈の現状
    みなさんこんにちは、エンジニアがもがくラジオです。
    とっくです。
    ひるかです。
    お願いします。
    お願いします。
    とっくさん、
    エンジニア界隈について最近思うこととかあります?
    エンジニア界隈?
    うん。
    切り口がちょっとでかいですね。
    でかいけど、一旦何も聞かずに、
    答えると、
    エンジニア界隈か。
    何も聞かずに答えると、
    なんかその、
    AIが、
    割とエンジニアリングが得意というかコード開発が得意だから、
    そのあたりの話題がホットで、
    それに比例して、付随して、
    仕事奪われるんじゃないかとか、キャリアの方向性どうなるんだとか、
    レイオフされるのかどうなのか、みたいな雰囲気を感じます。
    確かに雰囲気感じますよね。
    そんな話でした?
    そうそうそう。
    ダイナーやったっけ?
    レイオフのCEOが書いたノートが結構話題になってますよね。
    ありましたね。
    結構批判的なポストをよく見かけるなというか、
    僕は内容を全部ちゃんと読んでるわけじゃないんで、
    批判も肯定もないんですけど、
    エンジニア界隈に限ってのことじゃないかもしれないですけど、
    別にX全般そうなのかもしれないですけど、
    何かに対してみんなで寄ってたかって批判してるみたいな、
    そういうノリをよく目にするような気がしていて。
    SNSってそういうもんなんかな。
    そうですね。SNSが助長させてる側面はあると思うし、
    でも日本がそもそも村社会なんじゃないですかね。
    それがSNSっていう覚醒器でみんなが見えるようになっちゃったっていう。
    そういうことなのかなと捉えてますけどね。
    確かになー。
    3人とか4人ぐらいで愚痴ってる分には別に、
    お好きにどうぞって感じだったのが、
    情報がこう民主化されて、
    みんなの目に止まるようになったから、
    広がりやすくなりましたっていう。
    SNSの炎上構造
    確かに。
    もっと肯定的なね、
    ええやん、ええやん、めっちゃええやんみたいなノリの、
    そういうバイオブスがよく目につけばいいのになって思っていて。
    でもそういうノリもたくさんありますけどね、SNSの中では。
    そうですね。それで言うとXのアルゴリズムっていうか、
    Xで伸びやすいポストっていうのは、
    そういう炎上する級のポストなんじゃないですか。
    それはアルゴリズムの問題な気がするし、
    イーロンはそっちのほうがいいと思ってやってる気がする。
    喧嘩させたほうが伸びるだろうってことな気はしてますけどね。
    あんまり私は間に受けないというか、
    基本無視してますけど。
    最近のSNS全般ってポストに対するコメントみたいな、
    単純ないいねとかリポスト的なやつ以上に、
    コメント数、YouTubeでもコメントだったりとか、
    Xでもリプライの数だったりとか、
    アルゴリズム上大事なパラメーターとして扱われてるような気がするんですよね。
    レコメンドアルゴリズムの中で。
    なんでなんですかね。
    それはそうなんですかね。
    コンテンツの何を重きに置くかはありますけど。
    そのコンテンツがたくさんのユーザーに受ける一個の指標として扱うのはいいんです。
    全然意味わかるんですけど。
    いいねとかリポスト以上に大事にされてるような感じがする。
    実際知らないですけど。
    それはユーザーにとってのハードルが高いじゃないですか。
    いいねとリポストよりも引用リツイートとか返信するほうが、
    ユーザーはわざわざと捉えられるから、
    それを重要視するっていうのは当然な気がしますよね。
    ほんまですね。
    その視聴、たぶんいろんな指標を取れると思うんですけど、
    クリックして開いたとか、何秒以上見たとか、
    いいねした、いいね消した、
    リポストした、してない、
    引用リツイートしたみたいな。
    ユーザーの行動のハードルが高い順にランク付けするなら、
    スコアとしては高くなりそうですよね。
    ほんまやな、確かに。
    いっちゃん最強のユーザーのアクションって、
    シェアですよ。
    外部、外のプラットフォームとか外のサービスに向けたシェアが、
    たぶんいっちゃん強いですよね。
    と思ってて。
    それもあるかもしれない。
    わざわざ例えばLINEとかで共有とか、
    インスタグラムのポストをXで共有とか、
    YouTubeをLINEで共有とか、Xで共有とか、
    誰かに共有してまで見せたいもの、
    コンテンツってアクションのハードルも高いし、
    コンテンツの内容も結構よくないとされへんやろし、
    しかもなおかつ他のプラットフォームからの流入口同棲になる。
    って考えたら、やっぱり共有がいっちゃんアルゴリズム上大事なやつなんかなー、
    とか先ほども思うんですけど。
    確かに。
    難しい。
    検索っていうか、
    投稿したコンテンツ自体のランク付けみたいなのもあると、
    まずしないといけないじゃないですか。
    それはいいねの数とかでできそうな気がしますけど、
    一方で個人個人の見てる側のおすすめとかに何を表示するかっていうのは、
    その人が何に興味を持ってるかみたいなことじゃないですか。
    そっち側は何を重要視してんのかっていうのは、
    あんまいまいちわかってないですよね。
    例えば、それこそシェアするのが一番いいよね、みたいな。
    確かにそうな気がするんですけど、
    それをその人のタイムラインに反映するのすごく重くないかと思っちゃうんですけど、
    そんなことやってんのかな。
    ハイパーログログの紹介
    そのコンテンツ自体の単体のパワーみたいなのと、
    ユーザーの好みにどんだけマッチするものなのかみたいなのと、
    なんか両軸でありそうですよね。
    そうそうそうそう。そうだと思いますね。
    そやねー、そやねーつって。
    最近、ちょっと前ぐらいからXってめっちゃ気軽にいいねできるようになったじゃないですか。
    気軽にいいねできるようになったっていうのは、
    そのポストに誰がいいねしてるかとかじゃなくて、
    ユーザーのプロフィールページでいいねしてるポスト一覧みたいなのがわかんなくなりましたよね。
    最初はわかんなかったけど、わかるようになったりしてなくなったりしたんでしたっけ。
    なんか行ったり来たりしてるイメージありますけど。
    だからなんか、自分のお気に入りタイムラインみたいなのを、
    自分にマッチするコンテンツが出てきやすくするために、
    自分の興味あるものにいいねしたりとか、
    興味あるものには高評価、興味ないやつには低評価みたいな、
    そういう自分のお気に入りタイムラインをいい感じにするっていう気持ちで
    そういうことをやってる人って結構最近多いんだよね、たぶん。
    なるほど。
    ていうか、それでいうと、応募とはどう使ってほしいんでしょうね、あの機能。
    今イルカさんが言ったような、自分のタイムラインを最適化するために使ってほしいのかな。
    まあ確かに。そうなんじゃないですか、たぶん。
    そうなんすかね。
    なんかブックマークとかもあるじゃないですか。
    うんうん。
    あれはあんまりよくわかってないけど。
    そう、だからなんか、いいねはめっちゃ気軽な気持ちでいいねするみたいな。
    知り合いがいいねって感じのことしてたらとりあえずいいねするみたいな。
    猫がかわいかったりとかしたらとりあえずいいねしとくみたいな感じで。
    なんかブックマークのやつはほんまに後でちゃんと見たいなとか、
    これね、後でまた見返したいなみたいなやつをブックマークするみたいなノリで使ってますけどね、僕は。
    まあまあまあそんな感じなのか、そんな感じなんでしょうね、きっとね。
    でもこの感じのSNSいつまで続くんやろうな、ほんま。
    もう正直結構飽きてますけどね、私は。
    なんかトックさんと僕でBDRとか始めてみます?2人で。
    2人で?誰が見んねんって感じだけど。
    やっぱ僕とトックさんもっと仲良くなったほうがいいし、お互いのこと知るべきやと思うんですよね。
    BDRってそういう目的なのか?別にここで僕らが使えますよって言っても、他の人が別に見れるわけじゃないの?
    たぶんそうですよね、たぶん。
    なんか結構プライベートな感じですよね、たぶん。
    うん、たぶん。
    いいかもしんないな、それでも。
    そうなんですよね。
    確かに。また始めたら報告しましょうか、もし始めたら。
    そうですね。
    じゃあそろそろトックさんの技術系の話でも聞かせてもらっていいですか?
    そうですね。どうしようかな。
    最近知った、最近でもないんですけど、面白いなと思うアルゴリズムがあって、
    ハイパーログログっていうのがあるんですけど。
    もう名前の響きだけでいい感じですね、ハイパーログログって。
    なんかかわいいですよね。
    かわいい、そう。
    ハイパーログログ。
    ハイパーログログみたいなちっこいキャラクターが。
    SNS炎上の構造とデータ処理
    ガンダムとかに出てきそう。
    そうっていうのがあって、
    これが結構アルゴリズムで頭いい人が頭いい方法で何か処理するみたいな。
    結構見てみると面白いなと思って、紹介したいなと思ったんですけど。
    例えば、あれバックエンドの実装もするんでしたっけ?
    します。
    自分にデータベースのカーディナリティ、要はユニークな値がどれくらいあるか。
    データベース上に?
    データベース上に。
    例えばユーザーテーブルっていうのがあったときに、
    名前とか青年ガッピーとかいろいろあったとして、
    例えば性別っていう項目があったら、
    例えば男性、女性、未回答とか不明とかの3通りみたいな感じだとするじゃないですか。
    そしたら1万ユーザーいようが1億ユーザーいようが、
    性別っていうのは3種類しかないですよね。
    そういうときにカーディナリティが低い。
    低いっていうか、3っていうのかな。
    低いですよね。
    一方で例えばユーザーとかだと1位に識別できないといけないから、
    ユニークなIDを振ったりすると思うんですけど、
    それはカーディナリティが高い。
    バラエティがいっぱいあるみたいな愛ですね。
    そうなったときに、今の性別ぐらいだったら、
    性別って何種類あるかなってスケールで調べようと思ったら、
    ディスティンクトみたいなのを使って調べると思うんですけど、
    それを超高効率になんとなくの推定値を出すっていうアルゴリズムです。
    めちゃめちゃ効率よくディスティンクトするアルゴリズム?
    そう。
    今の性別の問題だとあんまりありがたみがないし、
    そこは3なのか4なのかはっきり出してほしい気がするんですけど、
    例えば他で言うと、Google Analyticsとか使ったときに、
    ウェブ、デイリーユニークユーザー数ってパッて出ると思うんですけど、
    あれって例えばページビューが1億とかだったときに、
    ユニークユーザー数が何人ですかって、
    簡単に言うとディスティンクトしないとわかんないですよね。
    ユーザーのIPアドレスなのか、なんか識別番号的なやつでログを取っておいて、
    それでディスティンクトすると、
    1ユーザーが3アクセスしたらそれは1とカウントしないといけないので、
    出せるんですけど、でも1億とか、1億レコードとかあると結構重いわけですよ。
    重そう。
    そういうときに嬉しい。
    確かに1億レコードとかあんま操作してらんないですよね。
    真面目にディスティンクトしようとすると、
    1億レコードのユーザーIDならユーザーIDをもう1個メモリ上にポンと置いて、
    上から1個ずつ見て、置いた方のところに1個1個あるかないかみたいなのを見て、
    そうしなくてもなんだろう。わーって操作して、あるかないかを見て、
    初めて出てきたIDだったら置いておく。
    次って逐次処理すればできると思うんですけど、
    数が多ければ多いほど大変な処理になるわけです。
    HyperLogLogアルゴリズムの理解
    これを確率的にすごく法律的にやるっていうやつで、
    どうやるかっていうと、
    すごく簡単に説明すると、
    例えばコインを投げて表が出る確率って2分の1じゃないですか。
    2回連続で投げたら、2回投げて連続で表になる確率って4分の1ですよね。
    でもこれ100回にしようが1万回にしようが一緒なんですけど、
    2のN乗分の1。2分の1のN乗になるはずなんですけど、
    それって例えば確率通りに行われるんだとしたら、
    4回やれば1人は連続で表が出ているってことになりますよね。
    確率通りに従うなら。
    なんでそれをやるっていうか、
    もうちょっと言うと、各部屋に人を入れて、
    コインを2回振ってもらいますと。
    そのときに連続で表が出た数を数えるんですよ、最大値を。
    例えばそれが2個あったら、連続で2個続けて表が出る確率って4分の1なので、
    それが最大2個なんだったら、
    じゃあ4人がコインを投げたんだなって推定できるわけですよ。
    逆に言うと4回の試行があったんだな。
    あー、だから4人部屋に入れます。
    じゃあ何人かわかってないです。
    そうそう、最初何人かわかってなくて。
    何人かが別の部屋に入ってコインを投げてます。
    で、2回連続でコインの表が出た人は何人おったかってなった。
    2回連続で表が出ている数の最大値を見つけるんですね。
    例えば、何人入ってるか知らないけれども、連続で2回表が出た人が、
    例えば5人いましたみたいな。
    1人だけでした。
    1人だけだったんだったら、4部屋だったんじゃないのかみたいなことを。
    コインは別に2回じゃなくていいんですけど、何回か投げてもらって、同じ回数。
    で、連続で表が出た、0101みたいな数字を出してもらいます。
    表が1で裏が0みたいなね。
    で、頭から数えて1が何個連続しているかっていう、その連続している数の最大値を取る。
    例えばそれが2になった場合って、他の人は1か0なんですけど。
    そうすると2が最大値ってことは、2回連続で表が出る確率で4分の1なので、
    たぶん全体で見たときに4回しかこの施工をしてないんじゃないかって推測できるわけです。
    あーはいはいはいはい。
    だから4人です。っていうのが計算の出し方。
    なんとなくの雰囲気をつかめてきたかもしれない。
    もうちょっとちゃんと言うと、各データ、ユーザーIDって言うんですけど、
    をハッシュ関数でハッシュ化して、ビット列にします。
    だから0101がランダムに並びます。
    ユーザーIDなんで、同じユーザーIDだったら同じ並びになりますね。
    違うユーザーIDだったら違う並びになりますね。
    で、ハッシュ関数が十分。
    出来上がる値はランダムだと捉えていいと思うんですけど。
    そうすると、そのときそれをわーってユーザーID並んで、
    重複してるかもしれない、ユーザーID列に。
    全部ハッシュ関数かけてビット列に直したときに、
    0が最大何個並んでるか左から数えて、
    例えば4個ありましたみたいな感じだったら、
    4個0が並ぶ確率って、
    2分の1×2分の1×2分の1×2分の1だから16分の1。
    なので、16分の1の確率で起きることが、
    このグループに発生したと言えるので、
    なんとなく16回試行したかもしれない。
    16種類あるのかもしれないって推定できる。
    これ確率的なんで、わかんないです、本当にそうか。
    今みたいな16とかそういうレベルだとかなり正確じゃないんですけど、
    これが何万とか何百万何千万とかになると、
    結構正しい制度で出せる。ことらしい。
    確率的アプローチによるデータ推定
    なんでそれでなるの?
    山田太郎っていう文字列をハッシュ化して、
    ハッシュ関数でビット列にして、
    そのビット列が左から0が4回連続で連続してました。
    ほんならそのデータベース上に山田太郎さん大体……
    いや、違う違う。
    1人だけやっちゃって0でした、みたいな。
    そういうケースはあんまり考えても意味がなくて。
    具体的な何かをハッシュ化したときに0が何個並んでるかはわからない。
    それは確率ですって捉えるんですよ。
    だから山田太郎がもしかしたら100回並んでるかもしれないんですけど、
    ハッシュ化した結果。でもわかんないです、それは。
    で、いるかっていうのが1回しか並んでないかもしれないし、
    100回しか並んでないかもしれないんですね。
    それを100個とか200個とかだと全然確率的なんでブレちゃうんだけど、
    1億ぐらい持ってくると、ほぼそれって大体合うんですよ。
    その確率の試行回数が、
    その確率の逆数が大体の数になってるっていう。
    その確率の逆数が何の数?
    ユニークな人数。
    ユニークな人数。
    山田太郎側に2人いたら、その人のゼロの値は同じになりますね。
    そのバラエティーを見てるわけです。
    ハッシュ関数って同じ入力入れたら同じ出力になる関数で、
    別の数列?
    ゼロ1に変換して、
    そうすると大体ランダムになるんですけど、
    もちろん1種類しかないのにゼロがいきなり100個みたいなパターンももちろんあります。
    あるんだけど、それは数が少ないからじゃないですか。
    それは特別なパターンを引いちゃってるわけですよ。
    もっと種類を用意してあげて、全体で平均してあげると、
    大体確率分と同じようになるはずなんです。
    確率的に、統計的に。
    対数の法則みたいなことだと思いますけど。
    10通り。
    このテーブルの、このカラムの存在しているデータは10通りやわってなるときは、
    どうなったら10通りって言えるんでしょう?
    ちょっと簡単なために16通りにすると、
    16分の1になったら4回だから、
    ゼロが4回ハッシュ化して、
    SNS炎上のメカニズム
    ゼロ1の数列がポンポンポンポンできます。
    で、最大値を求めるんですけど、その最大値が4のとこです。
    あー、だから全部ハッシュ化して、
    1個何か決めて、例えば左から何個連続ゼロが続くかとか、
    1が続くかとか、右から何でもよくって、
    それのマックスを出すんだ。
    そう。それのマックスを出して、
    そのマックスが起こる確率の逆数というか通り。
    か、ユニクス。
    はー、えー面白!
    そんな方法思いつきもせえへんから、一発で頭に入ってこへんかったけど。
    これ超むずいですよね。最初見たとき、
    なんでこれで計算できることになるのか全然わかんなくて。
    僕もなんでそれでそうと言えるのかよくわかってないんですけど、
    そうと言えるんやと思って聞いたら、
    えー、そんなやり方で出せるんやってなりますね。
    いや、そうなんです。
    で、実際はさっき言ったみたいに、
    山田太郎っていう人をやったときに、
    いきなり100個ゼロがならちゃうっていうパターンも全然あるわけですよ。
    あるから、たとえばその100個データがあったら、
    10個ずつに分けて、それぞれでマックスを計算する。
    でそれを平均する。
    正確には調和平均っていうのを使って平均するんですけど、
    平均すると飛び値があんまり緩和される。
    なんか特殊な値があってもだいたい平準化して出てくる。
    あーなるほどね。たとえばなんか、
    IDが1から10番目。
    1から10の人、Aグループ、次の20までBグループとかに分けて、
    Aグループは左からゼロの連続する数、
    Bグループの人は右から1が連続する数みたいな感じで。
    いや、別に連続する数は全部左からでいいんですけど、
    要は山田太郎っていう人が特殊なわけじゃないですか。
    たとえば100人いたときに山田太郎っていう人がいて、
    いきなりゼロが100個並んでるんだけど、
    その特殊ケースを排除したいので、
    複数の部屋に分けて、
    要はこの計算を何回か試行してることにする。
    複数回試行してみて、
    山田太郎がいるグループだけすごい多いっていう結果になっちゃってるんだけど、
    他はだいたいこのぐらいですって。
    すごい小さな値になってるわけじゃないですか。
    それを平均すると、山田太郎が多いっていうグループの
    企業があまり少なくなる。川間で。
    Aグループで一番左から連続したデータ、
    Bグループで一番左から連続したデータ、
    みたいな感じでグループで分けて、
    グループで決めた反則方法の値が一番でかかったデータの値を平均する。
    そう。
    それだとたとえば333、103みたいに出たときに、
    そのまま平均すると結構100に引っ張られるので、
    それを引っ張られない平均の取り方っていうのが調和平均っていうのがあって、
    333、103は普通に計算すると、
    今4つあったかな。
    4つだとすると、3たす3たす3たす100、
    割る4みたいな感じだと思うんですけど、
    じゃなくて、3分の1たす3分の1たす100分の1たす3分の1。
    逆数にしてたして平均取るみたいな感じですね。
    で戻すっていうのはそういう平均の取り方があって。
    調和平均っていうのがあるんだ。
    外れ値の影響を抑える平均の取り方があって、
    そういうのをするとできると。
    へー、でもなんかそれでわかりそう、確かにって。
    なんか全部完全に理解してるわけじゃないけど。
    へー、そんなやり方あんだ。
    いや、おもろいっしょ。
    できそう。
    だいぶ賢いっすよね、これ思いつく人。
    いや、こんなん思いつかないっす。
    でも結構、レディスとかビッグクエリとか、
    そういう有名なミドルウェアに組み込まれてるみたいですね。
    なるほどな。
    そう。
    おもしれえな。
    ほんでなんでハイパーログログって言うねんっていうのがずっと気になってますけどね。
    それはなんだったかな。調べたんですけど、
    メモリの使用量がログ2のログ2Nのお題なのかな。
    ログってその対数ですね。
    対数にさらに対数をとるぐらいしか、
    データの量に対してそんだけ小さい小メモリでできるっていう。
    だからこのログっていうのはログ2のことですね。
    対数のログ。
    みたいですね。
    いい話。いい話でした。
    HyperLogLogのデータ数え方
    ちょっとなんか、ポッドキャストで聞いてる人が、
    言葉だけでどんだけついてくれてるのかちょっと不安ですけど。
    だいたいはわかんじゃないですか、演技に流行ってる人だったらなんだか雰囲気で。
    まあそうですね。これで興味あれば調べたりしてもらえるといいかもしれない。
    いろんなアルゴリズムについて知りたくなった。
    確かに普通にやったら無理だよなーみたいなの結構あると思うんで。
    そういうのってこういうすごい頭いいアルゴリズムで計算してるっていう。
    こういうトークさんのアルゴリズムシリーズ。
    たまにあるといいですよね。
    シリーズ化期待してます。
    ちょっと自分でもやっぱりちゃんと理解しないといけないんで。
    そのポンポン出ないですけど。
    たまに。
    こういう系の好き。
    はい。ありがとうございます。
    結構時間経っちゃったんで。
    はい。
    はい。じゃあ終わりましょう。
    ありがとうございました。
    ありがとうございました。
    33:27

    コメント

    スクロール