2017年衆議院議員総選挙の小選挙区情勢調査を選挙結果と比較分析 & 独自予想方法を考える

この記事は eeic Advent Calendar 2017 の1日目の記事です。

qiita.com

選挙が行われるたびに、新聞社などの報道機関は選挙情勢を報じています。

その選挙情勢はどれぐらい当たるものなのか、気になったことはないでしょうか。

今回は、各社の各選挙区に対する選挙情勢と選挙結果の関係を統計学/機械学習の知識を勉強しつつ調べてみました。またその結果を元に独自の予想を立てるとしたらどうすればよいかも検討します。

このブログを読むと……

下の文章の意味をちゃんと取れるようになります。

自民門山と希望田嶋が互角の激戦となっている。

過去二回、比例復活の門山は自民支持層を固め、公明との連携をフル活用。自民党幹部らの応援を受け、選挙区での勝利を狙う。

民進から希望に移った田嶋は、連合加盟の労組の支援を受けるなど民進時の支持層を固めつつ、無党派層にも浸透する。

共産大野は、支持層を固めて票の上積みを目指す。維新長谷川は支持に広がりが見られず、厳しい。

衆議院議員総選挙について

f:id:nakachan94:20171125194916p:plain

衆議院議員総選挙について軽く説明します。

まず、衆議院とは国会に2つある議院の1つです。もう1つの議院は参議院です。議員定数は465人です。

各々の議員の任期は4年ですが、衆議院が解散された場合は任期満了前に失職します。2017年の前の総選挙は2014年12月にあったため、2017年9月の解散で失職した人の任期は約2年9ヶ月だったということになります。また次の総選挙は2021年10月までには必ずあります。

総選挙では、小選挙区で289人、比例代表で176人、合計465人を選出します。

その他、詳しい情報はWikipediaや書籍などをご覧ください。

衆議院議員総選挙 - Wikipedia

選挙情勢について

選挙情勢の報道で多くの人が目にしているのは、下の記事のような議席数をいくつ取るかの予想だと思います。

mainichi.jp

ですが、本ブログで分析の対象とする選挙情勢は下の記事のように各選挙区の情勢を調査したものです。

www.tokyo-np.co.jp

例えば、千葉1区の情勢はこのように書かれています。

自民門山と希望田嶋が互角の激戦となっている。

過去二回、比例復活の門山は自民支持層を固め、公明との連携をフル活用。自民党幹部らの応援を受け、選挙区での勝利を狙う。

民進から希望に移った田嶋は、連合加盟の労組の支援を受けるなど民進時の支持層を固めつつ、無党派層にも浸透する。

共産大野は、支持層を固めて票の上積みを目指す。維新長谷川は支持に広がりが見られず、厳しい。

新聞ですので、当然自然言語で書かれています。ですが、このままの状態では分析が極めて困難です。

実は既にどの言葉がどのような意味を持っているのかを調べた人がいます。

上のツイートによれば「独走」は区分S、「優勢」は区分A、「やや優勢」は区分B、 「大激戦」は先に名前が書かれているほうが区分C+後に名前が書かれているほうが区分C-、 「懸命に追い上げ」が区分D、「追い上げに懸命」が区分E、「巻き返しを図る」が区分F、「厳しい」が区分Gなどとなっています。

「独走」、「優勢」、「やや優勢」、「厳しい」ぐらいは直観的に分かりますが、「大激戦」の名前の前後や「懸命に追い上げ」と「追い上げに懸命」と「巻き返しを図る」の差などは難しいですね……

先程の千葉1区の例であれば、

自民門山→C+、希望田嶋→C-、共産大野→F、維新長谷川→G

になり、自民と希望の接戦だとより分かりやすくなります。また自然言語ではなくカテゴリーデータになるため、分析が行いやすくなります。

さらに、先程のツイートをした方が衆議院選挙における各社情勢調査の結果をまとめてくださっています。

twitter.com

このデータを用いて2017年衆議院選挙の情勢調査を分析します。とりあえず小選挙区だけでも分析します。

分析目的・内容

  • 情勢調査の精度を知る

    • 小選挙区
      • 区分(S, A, ... , F, G)と当選確率の関係
    • 比例代表(後日追記予定)
      • 区分の仕方を考える
      • 考えた区分と議席数の関係を調べる
  • 各社のデータをまとめると、よりよい結果が出るかどうかを知る

第一の分析目的は情勢調査の精度を知るという好奇心駆動型ですが、それだけでは探索範囲が広すぎるのでもう少し絞り込むために、細かい目的を設定します。

  • 議席予想
    • 趣味で行う議席予想に役立つデータが欲しい

他にも戦略選挙や選挙運動の材料などにも使えそうですが、とりあえず今回は除外します。

小選挙区の分析

それでは区分と

  1. 当選確率
  2. 当落線差

の差の順番で分析を行います。

データを打ち込む

twitter.com

上のサイトのデータ+当選したかどうか+得票率のデータを下の図のようにエクセルに打ち込みます。

情勢調査は6社8回分を用いています。最後の2回は読売新聞と日経新聞が合同で接戦区に対して行った調査です。

ただし、記述なしは'x'、解説ありは'-'にカテゴライズしています。

f:id:nakachan94:20171125195915p:plain

pythonpythonのライブラリを用いて、先程打ち込んだデータを解析しやすい形に読み込みます。

f:id:nakachan94:20171125200706p:plain

各社のデータを分析する

バブルチャート・当選確率のグラフを描く

まず、データの状況を見るために各新聞社のカテゴリーと当選したかどうか(小選挙区当選->1, 小選挙区落選->0)でバブルチャートを描きます。

f:id:nakachan94:20171125201513p:plain

Cより有利か不利かによって当選確率が結構変わってそうな感じがしますね。

区分による当選確率の変化を見るために横軸:区分、縦軸:当選確率で折れ線グラフを描きます。エラーバーは当選確率の95%信頼区間です。

f:id:nakachan94:20171125202440p:plain

少なくとも産経新聞日経新聞2以外では、C+とC-、つまり記事に書いてある順番の前後で当落確率が大きく違うようです。数値で示せば、C+で当選確率70%程度、C-で当選確率30%程度でしょうか。一方、産経新聞はC+とC-で当選確率の差はないのかもしれません。詳しいことは分かりませんが。

接戦と判断した人数を調べる

各区分の当選確率については分かりましたが、区分ごとの候補者数はどうなっているのでしょうか。もしC+やC-の数が多ければ、議席予想の幅が広がってしまいます。

ということで各社のデータから「接戦」であるC+、C、Cと「やや有利」、「やや不利」であるB、Dの数を数えます。図の中の数字のうち括弧でくくられていないのが「接戦」の数、くくられているのが「接戦」「やや有利」「やや不利」を足した数です。

f:id:nakachan94:20171127014107p:plain

読売新聞は「接戦」の数が多く、朝日新聞は「やや有利」「やや不利」の数が多いようです。それに比べて日経新聞毎日新聞産経新聞は接戦区の数を絞って表示しており、攻めた表現をしていることが分かります。

各社データ分析のまとめ

  • 「接戦」と表記された際の名前が出てくる順番で当選確率が大きく変化することが分かった
  • SからGの区分には一定の妥当性がありそうだと分かった
  • 読売新聞や朝日新聞時事通信は「接戦」「やや有利」「やや不利」の数が多少多かった

各社のデータを組み合わせ分析する

ここまでは各社のデータをそれぞれで分析してきましたが、ここからは組み合わせて分析を行います。

各社データの変形

本来、区分は順序尺度なのですが、データ処理をしやすくするためにSからxまでを4から-6までに割り当てて無理やり比率尺度に変換(-(解説あり)は処理方法がよく分からないためNaNに変換後、他社平均で穴埋め、読売新聞・日経新聞の2回目で調査が行われていない選挙区は他社平均で穴埋め)してしまいます。データよ、ごめん。

相関係数行列を見る

各社の相関を知るために相関係数行列を見てみます。

f:id:nakachan94:20171127021129p:plain

相関係数0.9超えです。全体として見たときに各社の調査結果はかなり似通っていることが分かります。

主成分分析をする

各社データをうまい形にまとめるにはどうすれば良いでしょうか。そうです、次元削減をしましょう。

次元削減でよく使われるのは主成分分析です。主成分分析については下の記事をご覧ください。

bdm.change-jp.com

ということで各社データに標準化(平均0、分散1にする操作)を施した上で、主成分分析を行います。その結果、得た主成分は

f:id:nakachan94:20171127025020p:plain

のようになります。第1主成分は固有値も大きく、寄与度も0.94(つまり全データの94%の情報がある)ことが分かります。 この主成分は各社のデータをうまくまとめたものと言えそうです。

この主成分を使って分析をすれば良さそうですが、主成分をよく見てみましょう。各社の情報が均等に配分されている…つまりこれは平均に似通っているのではないかと予想がつきます。各候補者に対して主成分と各社平均を散布図としてプロットしてみましょう。

f:id:nakachan94:20171127025422p:plain

極めて強い相関関係があります。ということで各社のデータをまとめる方法としては各社平均を使えば良さそうです。

各社平均と当選確率の関係を調べる

各社平均が当選確率とどのような関係があるかどうか調べます。ここはロジスティック回帰を使うのが良さそうです。

www.slideshare.net

精度は90%強です。各社平均が-2のとき当選確率は5%、-1で20%、0で50%、1で90%、2で95%ぐらいでしょうか。

(ちなみに-2以下でも当選しているのは東京18区菅直人さん(対自民)と神奈川6区の青柳陽一郎さん(対公明)です。2人とも立憲民主党であり、今回の立憲民主党の勢いを示しているような気がします。)

f:id:nakachan94:20171128200519p:plain

f:id:nakachan94:20171128201038p:plain

また予想当選確率を5分割(0-0.2, 0.2-0.4, 0.4-0.6, 0.6-0.8, 0.8-1.0)して、各分割での予想当選確率と実際当選確率をプロットしてみると、概ね予想当選確率と実際当選確率が比例していることが分かります。

f:id:nakachan94:20171128201620p:plain

接戦と判断した人数を調べる

接戦と予想した数も調べます。接戦の定義も難しいのですが、各社のC+、C-で70%前後、30%前後、B、Dの時当選確率が90%前後、10%前後、であることから、それらに定義を合わせると接戦(有利)は50%から85%(平均70%程度)、接戦(不利)は15%から50%(平均30%程度)、やや有利/不利は85%から95%(平均90%程度)、5%から15%(平均10%程度)とします。

f:id:nakachan94:20171128210245p:plain

産経新聞日経新聞2よりは接戦と判断した人数は多いですが、その他の予想よりは接戦数は少ない人数になっています。

各社データを組み合わせた分析のまとめ

  • 各社のデータをまとめる方法は平均で良さそう
  • まとめると接戦数を減らすことができる

各社平均を使う手法の予想精度を交差検証で調べる

K-分割交差検証を行います。比較対象として各社の予想を使います。今回は936人を5分割し交差検証します。

f:id:nakachan94:20171128233329p:plain

灰色が各社個別の結果、青色が各社平均を使った結果です。予想失敗数は各社平均を使うことによって減らせそうだと分かります。

小選挙区のまとめ

  • 「接戦」と表示された時の候補者名の前後で当選確率が大きく違う
  • 各社平均を使うと予想精度も上がりそうで、接戦数を減らせそう
    • つまり全体的に良い予想となりそう

比例代表の分析(今後追記予定)

データを打ち込む

表現の分析

使われた表現を分類する

表現と議席数の関係を調べる

今回用いる分類

各社のデータを分析する

各社のデータを組み合わせ分析する

各社平均を使う手法の予想精度を交差検証で確認する

比例代表のまとめ

感想

  • 予測・戦略投票の材料が集まったので良かった
  • 情勢調査と実際の結果は意外と違ったりする(各社平均-1から1の間であれば結果は意外と分からない)
    • 東京18区や神奈川6区は情勢調査と結果が大きく違った
  • 激戦の順番だけで当選確率が70%と30%に変化するのは予想外だった
    • 読者に分かりにくすぎないか(わざと?)
  • データの入力が1番つらい
    • 小選挙区936人×8回+比例代表11ブロック×7政党×4社のデータを打ち込む必要があった
    • どっか打ち間違えてそう
  • 自然言語クラスタリング分からなすぎる(分からなさすぎて適当にしてしまった/比例の話(今後追記予定))
  • 回帰の入り口を実践しただけだが、統計学/機械学習の奥深さをちら見できた
  • 事前にある程度予想がついてしまうが、有権者としては自分の一票で当落が決まる感が無いので面白くない
    • 予想する側としては当てたいのだが、当たったら当たったで選挙への関心を下げてしまう気がする
    • 個人的には自分の一票が議席を動かしてる感が大事だと思うのだが……

セルフツッコミ

  • カテゴリーデータを数量データに変換したのは適当すぎないか
    • でもうまくいってるように見えるし……
    • というよりダミー変数を使う方法があまりうまくいかなかった
  • 小選挙区における文言の区分は適切なのだろうか
    • でもあの区分できれいなグラフが出るということはそんなに悪くないのだろうか
  • 同じ選挙区で出馬する候補者のデータ間には相関関係があるはず→本来はモデリングに組み込むべき
    • 違う選挙区に出ている同じ政党の候補者にも相関関係がありそう→それもモデリングすべき
    • というか本当はちゃんと統計モデリングをしてベイズ統計に持っていくべきなのかもしれない
    • ただ簡易的には単純な線形回帰&ロジスティック回帰でも意外と良さげ?

参考文献