数值型预测变量

在 R 中使用 tidymodels 建模

David Svancer

Data Scientist

相关的预测变量

相关性衡量两个数值变量间线性关系的强度

  • 取值范围为 -1 到 1
  • 预测变量高度相关(接近 -1 或 1)时

    • 提供冗余信息
    • 导致建模问题(多重共线性)

     

ggplot(leads_training,
       aes(x = pages_per_visit, y = total_clicks)) + 
  geom_point()  + 
  labs(title = 'Total Clicks vs Average Page Visits',
       y = 'Total Clicks', x = 'Average Pages per Visit')

线索打分数据中,总点击量与每次访问页数的散点图

在 R 中使用 tidymodels 建模

查找相关的预测变量

计算相关矩阵

  • 将数据集传给 select_if() 函数
    • 参数为 is.numeric
  • 再传给 cor() 函数
leads_training %>%

select_if(is.numeric) %>%
cor()
              total_visits total_time pages_per_visit total_clicks
total_visits        1.00       0.01            0.43         0.42
total_time          0.01       1.00            0.02         0.01
pages_per_visit     0.43       0.02            1.00         0.96
total_clicks        0.42       0.01            0.96         1.00
在 R 中使用 tidymodels 建模

处理相关的预测变量

recipes 消除多重共线性

  • recipe() 指定 recipe 对象
  • 传给 step_corr()
    • 添加所有数值列
      • 列名用逗号分隔
    • 设置相关性 threshold
      • 取绝对值
      • 阈值 0.9 会移除 ≥0.9 或 ≤-0.9 的相关性
leads_cor_rec <- recipe(purchased ~ .,
                        data = leads_training) %>%

step_corr(total_visits, total_time, pages_per_visit, total_clicks, threshold = 0.9)
leads_cor_rec
数据配方
输入:
      角色  变量数
     因变量      1
     预测变量    6

操作:
对 total_visits,..., total_clicks 进行相关性过滤
在 R 中使用 tidymodels 建模

按类型选择预测变量

  • all_outcomes()
    • 选择因变量
  • all_numeric()
    • 选择所有数值变量
      • 若因变量为数值型,也会被包含

recipe 步骤选择数值型预测变量

  • all_numeric() 传给 step_*() 函数
  • 若因变量为数值型,同时传入 -all_outcomes()
leads_cor_rec <- recipe(purchased ~ .,
                        data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9)
leads_cor_rec
数据配方
输入:
      角色  变量数
     因变量      1
     预测变量    6

操作:
对 all_numeric() 进行相关性过滤
在 R 中使用 tidymodels 建模

训练并应用配方

  • prep() 训练
    • 提供 leads_training 作为训练集
  • bake() 应用
    • leads_test 中的 pages_per_visit 被移除
    • 之后的所有新数据也会移除 pages_per_visit
leads_cor_rec %>% 

prep(training = leads_training) %>%
bake(new_data = leads_test)
# A tibble: 332 x 6
total_visits total_time total_clicks ... purchased
    <dbl>       <dbl>        <dbl>   ...   <fct>
 1   8          100           24     ...    no
 2   4          1346          22     ...    yes
 3   3          176           27     ...    no
 4   2          16            12     ...    no
 5   9          1022          12     ...    yes
# ... 另有 327 行
在 R 中使用 tidymodels 建模

标准化

对数值变量做中心化与标准化

  • 减去均值
  • 除以标准差
  • 将数据转换为标准差单位
    • 转换后变量均值为 0,标准差为 1

leads_training 中的 total_time 示例

  • 在网站停留 1,273 秒比平均值高 1.19 个标准差

 

对 leads training 中 total_time 做标准化的示例

在 R 中使用 tidymodels 建模

组合数据预处理步骤

recipes 标准化数值型预测变量

  • step_normalize()
    • 传入列名或 all_numeric() 选择器
    • 使用训练数据的均值与标准差应用到新数据

可在一个 recipe 中添加多个 step_*() 函数

  • 顺序很重要
leads_norm_rec <- recipe(purchased ~ .,
                         data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9) %>% step_normalize(all_numeric())
leads_norm_rec
数据配方
输入:
      角色  变量数
     因变量      1
     预测变量    6

操作:
对 all_numeric() 进行相关性过滤
对 all_numeric() 进行中心化与缩放
在 R 中使用 tidymodels 建模

转换测试数据

已移除 pages_per_vist,并对数值型预测变量做了标准化

leads_norm_rec %>% 
  prep(training = leads_training) %>% 
  bake(new_data = leads_test)
# A tibble: 332 x 6
 total_visits  total_time  total_clicks  lead_source   us_location  purchased
      <dbl>      <dbl>        <dbl>        <fct>          <fct>      <fct>    
 1    0.864     -0.984     -0.360        direct_traffic   west        no       
 2   -0.151      1.33      -0.506        direct_traffic   northeast   yes      
 3   -0.405     -0.843     -0.140        organic_search   west        no       
 4   -0.659     -1.14      -1.24         email            midwest     no       
 5    1.12       0.725     -1.24         direct_traffic   west        yes           
# ... 另有 327 行
在 R 中使用 tidymodels 建模

¡Vamos a practicar!

在 R 中使用 tidymodels 建模

Preparing Video For Download...