機械学習を用いて衆議院の解散日を予測

ニュースで衆議院の解散はいつ?みたいなことを取り上げていたので、機械学習を使って衆議院の解散の日を予測してみることにしました。

これはあくまで一種の遊びなので、本当に次の衆議院の解散を正確に予測できるわけではないのでご了承ください。

まずは過去の平成以降の衆議院の解散日をリストアップします。昭和のデータもあったのですが、今回は除外いたしました。

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# 平成以降の衆議院解散日
release_dates = pd.to_datetime([
    '1990-01-24',
    '1993-06-18',
    '1996-09-27',
    '2000-06-02',
    '2003-10-10',
    '2005-08-08',
    '2009-07-21',
    '2012-11-16',
    '2014-11-21',
    '2017-09-28',
    '2021-10-14',
])

次に、これらの発売日をUNIXタイム(1970年1月1日からの経過秒数)に変換します。これにより、日付を数値データとして扱うことができます。

# UNIXタイムに変換
release_dates_unix = release_dates.astype(np.int64) // 10**9

さて、予測モデルの選択ですが、今回は多項式回帰を使用します。多項式回帰は、特徴量の非線形組み合わせを考慮することで、単純な線形回帰よりも複雑なデータパターンを捉えることが可能です。

# 2次の多項式特徴を生成
poly = PolynomialFeatures(degree=2)

# データのインデックス(0から始まる連続した整数)を2次の多項式に変換
indices = np.array(range(len(release_dates_unix))).reshape(-1, 1)
indices_poly = poly.fit_transform(indices)

# 線形回帰モデルを作成
model_poly = LinearRegression()

# モデルを多項式特徴に適合
model_poly.fit(indices_poly, release_dates_unix)

最後に、この多項式回帰モデルを使って次回の衆議院の解散の日を予測します。

# 次の解散日のインデックスを多項式に変換
next_index_poly = poly.transform(np.array([[len(release_dates_unix)]]))

# 次の解散日を予測
next_timestamp_poly = model_poly.predict(next_index_poly)

# UNIXタイムスタンプを日付に変換
next_date_poly = pd.to_datetime(next_timestamp_poly[0], unit='s')

print('次の衆議院解散予測(多項式回帰): ', next_date_poly.date())

以上でコードは完成です!これにより多項式回帰モデルによる次回の衆議院の解散の日の予測が得られます。

ではプログラムを起動します。結果は!

$ 次の衆議院解散予測日(多項式回帰):  2023-12-30

2023年12月30日(土)とのことでした。年末年始なので確率低そうです。。

しかしながら、なんとか予測できました。

これはあくまで予測であり、実際の衆議院の解散の日がこの通りになるとは限りません。しかし、データ分析という視点から見れば、過去の解散日のパターンから未来を予測するという試み自体が非常に興味深いですね。

ここまで、お読みくださりありがとうございました!