つくるって楽しい

主にpythonとか。画像処理とか。

機械学習で桜の開花日を予想してみた

機械学習で予想した東京の開花日は3月25日でした。3月10日までの気象情報から推測しています。
今年は比較的暖冬で例年(平均:3月26日)より早めでしょうと言われているので、それを反映できていると思います。ちなみに、weathermap[1]の予想日は3月23日でした。(3月14日現在)

方法

気象庁公開の気象データ[2]、さくらの開花日データ[3]を使います。
気象データは任意の観測地、観測期間、観測値を指定してcsv形式で入手することが出来ます。今回は、以下の条件の観測データを学習に使用しました。

  • 観測地点:東京、銚子、甲府、熊谷、水戸、長野、名古屋、静岡、津、宇都宮、横浜の11地点
  • 期間:2000年~2018年までの18年分
  • 観測値:平均気温、最高気温、降水量の合計、日照時間、最深積雪、降雪量の合計、平均風速、最大風速、最大瞬間風速、平均蒸気圧、平均湿度、最小相対湿度、平均現地気圧、平均海面気圧、最低海面気圧、平均雲量、10分間降水量の最大の17つ
  • 観測間隔:毎日

さくら開花前年の4月1日~3月10日までの345日分のデータを使って学習します。

  • 1データあたりの特徴量数は、345(日数)x17(観測値の数)=5865となります。
  • 全データ数は、11(観測地点数)x18(観測年数)=198です。

学習にはランダムフォレストを使用しました。これはランダムに特徴量を選択しデータの予測を行う決定木を作成する方法です。単純な決定木よりもノイズに強いという特徴があります。また、学習の副産物として、どの特徴量が決定木の構成によく使われたのか知ることが出来るので、学習後にデータの分析をするのに役立ちます。

データの前処理

  • 観測値が空白の日について、1日後の値で補完しました。
  • さくらの開花日は、1月1日を0として0-364で数値化しました。
  • 2月29日はデータから除外しました。
  • 各特徴量は学習データの最大値、最小値で0-1に正規化しました。

学習結果のバリデーション

方法の良し悪しをクロスバリデーションで評価します。
クロスバリデーションでは、学習に使用するデータを分割して学習・予測・評価することを繰り返し、平均的な性能を見ることが出来ます。評価はMAEで行います。

{
MAE = \Sigma {|実際の値 - 予測値|}
\tag{1}
}

これは予測誤差日数の平均ということになります。
比較を行うために、予測結果を過去の平均値とした時のMAEを計算しました。

MAE
過去の平均値 5.36
予測値 2.67

さくらの開花日を過去の平均値として計算する場合5.36日の誤差があるが、予測をすると誤差は2.67日に減少することが分かりました。

ランダムフォレストでは、どの特徴量が予測に有効であるか知ることが出来ます。5865の特徴量のうち上位10個を挙げます。

特徴量名 重要度 重要度の累積値

Ave(tmp)[cels]_day58_2/28	0.21 	0.21 
Ave(tmp)[cels]_day299_10/27	0.04 	0.25 
Ave(tmp)[cels]_day11_1/12	0.04 	0.29 
Ave(tmp)[cels]_day364_12/31	0.02 	0.32 
Max(tmp)[cels]_day10_1/11	0.02 	0.34 
Ave(tmp)[cels]_day60_3/2	0.02 	0.36 
Max(tmp)[cels]_day59_3/1	0.02 	0.38 
Max(tmp)[cels]_day363_12/30	0.02 	0.40 
Ave(humid)[%]_day39_2/9	0.02 	0.41 
Ave(tmp)[cels]_day59_3/1	0.01 	0.42 

Ave(tmp)[cels]..平均気温
Max(tmp)[cels]..最高気温
Ave(humid)[%]..平均湿度

2月28日の平均気温が最も有効な特徴量でした。10分の9が気温に関する特徴量であり、さくらの開花予測には気温が有効であることが分かりました。また、10月以降の気温が開花日に大きく影響するが分かりました。

結果

学習に使用した観測点について今年の開花日を予想しました。
月日は四捨五入で計算しています。東京は82.58->83として3月25日になりました。

地点 開花日(0-364) 開花日(月日)
銚子 83.91 3/26
甲府 81.41 3/23
熊谷 82.42 3/24
水戸 83.9 3/26
長野 93.83 4/05
名古屋 80.97 3/23
静岡 80.44 3/22
東京 82.58 3/25
81.15 3/23
宇都宮 85.32 3/27
横浜 82.73 3/25

参考

[1]さくら開花予想2019, https://sakura.weathermap.jp/
[2]過去の気象データ, https://www.data.jma.go.jp/obd/stats/etrn/
[3]さくらの開花日, https://www.data.jma.go.jp/sakura/data/sakura003_06.html