July 17, 2022

Оцениваем доверительные интервалы с помощью бутстрепа

Рассмотрим, как использовать технику бутстрепа для вычисления доверительных интервалов некой величины. Допустим, что вы располагаете не очень большой выборкой данных. Предполагая, что имеются похожие объекты с аналогичными величинами, вы можете сэмлировать большой набор путем выбора с возвращением точек из уже имеющейся совокупности. Затем нужные метрики можно посчитать из этого нового набора. Сгенерируем игрушечные данные о зарплатах сотрудников некой организации:

import pandas as pd
import numpy as np
np.random.seed(0)

N = 100
sals = np.random.normal(loc=50, scale=10, size=N)
names = [f'fio{it}' for it in range(1, N+1)]

df = pd.DataFrame({'fio':names, 'sal':sals})
df

Сделаем выборку с возвращением из зарплат, используя метод sample с указанием размера в параметре n и replace=True (для активации режима с возвращением):

sal_boot = df['sal'].sample(n=100000, replace=True)
sal_boot

Ниже указано, как задать границы 95% доверительного интервала и посчитать среднее, нижнюю и верхнюю квантили значений:

interv = 0.95
lb = (1-interv)/2
rb = interv + (1-interv)/2

print(f"mean - {sal_boot.quantile(0.5)}, low - {sal_boot.quantile(lb)},\
      right - {sal_boot.quantile(rb)}")