step_woe()
創建配方步驟的規範,該步驟將根據針對二進製結果的證據權重將名義數據轉換為其數值轉換。
用法
step_woe(
recipe,
...,
role = "predictor",
outcome,
trained = FALSE,
dictionary = NULL,
Laplace = 1e-06,
prefix = "woe",
keep_original_cols = FALSE,
skip = FALSE,
id = rand_id("woe")
)
參數
- recipe
-
一個菜譜對象。該步驟將添加到此配方的操作序列中。
- ...
-
一個或多個選擇器函數用於選擇將使用哪些變量來計算組件。有關更多詳細信息,請參閱
selections()
。對於tidy
方法,當前未使用這些。 - role
-
對於此步驟創建的模型項,應為它們分配什麽分析角色?默認情況下,該函數假設由原始變量創建的新 woe 分量列將用作模型中的預測變量。
- outcome
-
vars()
中包含的二進製結果的裸名稱。 - trained
-
指示預處理數量是否已估計的邏輯。
- dictionary
-
一表格。等級和痛苦值的Map。它必須具有與
dictionary()
返回的輸出相同的布局。如果 `NULL`` 該函數將構建一個字典,並將這些變量傳遞給...
。有關詳細信息,請參閱dictionary()
。 - Laplace
-
拉普拉斯平滑參數。通常用於避免來自隻有一個結果類別的預測變量類別的 -Inf/Inf 的值。設置為 0 以允許 Inf/-Inf。默認值為 1e-6。也稱為拉普拉斯平滑技術的 'pseudocount' 參數。
- prefix
-
將作為結果新變量的前綴的字符串。請參閱下麵的注釋。
- keep_original_cols
-
將原始變量保留在輸出中的邏輯。默認為
FALSE
。 - skip
-
一個合乎邏輯的。當
recipes::bake()
烘焙食譜時是否應該跳過此步驟?雖然所有操作都是在recipes::prep()
運行時烘焙的,但某些操作可能無法對新數據進行(例如處理結果變量)。使用skip = TRUE
時應小心,因為它可能會影響後續操作的計算 - id
-
該步驟特有的字符串,用於標識它。
細節
WoE 是一組變量的轉換,可產生一組新的特征。公式為
其中 從給定名義預測變量 的 1 到 級別。
這些組件旨在將名義變量轉換為數值變量,其順序和大小反映了與二元結果的關聯。要將其應用於數值預測變量,建議在運行 WoE 之前對變量進行離散化。在這裏,每個變量都將被二值化,以便稍後關聯災難。這可以通過使用 step_discretize()
來實現。
參數 Laplace
是添加到 1 和 0 比例的一個小量,目的是避免 log(p/0) 或 log(0/p) 結果。數字 woe 版本的名稱以 woe_
開頭,後跟變量各自的原始名稱。參見《好》(1985)。
可以將自定義 dictionary
tibble 傳遞給 step_woe()
。它必須具有與 dictionary()
的輸出相同的結構(參見示例)。如果未提供,它將自動創建。該 tibble 的作用是存儲名義預測變量級別與其 woe 值之間的映射。您可能想要調整此對象,以修複一個給定預測變量的級別之間的順序。一種簡單的方法是調整從 dictionary()
返回的輸出。
整理
當您 tidy()
這一步時,會出現一個包含列 terms
(選擇的選擇器或變量) value
、 n_tot
、 n_bad
、 n_good
、 p_bad
、 p_good
、 woe
和返回outcome
。有關詳細信息,請參閱dictionary()
。
參考
庫爾貝克,S.(1959)。信息論和統計學。紐約威利。
Hastie, T.、Tibshirani, R. 和 Friedman, J. (1986)。統計學習的要素,第二版,Springer,2009 年。
Good, I. J. (1985),“證據權重:簡要調查”,貝葉斯統計,2,第 249-270 頁。
例子
library(modeldata)
data("credit_data")
set.seed(111)
in_training <- sample(1:nrow(credit_data), 2000)
credit_tr <- credit_data[in_training, ]
credit_te <- credit_data[-in_training, ]
rec <- recipe(Status ~ ., data = credit_tr) %>%
step_woe(Job, Home, outcome = vars(Status))
woe_models <- prep(rec, training = credit_tr)
#> Warning: Some columns used by `step_woe()` have categories with less than 10 values: 'Home', 'Job'
# the encoding:
bake(woe_models, new_data = credit_te %>% slice(1:5), starts_with("woe"))
#> # A tibble: 5 × 2
#> woe_Job woe_Home
#> <dbl> <dbl>
#> 1 -0.451 0.519
#> 2 0.187 -0.512
#> 3 -0.451 -0.512
#> 4 0.187 -0.512
#> 5 1.51 -0.0519
# the original data
credit_te %>%
slice(1:5) %>%
dplyr::select(Job, Home)
#> Job Home
#> 1 fixed rent
#> 2 freelance owner
#> 3 fixed owner
#> 4 freelance owner
#> 5 partime parents
# the details:
tidy(woe_models, number = 1)
#> # A tibble: 12 × 10
#> terms value n_tot n_bad n_good p_bad p_good woe outcome id
#> <chr> <chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
#> 1 Job fixed 1261 273 988 0.451 0.708 -0.451 Status woe_…
#> 2 Job freelan… 463 159 304 0.263 0.218 0.187 Status woe_…
#> 3 Job others 74 39 35 0.0645 0.0251 0.944 Status woe_…
#> 4 Job partime 201 133 68 0.220 0.0487 1.51 Status woe_…
#> 5 Job NA 1 1 0 0.00165 0 14.7 Status woe_…
#> 6 Home ignore 8 4 4 0.00661 0.00287 0.835 Status woe_…
#> 7 Home other 161 78 83 0.129 0.0595 0.773 Status woe_…
#> 8 Home owner 931 192 739 0.317 0.530 -0.512 Status woe_…
#> 9 Home parents 336 98 238 0.162 0.171 -0.0519 Status woe_…
#> 10 Home priv 113 42 71 0.0694 0.0509 0.310 Status woe_…
#> 11 Home rent 446 188 258 0.311 0.185 0.519 Status woe_…
#> 12 Home NA 5 3 2 0.00496 0.00143 1.24 Status woe_…
# Example of custom dictionary + tweaking
# custom dictionary
woe_dict_custom <- credit_tr %>% dictionary(Job, Home, outcome = "Status")
woe_dict_custom[4, "woe"] <- 1.23 # tweak
# passing custom dict to step_woe()
rec_custom <- recipe(Status ~ ., data = credit_tr) %>%
step_woe(
Job, Home,
outcome = vars(Status), dictionary = woe_dict_custom
) %>%
prep()
#> Warning: Some columns used by `step_woe()` have categories with less than 10 values: 'Home', 'Job'
rec_custom_baked <- bake(rec_custom, new_data = credit_te)
rec_custom_baked %>%
dplyr::filter(woe_Job == 1.23) %>%
head()
#> # A tibble: 6 × 14
#> Seniority Time Age Marital Records Expenses Income Assets Debt
#> <int> <int> <int> <fct> <fct> <int> <int> <int> <int>
#> 1 0 48 41 married no 90 80 0 0
#> 2 0 18 21 single yes 35 50 0 0
#> 3 0 36 23 single no 45 122 2500 0
#> 4 14 24 51 married no 75 198 1000 0
#> 5 1 60 26 single no 35 120 0 0
#> 6 1 36 24 married no 76 164 0 0
#> # ℹ 5 more variables: Amount <int>, Price <int>, Status <fct>,
#> # woe_Job <dbl>, woe_Home <dbl>
相關用法
- R embed step_umap 有監督和無監督均勻流形逼近和投影 (UMAP)
- R embed step_pca_truncated 截斷的 PCA 信號提取
- R embed step_lencode_glm 使用似然編碼將監督因子轉換為線性函數
- R embed step_pca_sparse 稀疏PCA信號提取
- R embed step_lencode_bayes 使用貝葉斯似然編碼將監督因子轉換為線性函數
- R embed step_collapse_stringdist 使用 stringdist 的折疊因子級別
- R embed step_collapse_cart 因子水平的監督崩潰
- R embed step_discretize_xgb 使用 XgBoost 離散數值變量
- R embed step_pca_sparse_bayes 稀疏貝葉斯 PCA 信號提取
- R embed step_lencode_mixed 使用貝葉斯似然編碼將監督因子轉換為線性函數
- R embed step_embed 將因子編碼到多列中
- R embed step_discretize_cart 使用 CART 離散數值變量
- R embed step_feature_hash 通過特征哈希創建虛擬變量
- R embed dictionary 證據權重詞典
- R embed is_tf_available 測試一下tensorflow是否可用
- R embed add_woe 在 DataFrame 中添加 WoE
- R SparkR eq_null_safe用法及代碼示例
- R SparkR except用法及代碼示例
- R SparkR explain用法及代碼示例
- R SparkR exceptAll用法及代碼示例
- R dtrMatrix-class 三角形稠密數值矩陣
- R vcov.gam 從 GAM 擬合中提取參數(估計器)協方差矩陣
- R gam.check 擬合 gam 模型的一些診斷
- R ggplot2 annotation_logticks 注釋:記錄刻度線
- R matrix轉list用法及代碼示例
注:本文由純淨天空篩選整理自Max Kuhn等大神的英文原創作品 Weight of evidence transformation。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。