桜の満開を予測する③(ランダムフォレストとLSTMの改善ができるかの検証)

スポンサーリンク
tech系(python)

はじめに

前回までにランダムフォレストとLSTMで学習を行い、桜の満開を予測しました。

  • ランダムフォレストの結果は2日~11日の誤差
  • LSTMの結果は3日~10日の誤差

でした。

最終的に目指すこと

満開直前までのデータで満開を予測できてもあまり意味なので、最終的には2月までの情報から満開の時期を予測したりできたら理想ですね。

改善検証

まず、実際の満開の日は以下のようになっています。

2020-03-22
2021-03-22
2022-03-27
2023-03-22
2024-04-04

ランダムフォレスト

では、ランダムフォレストの特徴量の期間を変えてみます。

3月までで平均

3月までの平均の値を特徴量としてランダムフォレストを行うと、以下のような結果になります。

2020年の予測満開日: 2020-03-24
2021年の予測満開日: 2021-03-25
2022年の予測満開日: 2022-03-27
2023年の予測満開日: 2023-03-25
2024年の予測満開日: 2024-03-24
  • 2020年:2日の誤差
  • 2021年:3日の誤差
  • 2022年:0日の誤差
  • 2023年:3日の誤差
  • 2024年:11日の誤差

前回もそうでしたが、2024年が結構ずれますね。

しかし、誤差が0日の年があるのはアツいですね。

2月までで平均

2月までの平均の値を特徴量としてランダムフォレストを行うと、以下のような結果になります。

2020年の予測満開日: 2020-03-26
2021年の予測満開日: 2021-03-27
2022年の予測満開日: 2022-03-29
2023年の予測満開日: 2023-03-28
2024年の予測満開日: 2024-03-26
  • 2020年:4日の誤差
  • 2021年:5日の誤差
  • 2022年:2日の誤差
  • 2023年:6日の誤差
  • 2024年:9日の誤差

3月の平均より全体的に精度が落ちたように思えます。

LSTM

次にLSTMの値を変更して再学習させてみます。

LSTMはシーケンス長を変更させます。

前回実施した際のシーケンス長は110日でした。

75日

1つ目は75日。

2ヶ月と2週間ぐらいですね。

結果は以下のようになりました。

2020年の予測満開日: 2020-03-29
2021年の予測満開日: 2021-03-20
2022年の予測満開日: 2022-03-29
2023年の予測満開日: 2023-03-21
2024年の予測満開日: 2024-03-27

誤差は以下のようになっています。

  • 2020年:7日の誤差
  • 2021年:2日の誤差
  • 2022年:2日の誤差
  • 2023年:1日の誤差
  • 2024年:8日の誤差

ちなみに学習が終了したタイミングでのエポック数と損失関数は以下。

Early stopping at epoch 703, loss: 0.0495

60日

次はLSTMのシーケンス長を60日にします。

2ヶ月ぐらい。

結果は以下です。

2020年の予測満開日: 2020-03-23
2021年の予測満開日: 2021-03-29
2022年の予測満開日: 2022-03-30
2023年の予測満開日: 2023-03-24
2024年の予測満開日: 2024-03-30

実測値との差は

  • 2020年:1日の誤差
  • 2021年:7日の誤差
  • 2022年:3日の誤差
  • 2023年:2日の誤差
  • 2024年:5日の誤差

となります。

学習が終了したタイミングでのエポック数と損失関数は以下。

Early stopping at epoch 654, loss: 0.0473

45日

最後にシーケンス長を45日とします。

結果は以下です。

2020年の予測満開日: 2020-03-28
2021年の予測満開日: 2021-03-30
2022年の予測満開日: 2022-04-05
2023年の予測満開日: 2023-04-01
2024年の予測満開日: 2024-03-26

実測値との差は

  • 2020年:6日の誤差
  • 2021年:8日の誤差
  • 2022年:9日の誤差
  • 2023年:10日の誤差
  • 2024年:9日の誤差

となります。

学習が終了したタイミングでのエポック数と損失関数は以下。

Early stopping at epoch 864, loss: 0.0431

💡💡💡

結果として、一番誤差が少なかったのは60日でした。

だいたい、2月の終わりごろまでのデータを使えば満開は予測できそうです。

最後に

ランダムフォレストよりもLSTMの方がいい結果が出て、その中でも年初から60日間の値を使った学習が一番いい予測ができました。

ありがたいことに、2月の終わりごろには満開の日を予測できるので、桜の旅の予定を立てることができそうです。

ただし、誤差は1日~7日あるので、まだ精度を上げる余地はありそうです。

タイトルとURLをコピーしました