我們已探索如何將原始資料對應至合適的特徵向量,但這只是這項作業的一部分。現在,我們必須探索哪些類型的值 能夠確實讓這些特徵向量中的強大特徵
避免使用很少使用的離散特徵值
良好特徵值在資料集中應出現超過 5 次以上。這樣可讓模型瞭解這個特徵值與標籤之間的關係。也就是說,擁有多個具有相同獨立值的範例,可讓模型在不同設定中查看該特徵,進而判斷何時適合標籤的預測者。例如,house_type
功能可能包含許多值為 victorian
的範例:
✔This is a good example:house_type: victorian
相反地,如果特徵值只出現一次或很少出現,模型就無法依據該特徵進行預測。舉例來說,unique_house_id
是不良特徵,因為每個值都只能使用一次,因此模型無法從中學習任何資訊:
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」等字串轉換為 one-hot 向量)。
✔This is a good example:city_id: "br/sao_paulo"
不過,收集由其他模型推測的值,會產生額外費用。「219」值目前可能代表 Sao Paulo,但它的表示法在日後執行其他模型時應該很容易改變:
✘The following is an example of a value that could change. This should be avoided.inferred_city_cluster: "219"