AIを用いた時系列データ予測-予測モデルの評価
本連載では、時系列データを用いた予測モデルの作成を題材に、その作成方法を前回まで紹介してきました。
AIを用いた新規サービス開発におけるPoC(概念実証)において、このように予測モデルをプロトタイプとして作成した際、AIエンジニアには作成した予測モデルが「どのくらい目標としているサービスに適用できそうか」「どのような特徴・問題があるか」「今後どのくらい拡張・改善できそうか」を評価することが求められます。
連載の最終回となる今回はこれまでに作成した予測モデルを振り返り、時系列データを用いた予測モデルを作成する際に起きやすい問題とその対応方法を、私の経験から紹介します。
時系列データの予測モデルを作成する
本記事で使用したソースコード、データはGitHubで公開しています。記事中では説明を省略した部分のソースコードと使用したデータがあり、実際にマシン上で動かしてみることができます。
- 使用したプログラム言語はPython3、ディープラーニング部分にはPythonパッケージのtensorflow/Kerasを使用
- 各データファイル(CSV)は、政府統計の総合窓口(e-Stat)より「住民基本台帳人口移動報告」「住民基本台帳に基づく人口、人口動態及び世帯数調査」「賃金構造基本統計調査」「工業統計調査」「商用統計調査」を加工して作成
外れ値を予測するときに起きる問題
第1回で扱った「都道府県ごとの年次転入数を予測するモデル」では、鹿児島県における予測モデルが出力する転入者数の予測値(mig_in_pred)が実際の値(mig_in)を追従している様子から、予測モデルとして成立していると紹介しました。
それでは、47都道府県のすべてに対して、このような結果になるのでしょうか。以下は東京都の例です。
東京都においては実績値の平均値408,870に対して予測値の平均値24,870と、予測値は実績値を大幅に下回っています。
以下は都道府県ごとの実績値を箱ひげ図にしたものです。
飛びぬけて大きな値、つまり外れ値となっているのが東京都です。このことから、データ全体から見て外れ値となる部分を予測することは、予測モデルにとって難しいと考えることができます。
もう少し都道府県ごとの実績値データを見てみましょう。以下は都道府県ごとの実績値のヒストグラムです。
都道府県ごとの実績値は、平均値50,849、中央値26,456となっており、上のグラフの形は右に裾の長い分布となっています。
実は、年次データの予測モデルでは、東京都以外でも転入者数(目的変数)がある程度大きい都道府県は実績値の大きさに対して予測値がとても小さく、すべての都道府県に対して予測ができているとは言いがたいモデルとなっていました。
このように、今回題材としたような人の活動や経済的な指標を予測する時系列データ予測では、データの傾向は右に裾の長い分布となることが多く、値が大きく外れ値的な部分の予測が難しい(外れ値について予測値が実績値に対して過少となる)という問題が起きることが多いです。
このような問題に対する代表的な対応方法として、以下2つを紹介します。
- 全体のデータ量を増やすことで、データ量割合が少ない部分もモデルが十分に学習できるようにする。例えば、訓練データの量を5年分から10年分、20年分と増やす。
- モデルを分割することで、予測精度を上げたい部分のデータ量割合を増やす。例えば、都道府県ごとに47個のモデルに分割し、東京都のモデルは東京都だけのデータで学習させる。
ここでは人の活動や経済的な指標の予測では、外れ値に対する予測が難しいことを紹介をしました。この問題は、第2回で紹介した「実績値のピークに対して予測値のピークが追従できていない」という問題と同じ構造です。第2回の「月ごとのデータの偏り」を、今回の「都道府県ごとのデータの偏り」に置き換えられます。このように、問題を同じ構造と捉えることができる場合は、同じ対応方法を試みることができます。
続いて、時系列データ予測に特有の問題を見てみましょう。