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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。