Advertisement
urevoleg

ds_bootstrap_task1

Dec 2nd, 2019
1,915
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.38 KB | None | 0 0
  1. import pandas as pd
  2. import numpy as np
  3.  
  4. # данные контрольной группы A
  5. samples_A = pd.Series([
  6.      98.24,  97.77,  95.56,  99.49, 101.4 , 105.35,  95.83,  93.02,
  7.     101.37,  95.66,  98.34, 100.75, 104.93,  97.  ,  95.46, 100.03,
  8.     102.34,  98.23,  97.05,  97.76,  98.63,  98.82,  99.51,  99.31,
  9.      98.58,  96.84,  93.71, 101.38, 100.6 , 103.68, 104.78, 101.51,
  10.     100.89, 102.27,  99.87,  94.83,  95.95, 105.2 ,  97.  ,  95.54,
  11.      98.38,  99.81, 103.34, 101.14, 102.19,  94.77,  94.74,  99.56,
  12.     102.  , 100.95, 102.19, 103.75, 103.65,  95.07, 103.53, 100.42,
  13.      98.09,  94.86, 101.47, 103.07, 100.15, 100.32, 100.89, 101.23,
  14.      95.95, 103.69, 100.09,  96.28,  96.11,  97.63,  99.45, 100.81,
  15.     102.18,  94.92,  98.89, 101.48, 101.29,  94.43, 101.55,  95.85,
  16.     100.16,  97.49, 105.17, 104.83, 101.9 , 100.56, 104.91,  94.17,
  17.     103.48, 100.55, 102.66, 100.62,  96.93, 102.67, 101.27,  98.56,
  18.     102.41, 100.69,  99.67, 100.99])
  19.  
  20. # данные экспериментальной группы B
  21. samples_B = pd.Series([
  22.     101.67, 102.27,  97.01, 103.46, 100.76, 101.19,  99.11,  97.59,
  23.     101.01, 101.45,  94.8 , 101.55,  96.38,  99.03, 102.83,  97.32,
  24.      98.25,  97.17, 101.1 , 102.57, 104.59, 105.63,  98.93, 103.87,
  25.      98.48, 101.14, 102.24,  98.55, 105.61, 100.06,  99.  , 102.53,
  26.     101.56, 102.68, 103.26,  96.62,  99.48, 107.6 ,  99.87, 103.58,
  27.     105.05, 105.69,  94.52,  99.51,  99.81,  99.44,  97.35, 102.97,
  28.      99.77,  99.59, 102.12, 104.29,  98.31,  98.83,  96.83,  99.2 ,
  29.      97.88, 102.34, 102.04,  99.88,  99.69, 103.43, 100.71,  92.71,
  30.      99.99,  99.39,  99.19,  99.29, 100.34, 101.08, 100.29,  93.83,
  31.     103.63,  98.88, 105.36, 101.82, 100.86, 100.75,  99.4 ,  95.37,
  32.     107.96,  97.69, 102.17,  99.41,  98.97,  97.96,  98.31,  97.09,
  33.     103.92, 100.98, 102.76,  98.24,  97.  ,  98.99, 103.54,  99.72,
  34.     101.62, 100.62, 102.79, 104.19])
  35.  
  36. # фактическая разность средних значений в группах
  37. AB_difference = samples_B.mean() - samples_A.mean()
  38. print("Разность средних чеков:", AB_difference)
  39.  
  40. alpha = 0.05
  41.    
  42. state = np.random.RandomState(12345)
  43.  
  44. bootstrap_samples = 1000
  45. count = 0
  46. for i in range(bootstrap_samples):
  47.     # объедините выборки
  48.     united_samples = pd.concat([samples_A + samples_B])
  49.  
  50.     # создайте подвыборку
  51.     subsample = united_samples.sample(frac=1, replace=True, random_state=state)
  52.    
  53.     # разбейте подвыборку пополам
  54.     subsample_A = subsample[:len(samples_A)]
  55.     subsample_B = subsample[len(samples_A):]
  56.  
  57.     # найдите разницу средних
  58.     bootstrap_difference = subsample_B.mean() - subsample_A.mean()
  59.    
  60.     # если разница не меньше фактической, увеличиваем счётчик
  61.     if bootstrap_difference >= AB_difference:
  62.         count += 1
  63.  
  64. # p-value равно доле превышений значений
  65. pvalue = 1. * count / bootstrap_samples
  66. print('p-value =', pvalue)
  67.  
  68. if pvalue < alpha:
  69.     print("Отвергаем нулевую гипотезу: скорее всего, средний чек увеличился")
  70. else:
  71.     print("Не получилось отвергнуть нулевую гипотезу: скорее всего, средний чек не увеличился")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement