NISHIO Hirokazu[日本語][English]

世論地図勉強会

2024-10-18 サイボウズラボ勉強会

世論地図とは

世論地図

  • image
  • バックエンドはPolis
  • フロントエンドはフルスクラッチで開発
    • TypeScipt + Next.js + D3.js
    • モバイルファーストで開発
      • JAPAN CHOICEのユニークユーザ300万人のうち85%がモバイル端末
      • モバイル環境でのUXが重要という判断
  • 個人のSNSアイコンを出すのをやめて、代わりに政党アイコンを出す
    • このロジックはフロントエンドで実装している
    • 政党の意見データからPCAで2次元にした場合の投影箇所を計算する
    • 同様にユーザの投票データからもフロントエンドで投影箇所を計算できる
      • →サーバを介する必要がなくなったので本家より爆速でユーザフィードバックができる!
  • 詳細表示
    • 本家Polisのここの部分のUXが悪すぎる問題
      • image
      • 「メジャーな意見」「A」「B」を押すと右の「意見」の数字が変わる
        • この数字は意見ID
    • レポート画面の方が見やすいと言う意見がある
      • image
      • これをベースにしつつ、スマートホンの画面で見やすいデザインにした
        • 表形式で左右に並べるのは横幅が狭い環境では辛いから
    • imageimage
    • image
    • ちょっとしたこだわり
      • 賛成/反対/中立の順ではなく賛成/中立/反対の順にしてある
      • 未投票ユーザをグラフに表出してない
      • これによってグラフの中央を見れば意見の中央値がわかるようにしてある
  • 可視化やコンセンサス表示に関して本家ではどういう意味なのかの解説がないが、よく誤解を招くのできちんと書くことにした
    • クラスタの大きさは人数ではなく、散らばりである
      • このグラフは質問への回答内容に応じて考えが近しい人をグループ化したものです。 グループ間の距離感は意見の違いの度合い を示します。 そのためグループの大きさは 人数の多さではなく意見のばらつきを表します。 表示されている意見の要約はあくまで現時点の意見集団のデータをAIが分析した結果であり、質問に答えるユーザが増えることで更新されていく予定です。

    • コンセンサスは多数決ではなく、クラスタごとの賛成反対の掛け算である
      • 「みんなのコンセンサス」はみんなの投票を足し合わせた単なる多数決ではなく、それぞれの意見グループごとでの賛成・反対の割合を掛け合わせたスコアによって選ばれています。 つまり多数派が賛成していたとしても、強く反対するグループがいる場合には選ばれません。 みんなの意見の分布によっては、ここで何も選ばれない場合もあります。

  • クラスタの人数や、全体での投票集計結果は表示していない
    • 人数を表示しないことによって、クラスタが二つに別れたときにどちらが多数派であるかわからなくしている
    • 全体での投票結果を出さないことで「この意見に関して賛成が多数派なのか反対が多数派なのか」をわからなくしている
    • これらを出すと、結局見慣れないものを無視して「普通の多数決」の結果だけ見てしまうのではないか、と思う
  • AIによるクラスタの解説
    • image
    • Talk to the City的だよね
      • 僕もTTTCをやって着想を得たかと勘違いしていたが、でも5/8にはもうPolisのデータでAI解説を作るプロトタイプが動いてるな...
      • mashbeanPolis 2.0の話をしたからそれ由来かな
        • これはクラスタのデータをもとにAIとチャットができる仕組み
        • それができるならまずどういうクラスタなのか説明してほしいよな的な話
    • Q: 何人くらいまでLLMでの名付けに耐えられるか?
      • A: 前段のPolisがクラスタにわけてそのクラスタの特徴量を出すところまでやっているから、LLM部分の負担は大きくない。ユーザが1億人になってもLLM部分はボトルネックにはならない。

見えないところの話

  • Polisがどの程度のアクセスまで耐えられるか未知数
    • 過去の投票ナビの実績で11万人、Polisのよく使われる規模は数百なので2~3桁大きい
      • 自前運用なのでリソースを増やすことはできるが、そもそもどの程度の規模でどの程度のリソースが必要かわからない
      • サーバが死ぬ可能性の想定が必要
    • ところでPolisの可視化はユーザの投票と非同期にポーリングで更新されてる
      • ラインA
        • ユーザが投票する
        • DBが書き換わる
        • PCAが行われる
        • image
      • ラインB
        • PCA結果のポーリングをする
        • 変化なし
        • 変化あり
        • 再描画(ユーザの位置の更新もここ)
        • image
    • しかし今回の開発過程で政党アイコンを出すための研究の結果、自分のアイコンもフロントエンドで位置計算できるようになった
    • ということは?
      • ラインBが動いてることが必須ではない
      • PCAの結果をフロントエンドでキャッシュしてしまえばサーバが死んでも大丈夫!
      • image
      • 詳しくいうとPolisのサーバはDBサーバと計算サーバがある
        • この計算サーバがボトルネック
          • そこで計算サーバが生きてることを仮定しない設計にした
          • 計算サーバが死んでても全く実害ない
            • ユーザの投票はDBサーバに記録されるので後から計算し直せる
      • DBサーバも死んだ場合はユーザの投票が記録されなくなる
        • PostgreSQLに小さなレコードをinsertするだけなのでそうそう落ちることはないと思う
        • が、テレビで紹介されたときのスパイクが懸念点
        • ユーザ体験を損ねずにサイレントに失敗するようにした
  • AIクラスタ解説の仕組み
    • Polisの吐くデータをフロントエンドが整形する :
# Team Red
## 高齢者と現役世代の「給付と負担」の公平性を確保するため、高齢者の医療費窓口負担を見直し(2割負担や3割負担といった現役世代の負担に近づける)
 - **全体** 賛成: 18, 反対: 5, 中立: 5, 合計: 28
 - **このチーム** 賛成: 0, 反対: 5, 中立: 5, 合計: 10

# Team Blue
## 高齢者と現役世代の「給付と負担」の公平性を確保するため、高齢者の医療費窓口負担を見直し(2割負担や3割負担といった現役世代の負担に近づける)
 - **全体** 賛成: 18, 反対: 5, 中立: 5, 合計: 28
 - **このチーム** 賛成: 11, 反対: 0, 中立: 0, 合計: 11

## 低所得の高齢者の年金に一定額を上乗せして給付する 制度を設ける
 - **全体** 賛成: 7, 反対: 9, 中立: 14, 合計: 30
 - **このチーム** 賛成: 0, 反対: 8, 中立: 3, 合計: 11

## 医療費の70歳以上の窓口負担を一律1割に引き下げ、軽減・無料化を進める
 - **全体** 賛成: 4, 反対: 18, 中立: 5, 合計: 27
 - **このチーム** 賛成: 0, 反対: 11, 中立: 0, 合計: 11

# Team Yellow
## 医療・介護・障がい福祉等に関する社会保障サービスの自己負担の合計額について、所得に応じて上限を設ける総合合算制度を創設する
 - **全体** 賛成: 14, 反対: 5, 中立: 11, 合計: 30
 - **このチーム** 賛成: 9, 反対: 0, 中立: 0, 合計: 9

## 社会保険制度は現役世代に過度な偏った負担を強いるため、年金制度は積立方式あるいは税方式へと抜本的に改革する
 - **全体** 賛成: 13, 反対: 4, 中立: 11, 合計: 28
 - **このチーム** 賛成: 7, 反対: 0, 中立: 0, 合計: 7

## 現役世代の社会保険料負担を引き下げるために公費投入を行う
 - **全体** 賛成: 13, 反対: 3, 中立: 11, 合計: 27
 - **このチーム** 賛成: 6, 反対: 0, 中立: 0, 合計: 6

## 社会保険料負担の上限額を見直し、富裕層に応分の負担を求める
 - **全体** 賛成: 14, 反対: 2, 中立: 11, 合計: 27
 - **このチーム** 賛成: 6, 反対: 0, 中立: 0, 合計: 6

## 高齢者と現役世代の「給付と負担」の公平性を確保するため、高齢者の医療費窓口負担を見直し(2割負担や3割負担といった現役世代の負担に近づける)
 - **全体** 賛成: 18, 反対: 5, 中立: 5, 合計: 28
 - **このチーム** 賛成: 7, 反対: 0, 中立: 0, 合計: 7
- これを読んで解説を作るカスタムGPTsを作ってある
    - ![image](https://gyazo.com/bd18952ff27ed261d2c53546805a7caf/thumb/1000)
- 手作業でデータを貼って、結果がJSONで出てくるのを、ソースコードに貼っている
    - ![image](https://gyazo.com/3a8d46bf27260203dcd3769c1918f276/thumb/1000)
- ここは人間のレビューフェーズが必要なので自動化できない
    - 事例1:
        - 「Xという意見に対してAもBも賛成傾向が高いが、Bの方が比較的反対が多く、それがクラスタを特徴づけている」というシチュエーションで「BはXに賛成しています」とか出てしまう
        - 嘘ではないのだがAの方がもっと賛成しているのでクラスタの説明にそう書かれるとミスリーディング
        - 注目してほしいところがそこじゃないんだよな〜
    - 事例2:
        - AIが「政策費」と略すけど「政策活動費」にしたい

面白かった知見

  • 政党のマニフェストを元に初期データを作ると分布が均質すぎる
    • それが原因で面白い挙動があった
      • image
      • 人間は(1)だと思ってるのだけど
      • 実際のデータは(2)になってる
      • そのデータは機械にとっては2通りの分け方のどちらも同等に正しく見える(3)
    • この結果、人間からみると不自然なクラスタリングがされる
    • 10〜20人ほど投票すると納得感のあるクラスタに変わった
    • これは「政党のマニフェストから意見をチョイスして投票対象とした上で、政党の投票結果と見なす」という方法では「各ポジションに一人ずつ」的なデータになることが原因だと思う
      • その結果、各軸の重みが均等になりすぎる
      • 無関係な人が投票することで軸の重みが分散して、より安定したクラスタリングが行われるようになる
  • 政党の意見がまったくケース
    • →アイコンも全く同じ箇所に表示される
    • 政党アイコンが7つしかないな?と思ったが日本共産党 れいわ新選組 社会民主党が全く同じ意見なので同じ場所に重なっていて社民が最後なので一番上になっている

    • どう解決するか悩ましい、バネモデルで反発するか?etc
    • この問題、実装で解決する方法とかいくつか考えてみたんですけど「3つの政党が並んだアイコンを作って一つの政党みたいに扱う」でいい気がしました。アイコンの画像やサイズは個別に指定できる実装に既になってます。

    • image
    • 3つの時はまあいい
    • 「自民党と公明党が重なってる!」「2個の時にどうするのがいいか...」

Q&A

  • human.iconQ: 回答することで自分の嫌いな政党に近づいて行った場合、それを避けるために回答を変える行動が生まれるのではないか?

    • nishio.iconそれは結構難しいと思う。
    • 自分の回答の結果、「予期せず」好きなA党ではなくB党に近づいてしまったとする
    • Bから離れてAに近づくためにはAとBで意見が異なっている設問に対してAと同じ回答をしないといけない
      • それはつまりAとBの意見ベクトルをわかってないといけない
      • がしかし「予期せず」B党に近づいたということはB党の意見ベクトルを把握してない
        • B党が嫌いだからB党の主張をちゃんと聞いてないしマニフェストをしっかり読んでない
        • ちゃんと読むと、感情的に嫌ってたB党が実は自分の意見に一番近かった、それに気づいてなかった、気づく機会を提供した
        • それが学びの機会だと思う
    • 投票ナビのようなサービスでも、本人はA党支持のつもりなのに「一番近いのはB党と表示された!」となる人はいる
      • いくつもの質問に答えた後に一括で「ここに近い」と言われるのと、設問ごとに動いていくので、より細粒度での理解を促す効果はあるかも知れない
      • 憲法や税制などの大枠ごとに地図があるので、憲法に関してはA党だが税制はB党だなーというようなこともわかる
  • human.icon政党が単一の人のように描写されている?「会社さんはいない」に類した組織を人間とみなす間違いでは

    • nishio.icon比例代表で「政党」を選ぶ仕組みがあるので仕方ないと思う
    • 政治家個人個人をPolis的分析したものとしては2022年参院選のPolis的可視化がある(5/27にやった)
    • image
    • 668人、各点が個人で、実名や政党と紐づいたデータ
      • 政治家っていっぱいいるなぁ
      • スマートホンの画面でみせても見づらい問題がある
    • human.iconこのデータはどこから?
      • nishio.icon東京大学谷口研究室・朝日新聞社共同調査
        • 東京大学谷口研究室・朝日新聞社共同調査(東大谷口研・朝日調査,2005年以前は東大蒲島=谷口研・朝日調査)は,2003年から衆院選・参院選の際に実施されている有権者調査と政治家調査のふたつからなる,世界的にも稀少なデータセットです。 このサイトは,本調査データを公開し,広く学術研究に用いていただくことを目的として開設いたしました。

        • 政治家全員に対するアンケート調査
      • human.icon結構大変そう
    • human.iconLLMで抽出できないか
      • nishio.iconできるけどもちろん間違いが入るから政治家からのフィードバックを受け付けて修正するプロセスの設計が必要
        • そうしないと9割の成功率でも間違ってる67人からお怒りの電話が掛かってきちゃう
        • 個人的にはGitHubにCSVを公開して「間違ってたらプルリクエストして」にしたい

2024-10-19

  • 全体的に100人以上のデータが集まったので表示を更新
  • image
  • image
  • image
  • image
  • image
  • image

(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]