機械学習モデルで、月や時間などの機能を係数または数値としてエンコードする方が良いでしょうか?
一方で、時間は順方向に進行するプロセスであるため(5か月後に6か月が経過するため)、数値エンコードは合理的であると感じますが、一方で、周期的性質のためにカテゴリーエンコードがより合理的であると思います年と日(12番目の月の後に最初の月が続きます)。
これに一般的な解決策や慣習はありますか?
機械学習モデルで、月や時間などの機能を係数または数値としてエンコードする方が良いでしょうか?
一方で、時間は順方向に進行するプロセスであるため(5か月後に6か月が経過するため)、数値エンコードは合理的であると感じますが、一方で、周期的性質のためにカテゴリーエンコードがより合理的であると思います年と日(12番目の月の後に最初の月が続きます)。
これに一般的な解決策や慣習はありますか?
回答:
時刻変数の(サイン、コサイン)変換を追加することを検討しましたか?これにより、たとえば、0時間と23時間が互いに近くなり、変数の周期的な性質が透けて見えるようになります。
(詳細)
答えは、時間フィーチャとターゲット変数の間で表す関係の種類によって異なります。
時間を数値としてエンコードすると、モデルに特定の制限が課せられます。線形回帰モデルの場合、時間の効果は単調になり、ターゲットは時間とともに増加または減少します。決定木の場合、互いに近い時間値はグループ化されます。
時間をカテゴリカルとしてエンコードすると、モデルの柔軟性が向上しますが、場合によっては、学習するのに十分なデータがモデルにない場合があります。有用なテクニックの1つは、時間値をいくつかのセットにグループ化し、そのセットをカテゴリ属性として使用することです。
グループ化の例:
上記のそれぞれは、十分なデータがあれば、カテゴリー属性としても直接使用できます。さらに、データ分析によってグループ化を発見し、ドメイン知識ベースのアプローチを補完することもできます。
使用しているアルゴリズムによって異なります。
ランダムフォレストのようなツリーベースのアルゴリズムを使用している場合は、この質問に合格してください。カテゴリベースのエンコードは、ツリーベースのアルゴリズムには必要ありません。
ニューラルネットワークのような他のアルゴリズムについては、両方の方法(連続&カテゴリー)を試すことをお勧めします。効果は状況によって異なります。
@raghuが提供する答えを言い換えます。カテゴリと数値の特徴の大きな違いの1つは、数値の大きさが比較できるかどうか、つまり2019年が2018年よりも大きいか、12月(12)が3月(3)よりも大きいかどうかです。あんまり。これらの数字には順番がありますが、大きさは比較できません。したがって、カテゴリー値への変換はより意味があります。