時間情報抽出(三角関数バージョン)
活用シーン
周期性を考慮しつつ時間情報を特徴量に入れたい場合に有用です。
一方で、今回ご紹介する三角関数を用いた時間情報抽出では、周期性を考慮して時間情報を追加することができます。これにより、モデルがより正確に時間情報を考慮した予測を行えることが期待できます。
例えば「月」に関する情報を特徴量に入れるケースにおいて、三角関数を用いる場合と用いない場合では、図にすると以下のような差があります。

三角関数を用いずそのまま抽出する場合(左図)、時間情報は1個の数値に変換されます。例えば「1月」は「1」に、「2月」は「2」に、…「12月」は「12」に、という流れです。このとき、「12月」と「1月」は1ヶ月しか離れていないにもかかわらず大きな違いがあるかのように扱われてしまいます。
一方で、三角関数を用いて抽出する場合(右図)、時間情報は2個の数値の組に変換されます。そして、その組が、ちょうど円周上の等間隔にある座標に対応しています。したがって、全ての月に対応する座標が等距離にあり、それぞれの情報を対等に扱えていることが分かります。
動作上の注意点
選択した時間情報について、それぞれ以下のカラムが追加されます。
時間情報 | 追加されるカラム名 |
---|---|
月 | 時刻カラム名 + “_month_sin” 時刻カラム名 + “_month_cos” |
曜日 | 時刻カラム名 + “_day_of_week_sin” 時刻カラム名 + “_day_of_week_cos” |
日 | 時刻カラム名 + “_day_of_month_sin” 時刻カラム名 + “_day_of_month_cos” |
時間 | 時刻カラム名 + “_hour_sin” 時刻カラム名 + “_hour_cos” |
分 | 時刻カラム名 + “_minute_sin” 時刻カラム名 + “_minute_cos” |
秒 | 時刻カラム名 + “_second_sin” 時刻カラム名 + “_second_cos” |
入出力の例
入力
time |
2011-01-01 00:00 |
2011-01-01 01:00 |
2011-01-01 02:00 |
2011-01-01 03:00 |
2011-01-01 04:00 |
2011-01-01 05:00 |
2011-01-01 06:00 |
2011-01-01 07:00 |
2011-01-01 08:00 |
2011-01-01 09:00 |
2011-01-01 10:00 |
2011-01-01 11:00 |
2011-01-01 12:00 |
出力
time | time_hour_sin | time_hour_cos | time_minute_sin | time_minute_cos |
2011-01-01 00:00 | 0.0 | 1.0 | 0.0 | 1.0 |
2011-01-01 01:00 | 0.25881904 | 0.9659258 | 0.0 | 1.0 |
2011-01-01 02:00 | 0.5 | 0.8660254 | 0.0 | 1.0 |
2011-01-01 03:00 | 0.70710677 | 0.70710677 | 0.0 | 1.0 |
2011-01-01 04:00 | 0.8660254 | 0.5 | 0.0 | 1.0 |
2011-01-01 05:00 | 0.9659258 | 0.25881904 | 0.0 | 1.0 |
2011-01-01 06:00 | 1.0 | 0.0 | 0.0 | 1.0 |
2011-01-01 07:00 | 0.9659258 | -0.25881904 | 0.0 | 1.0 |
2011-01-01 08:00 | 0.8660254 | -0.5 | 0.0 | 1.0 |
2011-01-01 09:00 | 0.70710677 | -0.70710677 | 0.0 | 1.0 |
2011-01-01 10:00 | 0.5 | -0.8660254 | 0.0 | 1.0 |
2011-01-01 11:00 | 0.25881904 | -0.9659258 | 0.0 | 1.0 |
2011-01-01 12:00 | 0.0 | -1.0 | 0.0 | 1.0 |