You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用it.chain迭代的A/B测试校验函数结果重复输出问题

问题描述

实现A/B测试样本显著性校验函数时出现输出异常:核心计算逻辑的结果数值正确,但所有校验结果会重复输出两次。预期每个转化步骤的校验结果仅打印一次,实际运行时输出重复,效果如下:
运行输出截图

问题代码
def test (sample1, sample2):
    
    for i in it.chain (range(len(sample1)), range(len(sample2))):
        
        alpha = .05
           
        difference = (sample1['step_conversion'][i] - sample2['step_conversion'][i])/100
            
        if (i > 0):
            
           
            p_combined = (sample1['unq_user'][i] + sample2['unq_user'][i]) / (sample1['unq_user'][i-1] + sample2['unq_user'][i-1])
            
           
            z_value = difference / mth.sqrt(
            p_combined * (1 - p_combined) * (1 / sample1['unq_user'][i-1] + 1 / sample2['unq_user'][i-1]))
            
         
            distr = st.norm(0, 1)
            
            p_value = (1 - distr.cdf(abs(z_value))) * 2

            print( sample1['event_name'][i], 'p-value: ', p_value)

            if p_value < alpha:
                print('Deny H0')
            else:
                print('Accept H0')
        
    return 
根因分析

循环逻辑错误使用it.chain()拼接了两个样本的索引范围:it.chain(range(len(sample1)), range(len(sample2)))会先生成sample1的全量索引序列,再生成sample2的全量索引序列。由于两个样本的转化步骤数一致、同索引下的计算逻辑完全相同,循环跑完第一组索引输出完所有结果后,会用同样的索引值再跑一遍计算、再打印一次结果,最终出现输出重复的问题。

修复方法

删除it.chain拼接逻辑,直接遍历单组索引即可——现有计算逻辑本身已经在同索引下同时取了sample1和sample2的对应字段做对比,不需要遍历两次索引。
修改后的循环开头:

# 直接遍历两个样本共有的索引长度即可,同时避免索引越界
common_step_num = min(len(sample1), len(sample2))
for i in range(common_step_num):
    alpha = .05
    # 后续计算、打印逻辑保持不变

内容的提问来源于stack exchange,提问作者Karina Doll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 00:12:16