SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現場のAIエンジニアから学ぶ「時系列データの予測モデルの作り方」

ディープラーニングによる時系列データ予測モデル――精度を高める2つの方法とは?

現場のAIエンジニアから学ぶ「時系列データの予測モデルの作り方」 第3回


(2)位置ラグを利用する

 題材としている都道府県ごとの月次転入者数予測について、説明変数データを増やすもう1つの方法を紹介します。

 この題材の特徴は、データのキー項目として時間情報(実装上の変数名は日時:datetime)以外に位置情報(都道府県:prefecture)を使っていることです。このため、ラグの概念を時間情報だけでなく位置情報に拡大することができます。下図3は位置情報にラグの概念を適用するイメージです。

 これまでの予測モデルでは、鹿児島県の予測には鹿児島県のデータしか使用していません。これを「隣の県のデータも説明変数として使う」ようにします。これは、例えば鹿児島県の転入者数は、前月の宮崎県の転出者数も影響している、というような仮説を立てていることになります。

位置ラグ追加の実装

 位置ラグデータの追加処理でも、pandas.DataFrame()に実装されたshift()関数を使用しています。下のコードでは、時間ラグの処理では全データ(df_all)を都道府県(prefecture)ごとに分割し時間をキーとして並べた暫定データ(df_tmp)に対してラグを取っていました。一方、今回の位置ラグの処理では全データを時間(datetime)ごとに分割して都道府県ID(prefecture_id)をキーとして並べた暫定データに対してラグを取っています。

### データの前処理(3-2):位置ラグデータ化
df_all_loclag = df_all_lag.merge(df_pid, how='left')
df_list = []
for k_datetime in df_all_loclag['datetime'].unique():
    df_tmp = df_all_loclag[df_all_loclag['datetime'] == k_datetime]
    df_tmp = df_tmp.shift(1)
    df_list.append(df_tmp)
df_all_loclag1 = pd.concat(df_list)
df_all_loclag1.rename(columns=lambda x: x + '_loclag1', inplace=True)
df_all_loclag = pd.concat([df_all_loclag, df_all_loclag1.iloc[:,2:24]], axis=1)
df_all_loclag.dropna(inplace=True)
df_all_loclag.drop(['prefecture_id', 'prefecture_id_loclag1', 'mig_in_loclag1'], axis=1, inplace=True)
df_all_loclag.reset_index(drop=True, inplace=True)

位置ラグ追加の結果確認

 ディープラーニングを実行して作成したモデルにより出力される予測結果を見てみます。以下は鹿児島県の例です。実際の転入者数(mig_in)とモデルが予測した転入者数(mig_in_pred)を出力しています。

 この結果だけから見た評価として、前回記事で挙げた問題点として予測値のピーク値(最大値:5998)の追従はある程度改善が見えますが、ピーク時期の問題は改善できておらず、全体としては下振れ(実績値に対して予測値が下回る)が大きくなっているように見えます。これは、鹿児島県より宮崎県の方が全体的にデータの値が小さくその影響を受けているのではないか、と考えることができます。

 実は今回の実装例では、簡易に作成したために現実的に考えると好ましくない点が幾つかあります。都道府県IDを用いてIDが1つ手前を隣の県、として実装していますが、例えば神奈川県のIDは14、新潟県のIDは15ですがこれらの県は、現実では隣接していません。また、北海道のIDは1でありIDが0の県はないため北海道については予測モデルに含めることができていません。これらは、改善が必要な課題となっています。

 位置ラグの活用方法については他に、例えばデータにおける位置情報の定義が地図上のマス目で区切った範囲であった場合、該当マスから1マスずれた位置をラグ1、2マスずれた位置をラグ2、…などとして扱う方法が考えられます。

 今回は時系列データ予測におけるモデルの表現力を増す方法の例として、時間ラグや位置ラグの活用という方法を紹介しました。次回は、最終回としてこれまでの試行を振り返り、これまでに取り上げていない問題点とその対応方法や、著者の経験から他にも起きやすい問題の事例を「時系列データ予測に起こりがちな問題とは?」と題して紹介します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
現場のAIエンジニアから学ぶ「時系列データの予測モデルの作り方」連載記事一覧

もっと読む

この記事の著者

阪本 正樹(NTTテクノクロス)(サカモト マサキ)

NTTテクノクロス株式会社 IoTイノベーション事業部 第一ビジネスユニット所属。NTT研究所内でのビッグデータ活用の研究開発に従事し、2012年から顧客企業でのビッグデータ活用、AI技術活用に取組む。NTTテクノクロスでは人にやさしい「みらい」を作るAIファースト活動を拡大中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/12204 2020/12/14 19:52

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー