名义型自变量

在 R 中使用 tidymodels 建模

David Svancer

Data Scientist

名义型数据

表示特征或分组的数据

  • 无意义的顺序

示例

  • 公司部门

    • 市场、财务、技术
  • 母语

    • 英语、捷克语、西班牙语...
  • 车型

    • SUV、轿车、紧凑型...
在 R 中使用 tidymodels 建模

转换名义型自变量

建模前需将名义型数据转换为数值型 独热编码(One-Hot)

  • 将类别值映射为[0/1]指示变量
  • 原数据每个唯一值对应一个指示变量

 

one_hot_encoding

在 R 中使用 tidymodels 建模

转换名义型自变量

哑变量编码

  • 从原始取值中排除一类
    • 有 n 个不同取值则生成 (n - 1) 个指示变量
  • 建模更常用
    • recipes 包默认采用

 

dummy_encoding

在 R 中使用 tidymodels 建模

线索评分数据

名义型自变量——lead_sourceus_location

leads_training
# A tibble: 996 x 7
 purchased total_visits total_time pages_per_visit total_clicks lead_source   us_location
   <fct>      <dbl>      <dbl>          <dbl>          <dbl>      <fct>          <fct>
 1 yes         7         1148           7              59       direct_traffic    west
 2 no          5         228            2.5            25       email             southeast
 3 no          7         481            2.33           21       organic_search    west
 4 no          4         177            4              37       direct_traffic    west
 5 no          2         1273           2              26       email             midwest
# ... with 991 more rows
在 R 中使用 tidymodels 建模

创建哑变量

step_dummy() 函数

  • 将名义型自变量转换为哑变量
recipe(purchased ~ ., data = leads_training) %>%

step_dummy(lead_source, us_location) %>%
prep(training = leads_training) %>%
bake(new_data = leads_test)
# A tibble: 332 x 12
   total_visits ... lead_source_email  lead_source_organic_search  lead_source_direct_traffic  us_location_southeast ... us_location_west
       <dbl>    ...      <dbl>                 <dbl>                      <dbl>                       <dbl>                     <dbl>
1        8      ...         0                    0                          1                          0                        1
2        4      ...         0                    0                          1                          0                        0
3        3      ...         0                    1                          0                          0                        1
4        2      ...         1                    0                          0                          0                        0
5        9      ...         0                    0                          1                          0                        1

# ... with 327 more rows
在 R 中使用 tidymodels 建模

按类型选择列

使用 all_nominal()all_outcomes() 按列类型选择

  • -all_outcomes() 排除名义型因变量 purchased
recipe(purchased ~ ., data = leads_training) %>%

step_dummy(all_nominal(), -all_outcomes()) %>%
prep(training = leads_training) %>%
bake(new_data = leads_test)
# A tibble: 332 x 12
   total_visits ... lead_source_email  lead_source_organic_search  lead_source_direct_traffic ... us_location_west
       <dbl>    ...      <dbl>                 <dbl>                      <dbl>                           <dbl>
1        8      ...         0                    0                          1                                 1
2        4      ...         0                    0                          1                                 0
3        3      ...         0                    1                          0                                 1
4        2      ...         1                    0                          0                                 0
5        9      ...         0                    0                          1                                 1
# ... with 327 more rows
在 R 中使用 tidymodels 建模

预处理名义型自变量

R 中的建模引擎

  • 许多引擎会自动创建哑变量
    • 可直接使用名义型自变量,无需先用 step_dummy() 预处理
  • 不同引擎不一致
    • 独热编码 vs 哑变量
    • 新变量命名方式

 

recipes 包提供标准化方法来准备名义型自变量以用于建模

在 R 中使用 tidymodels 建模

Passons à la pratique !

在 R 中使用 tidymodels 建模

Preparing Video For Download...