元データを適切な特徴ベクトルにマッピングする方法を説明してきましたが、これは取り組みの一部にすぎません。次に、それらの特徴ベクトル内で実際に良い特徴となる値の種類を調べる必要があります。
使用頻度の低い個別の特徴値を避ける
良好な特徴値は、データセットに 5 回以上出現する必要があります。これにより、この特徴値がラベルとどのように関連しているかをモデルが学習できるようになります。つまり、同じ個別の値を持つ多くのサンプルがあると、モデルは異なる設定で特徴を確認し、ラベルの適切な予測子であるかどうかを判断できます。たとえば、house_type
特徴には、値が victorian
である例が多数含まれている可能性があります。
✔This is a good example:house_type: victorian
逆に、特徴の値が 1 回だけ表示される場合、またはほとんど出現しない場合、モデルはその特徴に基づいて予測を行うことができません。たとえば、unique_house_id
は、各値が 1 回だけ使用され、モデルがそこから何も学習できないため、不適切な特徴です。
The following is an example of a unique value. This should be avoided.✘unique_house_id: 8SK982ZZ1242Z
明確でわかりやすい意味を好む
各機能は、プロジェクトのすべてのユーザーにとって明確でわかりやすい意味を持つ必要があります。たとえば、次の優れた対象物にははっきり名前が付いており、その名前については意味をなしています。
✔The meaning of the following value is clear from the label and value.house_age_years: 27
逆に、次の特徴値の意味は、それを作成したエンジニア以外は解読できません。
✘The following is an example of a value that is unclear. This should be avoidedhouse_age: 851472000
場合によっては、ノイズの多いデータ(不適切なエンジニアリング選択ではなく)が原因で、値が不明瞭になることがあります。たとえば、次の user_age_years は、適切な値を確認していないソースから取得されています。
✘The following is an example of noisy/bad data. This should be avoided.user_age_years: 277
「マジック」な値を実際のデータと混同しない
適切な浮動小数点特徴には、範囲外の不連続性や「魔法」の値は含まれません。たとえば、特徴が 0 ~ 1 の浮動小数点値を保持するとします。そのため、次のような値は問題ありません。
✔The following is a good example:quality_rating: 0.82 quality_rating: 0.37
ただし、ユーザーが quality_rating
を入力しなかった場合は、次のようなマジック値で、データセットが存在しないことを表す可能性があります。
✘The following is an example of a magic value. This should be avoided.quality_rating: -1
マジック値を明示的にマークするには、quality_rating
が指定されているかどうかを示すブール値を作成します。このブール値の特徴に is_quality_rating_defined
などの名前を付けます。
元の特徴で、マジック値を次のように置き換えます。
- 有限の値のセットを取る変数(離散変数)の場合は、そのセットに新しい値を追加し、それを使用して特徴値が欠落していることを示します。
- 連続変数の場合は、特徴のデータの平均値を使用して、欠損値がモデルに影響しないようにします。
アップストリームの不安定性を考慮する
特徴の定義は、時間の経過とともに変化してはなりません。たとえば、次の値は都市名がおそらく変更されないため、便利です。(「br/sao_paulo」のような文字列はワンホット ベクトルに変換する必要があります)。
✔This is a good example:city_id: "br/sao_paulo"
ただし、別のモデルから推測される値を収集すると、追加コストが発生します。おそらく値「219」は現在サンパウロを表しますが、この表現は今後他のモデルを実行すると簡単に変更される可能性があります。
✘The following is an example of a value that could change. This should be avoided.inferred_city_cluster: "219"