pandas 使用t检验的A/B检验

yeotifhr  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(117)

我正在运行一些模拟来测试对当前模型的更改,让我们将更改称为新算法。我的模型预测了两条可能路线之间的特定交易路线。成功率被定义为总成功/总交易。下面的格子有两列旧的和新的。旧算法具有14天的每日成功率,而新算法具有14天的每日成功率,
Q1.我想得出一个新算法是否优于旧算法的结论,我可以只比较14天的平均值,但我想运行一些统计措施。我已经写了下面的代码,但如果我交换新列和旧列,它仍然会产生相同的p值。我基本上想得出新的比旧的好的结论,但我认为这个测试告诉我,两种算法的结果是明显不同的。我需要一些帮助才能得出结论
Q2.我可以告诉我的结果(新旧差异B/w)的置信区间吗?

import pandas as pd
from scipy import stats

data = pd.DataFrame({
    'old': [74.9254,73.7721,73.6018,68.6855,63.4666,63.9204,70.6977,62.6488,67.8088,70.2274,71.1197,64.8925,73.1113,70.7065],  # Replace with your old algorithm results
    'new': [74.8419,73.7548,73.6677,68.9352,63.8387,64.1143,70.9533,62.6026,67.9586,70.7,71.1263,65.1053,72.9996,70.5899],
})

# Perform a paired t-test
t_statistic, p_value = stats.ttest_rel(data['new'], data['old'])

# Define your significance level (alpha)
alpha = 0.05

# Print the t-statistic and p-value
print(f"Paired t-statistic: {t_statistic}")
print(f"P-value: {p_value}")

# Compare p-value to the significance level
if p_value < alpha:
    print("Reject the null hypothesis. The new algorithm is performing significantly better.")
else:
    print("Fail to reject the null hypothesis. There is no significant difference between the algorithms.")
bweufnob

bweufnob1#

您已经正确地确定了应该使用配对t检验进行比较,因为您正在比较两个相关的组。我会按顺序回答你的问题
问题1:当你交换“新”和“旧”时,你得到相同的p值的原因是因为p值测试了均值相同的零假设。t统计量将改变符号,但p值保持不变。在你的例子中,重要的是t统计量的符号。如果它是正的,则表明新算法的平均值高于旧算法。如果它是负的,则表明旧算法的均值高于新算法。
因此,按照这种方式修改决策逻辑:

if p_value < alpha:
    if t_statistic > 0:
        print("Reject the null hypothesis. The new algorithm is performing significantly better.")
    else:
        print("Reject the null hypothesis. The old algorithm is performing significantly better.")
else:
    print("Fail to reject the null hypothesis. There is no significant difference between the algorithms.")

Q2:是的,您可以计算差异的置信区间。举例来说:

# Compute the difference and its standard error
difference = data['new'] - data['old']
se = difference.std() / (len(difference)**0.5)

# Compute the confidence interval
ci_low = difference.mean() - (se * stats.t.ppf(1 - (alpha / 2), len(difference) - 1))
ci_high = difference.mean() + (se * stats.t.ppf(1 - (alpha / 2), len(difference) - 1))

print(f"Confidence Interval (95%): ({ci_low:.4f}, {ci_high:.4f})")

在本例中,您计算了95%的置信区间,这对应于0.05的alpha水平。如果该区间不包含0,则提供了拒绝零假设的进一步证据(类似于p值检验)。此外,区间为两种算法的均值之间的差异提供了一个合理的值范围。

相关问题