【问题标题】:how to segment groups based on different criteria如何根据不同的标准对组进行细分
【发布时间】:2019-12-03 21:45:06
【问题描述】:

我正在尝试根据 A 到 F 列的值将测试组和对照组分配到下表中。

最终,我想要一个如下所示的表格。如果不同的 zip 对所有列具有相同的值,则将一半的 zip 分配给测试,一半分配给控制。如果无法平均分配 zip 的总数,则将额外的 zip 分配给控制。

【问题讨论】:

  • 您对如何处理奇数组的定义将导致一个有偏见的对照组,因为所有连体衣最终都会进入该组。

标签: sql oracle testing case-when ab-testing


【解决方案1】:

您可以使用row_number()mod()

select 
    t.*,
    case when mod(
        row_number() over(partition by A, B, C, D, E, F order by zip), 
        2
    ) = 0 then 'T' else 'C' end tc_group
from mytable t

row_number() 将递增的数字分配给共享相同(A, B, C, D, E, F) 值的记录,按递增的zip 排序。我们会将偶数行号分配给测试组T,将奇数行号分配给组C

【讨论】:

  • 欢迎@Lion!如果这正确回答了您的问题,请点击复选标志accept it...谢谢!
【解决方案2】:

我认为分层样本会满足您的需求:

select t.*,
       (case when mod(row_number() over (order by a, b, c, d, e, f), 2) = 1
             then 'C' else 'T'
        end) as test_group
from t;

这不是完全您对问题的表述方式,但它应该具有相同的效果,即在两组中平均拆分列中具有相同值的行。当有奇数时,有时多余的会去测试,有时会去控制。

从问题中不清楚您是否想要平衡的控制组和测试组 - 这是我所期望的。如果您真的希望所有奇数组都控制(如您所建议的那样),那么所有连体衣都将在控制中,这对我来说似乎有偏见。

【讨论】:

  • 这太好了,谢谢!奇数去测试或控制都没关系,所以这正是我需要的!
  • @Lion 。 . .你的问题措辞不同,这就是为什么我在这个答案中详细说明。我的猜测是分层样本正是您想要的。这通常是将数据分成两个统计学上相似的组的最佳方法。
猜你喜欢
  • 2012-01-02
  • 2021-09-10
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多