公開情報とAI、統計を組み合わせて「ボートマッチ(ポリシーマッチ)」システムを構築しました。
今回は、報道関係者や政治に関心のある有権者、政治家の方にぜひ見ていただきたい記事です。
選挙が近づくと、報道機関や政治系サイトで「ボートマッチ」のサイトがオープンします。政策課題を問ういくつかの質問に答えていくと、「どの政党・候補者と考え方が近いか」を算出してくれるシステムです。
マッチングの仕組みは統計の組み合わせなので、新聞社にいたころ、「いつか自分の手でつくりたい」と思っていたものでした。
何年か前、必要な知識を身につけたので、「ボートマッチを内製化しましょう」と社内で提案したものの、私の社内での信頼レベルが低かったせいか、採用されずに悔しい思いをした覚えがあります。
今回は、そのボートマッチの仕組みを自作したので、設計思想などとともにご紹介します。
ボートマッチ(ポリシーマッチ)の「データ設計」と「算出ロジック」
一般的には「ボートマッチ」と言いますが、選挙が迫っていないので、政策方針を問うということで「ポリシーマッチ」とも呼ぶこととします。
ボートマッチで最も重要なのは、アルゴリズムの根拠となる「データ」と「計算式」です。客観性を担保するため、以下のアプローチをとりました。
① 独自データセットの構築と、統計に基づく設問選定
誰もが無料で使えるプロジェクトとするため、政策課題についての各党の方針をまとめるバックデータを独自に構築しなければなりません。 具体的には、報道機関の公開記事や各政党の公式ホームページ(公約やマニフェスト)を基に25の政策課題を抽出しました。
ボートマッチとして適切に機能するよう、統計的に「政党間で意見のばらつき(標準偏差)が大きい」テーマを選定しています。政党間でばらつきが少ないデータを使用すると、マッチングに差が出ないためです。
また、今回は政党全体の方針をデータとして取りましたが、これが「各政治家・候補者」の考え方を取って政党ごとに集計する場合、「同じ政党内で意見のばらつきが少ないもの」を厳選しないといけません。
各候補者にアンケートをして、その平均を取る方が実態に近いデータが取れます。この場合、「政党間のばらつきが多い」「政党内のばらつきが少ない」の両方を満たす質問項目を厳選しないといけません。
具体的には「信号対雑音比(S/N比)」を計算することになります。(政党間ばらつき÷政党内ばらつき)
今回はそこまではせず、公開情報から得られるテキストベースのデータをAIに読み込ませて1~5点にスコア付けしました。
各政党・各質問項目のスコアはスプレッドシートに格納。数値は定期的に更新すれば、常に最新のボートマッチが機能するようになります。
② 直感的なスコア算出:「マンハッタン距離」の採用
当初は統計でよく使われる「ユークリッド距離」でユーザーと政党の差を計算していました。
ユークリッド距離とは、分かりやすく言うと2地点間の最短距離です。有権者の答えと、各政党の答えの差の絶対値を取って2乗したものを25質問文合わせて、最後に平方根を取ります。(合計点は最大20)
しかし、これだとスコアにあまり差が出ず、各政党のスタンスが団子状態になるという課題に直面しました。
そこで、より有権者が直感的に理解しやすい「マンハッタン距離(差の絶対値の単純合計)」を採用。25問の回答のズレを単純に積み上げ、100点満点からのパーセンテージに変換することで、「〇〇党との一致度:82%」といった結果を弾き出しています。
サーバーレスで構築したシステム構成
システム全体は「データ層」「ロジック層」「表示層」を完全に分離(疎結合)しています。

※表示されている結果はランダムに選択肢を選んだものであり、
特定の政党に結果が有利・不利に現れることはありません。
データベース(Google スプレッドシート)
各政党の25問に対するデータを格納。簡単にデータのメンテナンスができます。バックエンド・計算エンジン(Google Apps Script + Gemini API)
スプレッドシートから最新の政党データを取得し、フロント(ホームページ)から送られてきたユーザーの回答と突き合わせて一致度を計算します。生成AIを連動させ、ユーザーと最も一致した政党の「具体的な共通政策」を挙げつつ、150~200文字程度の「分析総評」を自動生成してサイトに表示するデータを返します。フロントエンド(Google サイト + HTML/CSS/JS)
Googleサイトの埋め込み機能を使い、JavaScriptのFetch APIを用いて裏側でGASと非同期通信を行うことで、画面遷移なし(ページリロードなし)で結果が表示されます。
※スコアは公開情報に基づき開発者が独自に数値化したものであり、正確性を完全に保証するものではありません。今後、直接、政党にアンケートを実施・集計するなどして精緻化を試みます。
バックデータを入れ替えるだけで横展開可能
このシステムの最大の強みは、「フロントエンドやバックエンドのプログラム(コード)を一切書き換えることなく、別の選挙やアンケート調査に使い回せる」という汎用性です。
GASとスプレッドシート、フロントエンドの簡単なコードで動かしているため、質問項目を入れ替えるだけで機能します。
例えば、
別の国政選挙や地方選挙の候補者と有権者
ある集団のメンバーと、ファン・サポーターの「マッチ度・相性度」
地域コミュニティの方針と、住民の「マッチ度・相性度」
など、データさえあれば広範な分野の相性診断に応用可能です。
ボートマッチは「中身を知る」ことが大切
今回、ボートマッチ(ポリシーマッチ)のシステムをつくったのは、単に「つくってみたかったから」というのもありますが、「どういう計算根拠で相性度を算出しているのか」を知ることが大切だと思ったことも理由の一つです。
したがって、各政党のスタンスを表すバックデータは、なるべく私の主観が入らないよう、AIに処理してもらいましたが、政党の最新のスタンスを示すデータではないので、分析結果は「参考程度」にとらえてください。
ボートマッチは「選挙への関心を高めるため」という目的がよく謳われますが、裏側のデータ処理にも目を向けると、より一層、楽しめるようになります。
ボートマッチやプレスリリースの自動生成AIが載っている志村のホームページはこちら
生成AIを使った「SNS炎上リスク診断」ができるLINE公式アカウントはこちら
