将 R 中的数据下采样到给定的分布

Down-Sample data in R to a given distribution

我有一个数据集,包括 60 个预测变量和一个指示是否发生购买以及花费了多少的因变量。我数据中的转化率为 3.5%,我想通过排除购买记录将其下采样到 2.5%。应保留原始分布。

感谢您的帮助! 比约恩.

首先,一些更简单的数据(2 列而不是 60 列)在 b 列中具有 3.5% TRUE 值:

library(tidyverse)
n <- 10000

df <- data.frame(
  a = rnorm(n)) %>%
  mutate(b = row_number() <= .035*n)

df %>%
  summarize(mean(b))

  mean(b)
1   0.035

一种缩减采样的方法是 rbind a 中您想保留​​的所有 FALSE 值以及 TRUE 值的样本通过 sample_frac:

减少目标数量
df2 <- rbind(
  df %>% filter(!b),
  df %>% filter(b) %>% sample_frac(.025/.035)
)

df2 %>%
  summarize(mean(b))

     mean(b)
1 0.02525253

您可能无法准确获得 2.5%,具体取决于您数据的原始大小,因为我们只能对整数进行采样。