ABtest原理及python代码

# coding=utf-8

import numpy as np

import pandas as pd

from scipy import stats

import statsmodels.stats.weightstats as sw

# 两个样本长度相同

x1 = np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])

x2 = np.array([1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1])

# 大量数据导入

# df_x1 = pd.read_excel()

# df_x2 = pd.read_excel()

# np.array(df_x1['lable'].tolist())

# np.array(df_x2['lable'].tolist())

# 样本均值是否显著差异检验

def ABTest(x1,x2,alpha = 0.05):

     '''

     :param x1: 样本 1

     :param x2: 样本 2

     :param alpha: 1 类错误容许值

     :return: z/t p 统计量 p

     '''

     # 样本量大于 30 时,使用 Z 检验

     if len(x1) >30:

         z,p = sw.ztest(x1, x2, value=0)

         # 详细计算公式

         # 样本标准误差,分母使用 n-1

         # x1_mean,x1_std,x2_mean,x2_std = x1.mean(),x1.std(ddof = 1),x2.mean(),x2.std(ddof = 1)

         # z = (x1_mean - x2_mean) / np.sqrt(x1_std ** 2 / len(x1) + x2_std ** 2 /len(x2))

         # p = 2*stats.norm.sf(abs(z))

         # 根据 alpha 计算置信区间 外汇跟单gendan5.com Z 分数服从标准正态分布

         d = stats.norm.ppf(1 - alpha / 2)

         floor = - d

         ceil = d

         print(' 使用 Z 检验 ')

         print('Z 分数为 {}'.format(z))

         print(' 置信区间为 [{0},{1}]'.format(floor,ceil))

         print('p 值为 {0},{1}alpha, 认为 x1,x2 均值差异 {2}'.format(p,' 大于 ' if p > alpha else ' 小于 ',' 显著 ' if p < alpha else ' 不显著 '))

         return z,p

     # 样本量不够大,使用 t 检验

     else:

         x = x1 - x2

         t,p = stats.ttest_1samp(x,0)

         d = stats.norm.ppf(1 - alpha / 2)

         floor = - d

         ceil = d

         print(' 使用 T 检验 ')

         print('T 分数为 {}'.format(t))

         print(' 置信区间为 [{0},{1}]'.format(floor,ceil))

         print('p 值为 {0},{1}alpha, 认为 x1,x2 均值差异 {2}'.format(p,' 大于 ' if p > alpha else ' 小于 ',' 显著 ' if p < alpha else ' 不显著 '))

         return t,p

ABTest(x1,x2)

结果:

使用 Z 检验

Z 分数为 -7.1414284285428495

置信区间为 [-1.959963984540054,1.959963984540054]

p 值为 9.236596617174027e-13, 小于 alpha, 认为 x1,x2 均值差异显著

Out[21]: (-7.1414284285428495, 9.236596617174027e-13)


请使用浏览器的分享功能分享到微信等