世論地図勉強会
15日は自民党と、今日18日は共産党とやる
3点で面ができてきた感がある
リリースが本日の予定なので資料はリリース後にupdateします
しました
世論地図とは
https://gyazo.com/f03c209f057ac5377e88093c24be9f8e
3.【新機能】世論地図
私たちの意見は、元来多様です。4年に1度、1票を託すだけではそのすべては伝わりきらない程度に。社会は本当のところ何を考えているのか。私はその中のどこにいるのか。地図にしてみると、既に合意点ができていたり、本当の対立軸が別に在ったりする論点も見つかるかもしれません。新しい時代の民主主義の実験場「世論地図」でひとり一人の思い、考えを可視化してみましょう。
JAPAN CHOICEのエンジニアチームと連携して実装した
JAPAN CHOICEは、NPO法人Mielkaが運営する政治情報提供プラットフォームです。有権者が自分の意見に合った政党や政策を見つけやすくするために、各政党の公約や過去の実績を比較しやすく整理し、視覚的に分かりやすく提示しています。また、国会議員の情報を網羅した「議員pedia」や投票ナビなど、選挙に関する様々なツールを提供し、意思決定をサポートします。 Mielkaとは
Mielkaは政治×テクノロジー×教育を軸に2016年に発足したNPO法人です。
若年層の投票率の向上、政治参加・社会参加意欲の向上のために、社会や政治のことを「じぶんごと」として身近に考えてもらうために政治的中立公平な立場から発信しています。 若者と政治の距離を近づけるために、社会が意思決定を行うための土台作りとして政治を可視化(見えるか)することで政治や選挙のことをわかりやすく伝えています。 https://gyazo.com/be4a9194caf60315b5f3264e2746b776
https://gyazo.com/f62b0155084d5900962d513849078397
この時は特にこの分析のために集めたわけではないデータだが可視化できた
11万人の規模のデータで世論の可視化をすることは現実的に可能だと言うことがわかった
この分析が2024-05-14、つまり実は安野さんの都知事選より前から連携してた
次の衆院選のタイミングでPolisをやりたいねと言う話をしていた 世論地図
https://gyazo.com/1ca8fe7ec530a9dd48dc114ac9f6b0db
オリジナルのPolisの見た目
https://gyazo.com/cd1644cee2b1fc42b56518d6e65d55ec
https://gyazo.com/1272e02943155b514268445d784e94ee
Polis部分
人々のN種類の意見に対する賛成反対の意見ベクトルをPCA(主成分分析)で2次元に落として可視化する それに対してk平均法でクラスタリングする
世論地図側
"各クラスタを特徴づけてる意見"データを元にLLMがクラスタの解説を作成
政党データを表示
フロントエンドはフルスクラッチで開発
TypeScipt + Next.js + D3.js JAPAN CHOICEのユニークユーザ300万人のうち85%がモバイル端末
モバイル環境でのUXが重要という判断
個人のSNSアイコンを出すのをやめて、代わりに政党アイコンを出す
このロジックはフロントエンドで実装している
政党の意見データからPCAで2次元にした場合の投影箇所を計算する
同様にユーザの投票データからもフロントエンドで投影箇所を計算できる
→サーバを介する必要がなくなったので本家より爆速でユーザフィードバックができる!
詳細表示
本家Polisのここの部分のUXが悪すぎる問題
https://gyazo.com/ac39d30d14844ddc93d06f0c26abd577
「メジャーな意見」「A」「B」を押すと右の「意見」の数字が変わる
この数字は意見ID
レポート画面の方が見やすいと言う意見がある
https://gyazo.com/8fc9bbf3a004b476674e42e9fc1b9ecd
これをベースにしつつ、スマートホンの画面で見やすいデザインにした
表形式で左右に並べるのは横幅が狭い環境では辛いから
https://gyazo.com/a9c966bf767aa3a2a84eb648c73b597fhttps://gyazo.com/c1900075305d6d873a92710c81ef52d9
https://gyazo.com/acfa2ca54fae8f8f3f49e434fde85a96
ちょっとしたこだわり
賛成/反対/中立の順ではなく賛成/中立/反対の順にしてある
未投票ユーザをグラフに表出してない
これによってグラフの中央を見れば意見の中央値がわかるようにしてある
Majority Judgememt View.icon 2023-06-15
可視化やコンセンサス表示に関して本家ではどういう意味なのかの解説がないが、よく誤解を招くのできちんと書くことにした
クラスタの大きさは人数ではなく、散らばりである
このグラフは質問への回答内容に応じて考えが近しい人をグループ化したものです。 グループ間の距離感は意見の違いの度合い を示します。 そのためグループの大きさは 人数の多さではなく意見のばらつきを表します。 表示されている意見の要約はあくまで現時点の意見集団のデータをAIが分析した結果であり、質問に答えるユーザが増えることで更新されていく予定です。
コンセンサスは多数決ではなく、クラスタごとの賛成反対の掛け算である
「みんなのコンセンサス」はみんなの投票を足し合わせた単なる多数決ではなく、それぞれの意見グループごとでの賛成・反対の割合を掛け合わせたスコアによって選ばれています。 つまり多数派が賛成していたとしても、強く反対するグループがいる場合には選ばれません。 みんなの意見の分布によっては、ここで何も選ばれない場合もあります。
クラスタの人数や、全体での投票集計結果は表示していない
人数を表示しないことによって、クラスタが二つに別れたときにどちらが多数派であるかわからなくしている
全体での投票結果を出さないことで「この意見に関して賛成が多数派なのか反対が多数派なのか」をわからなくしている
これらを出すと、結局見慣れないものを無視して「普通の多数決」の結果だけ見てしまうのではないか、と思う AIによるクラスタの解説
https://gyazo.com/7546bedf1190c3c8e4d7f7dc2891ab51
僕もTTTCをやって着想を得たかと勘違いしていたが、でも5/8にはもうPolisのデータでAI解説を作るプロトタイプが動いてるな...
これはクラスタのデータをもとにAIとチャットができる仕組み
それができるならまずどういうクラスタなのか説明してほしいよな的な話
Q: 何人くらいまでLLMでの名付けに耐えられるか?
A: 前段のPolisがクラスタにわけてそのクラスタの特徴量を出すところまでやっているから、LLM部分の負担は大きくない。ユーザが1億人になってもLLM部分はボトルネックにはならない。
見えないところの話
Polisがどの程度のアクセスまで耐えられるか未知数
過去の投票ナビの実績で11万人、Polisのよく使われる規模は数百なので2~3桁大きい
自前運用なのでリソースを増やすことはできるが、そもそもどの程度の規模でどの程度のリソースが必要かわからない
サーバが死ぬ可能性の想定が必要
ところでPolisの可視化はユーザの投票と非同期にポーリングで更新されてる
ラインA
ユーザが投票する
DBが書き換わる
PCAが行われる
https://gyazo.com/a4dc704196509d22dcbb2b2dfb4bb563
ラインB
PCA結果のポーリングをする
変化なし
変化あり
再描画(ユーザの位置の更新もここ)
https://gyazo.com/595212b90edfe6f692861439bccb5148
しかし今回の開発過程で政党アイコンを出すための研究の結果、自分のアイコンもフロントエンドで位置計算できるようになった
ということは?
ラインBが動いてることが必須ではない
PCAの結果をフロントエンドでキャッシュしてしまえばサーバが死んでも大丈夫!
https://gyazo.com/b84da6bf2cb372fc3050c185caf6a362
詳しくいうとPolisのサーバはDBサーバと計算サーバがある
この計算サーバがボトルネック
そこで計算サーバが生きてることを仮定しない設計にした
計算サーバが死んでても全く実害ない
ユーザの投票はDBサーバに記録されるので後から計算し直せる
DBサーバも死んだ場合はユーザの投票が記録されなくなる
PostgreSQLに小さなレコードをinsertするだけなのでそうそう落ちることはないと思う
が、テレビで紹介されたときのスパイクが懸念点
ユーザ体験を損ねずにサイレントに失敗するようにした
AIクラスタ解説の仕組み
Polisの吐くデータをフロントエンドが整形する
code::
# 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を作ってある
https://gyazo.com/bd18952ff27ed261d2c53546805a7caf
手作業でデータを貼って、結果がJSONで出てくるのを、ソースコードに貼っている
https://gyazo.com/3a8d46bf27260203dcd3769c1918f276
ここは人間のレビューフェーズが必要なので自動化できない
事例1:
「Xという意見に対してAもBも賛成傾向が高いが、Bの方が比較的反対が多く、それがクラスタを特徴づけている」というシチュエーションで「BはXに賛成しています」とか出てしまう
嘘ではないのだがAの方がもっと賛成しているのでクラスタの説明にそう書かれるとミスリーディング
注目してほしいところがそこじゃないんだよな〜
事例2:
AIが「政策費」と略すけど「政策活動費」にしたい
面白かった知見
政党のマニフェストを元に初期データを作ると分布が均質すぎる
それが原因で面白い挙動があった
https://gyazo.com/6453699e8638d4c4b1ebd7c90bc2436b
人間は(1)だと思ってるのだけど
実際のデータは(2)になってる
そのデータは機械にとっては2通りの分け方のどちらも同等に正しく見える(3)
この結果、人間からみると不自然なクラスタリングがされる
10〜20人ほど投票すると納得感のあるクラスタに変わった
これは「政党のマニフェストから意見をチョイスして投票対象とした上で、政党の投票結果と見なす」という方法では「各ポジションに一人ずつ」的なデータになることが原因だと思う
その結果、各軸の重みが均等になりすぎる
無関係な人が投票することで軸の重みが分散して、より安定したクラスタリングが行われるようになる
政党の意見がまったくケース
→アイコンも全く同じ箇所に表示される
政党アイコンが7つしかないな?と思ったが日本共産党 れいわ新選組 社会民主党が全く同じ意見なので同じ場所に重なっていて社民が最後なので一番上になっている
どう解決するか悩ましい、バネモデルで反発するか?etc
この問題、実装で解決する方法とかいくつか考えてみたんですけど「3つの政党が並んだアイコンを作って一つの政党みたいに扱う」でいい気がしました。アイコンの画像やサイズは個別に指定できる実装に既になってます。
https://gyazo.com/a5bb82f78386acf682a39f9ab15234e9
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比例代表で「政党」を選ぶ仕組みがあるので仕方ないと思う
https://gyazo.com/77f9fc60c241159a0062e4842a7435cf
668人、各点が個人で、実名や政党と紐づいたデータ
政治家っていっぱいいるなぁ
スマートホンの画面でみせても見づらい問題がある
human.iconこのデータはどこから?
東京大学谷口研究室・朝日新聞社共同調査(東大谷口研・朝日調査,2005年以前は東大蒲島=谷口研・朝日調査)は,2003年から衆院選・参院選の際に実施されている有権者調査と政治家調査のふたつからなる,世界的にも稀少なデータセットです。 このサイトは,本調査データを公開し,広く学術研究に用いていただくことを目的として開設いたしました。
政治家全員に対するアンケート調査
human.icon結構大変そう
human.iconLLMで抽出できないか
nishio.iconできるけどもちろん間違いが入るから政治家からのフィードバックを受け付けて修正するプロセスの設計が必要
そうしないと9割の成功率でも間違ってる67人からお怒りの電話が掛かってきちゃう
個人的にはGitHubにCSVを公開して「間違ってたらプルリクエストして」にしたい
2024-10-19
全体的に100人以上のデータが集まったので表示を更新
https://gyazo.com/86cd4282d56e4767045a4e0ab803c2f5
https://gyazo.com/04783a16dc121a95fad1367240b9f62f
https://gyazo.com/84d7bca9e6c498e9e61f5f3fe35bf336
https://gyazo.com/a0b10444e9e24510a61acfa3c9d38cd9
https://gyazo.com/3e03262662ef7ceb73eef83a65e1128a
https://gyazo.com/7d6813f9746f8af171a3ec01d3b7997b