[БЕЗ_ЗВУКА] В этом
видео мы научимся строить интервальные оценки с помощью методологии Bootstrap.
Часто нам требуется интервально оценить некоторую не самую удобную статистику,
про распределение которой нам просто ничего не известно.
Таких примеров довольно много.
Например, это все квантили, в частности медиана, либо это может быть отношение
каких-то известных нам статистик, например отношение долей.
В принципе, это может быть любая функция, которую вы можете посчитать по выборке.
Возникает вопрос: что делать в этом случае?
В целом, чтобы построить доверительный интервал для некоторой статистики,
нам нужно знать ее выборочное распределение.
Если этого распределения нет, то кажется, что мы можем поступить следующим образом:
нагенерировать много-много выборок из генеральной совокупности,
дальше на каждой из этих выборок посчитать статистику,
и таким образом по полученным данным эмпирически оценить распределение.
Здесь есть следующая проблема: в том случае если мы действительно можем
неограниченно генерировать выборки из генеральной совокупности,
если нам это не сложно, то получается,
что в целом и оценить эту статистику по всей совокупности мы тоже можем.
Тогда нам уже не нужно генерировать никакие выборки, получается,
что мы напрямую можем оценить значения нашей статистики.
На самом деле это скорее теоретический способ, чем практический,
на практике он не применим — мы практически никогда не можем неограниченно
генерировать подвыборки.
Тогда можно предложить другую идею: использовать так называемый
параметрический подход.
В этом случае мы можем сделать предположение о том,
что наша статистика распределена по некоторому закону.
И дальше, исходя из этого,
оценить параметры распределения в соответствии с нашими предположениями.
В целом такой метод может работать, но только в том случае, если мы можем на
основе некоторых известных нам знаний сделать хорошие предположения.
Обычно для анализ нам доступна только выборка, поэтому не всегда мы это можем.
Как же поступать в этом случае?
Так как для анализа нам доступна только исходная выборка,
давайте поступать следующим образом: будем генерировать на основе данной
выборки так называемые псевдовыборки, то есть генерировать
выборки такой же длины с помощью сэмплирования с возвращением.
После того как мы сгенерируем n подобных выборок, давайте просто оценим значение
нашей статистики на каждой из них и таким образом оценим эмпирическое распределение.
Таким образом, мы будем строить оценку не теоретической функции распределения,
а эмпирической.
Ровно в этом и состоит идея Bootstrap'а,
давайте потренируемся применять эту идею на практике.
Давайте рассмотрим следующую задачу: компания Verizon
является основной телекоммуникационной региональной компанией на западе США.
Это означает, что данная компания должна предоставлять услуги по ремонту
оборудования не только для своих клиентов,
но также для клиентов других локальных компаний.
При этом, в тех случаях когда время ремонта оборудования для клиентов других
компаний существенно выше, чем время ремонта оборудования для своих клиентов,
компания может быть оштрафована.
Давайте проанализируем данные и проверим, правда ли что время ремонта оборудования
для своих клиентов существенно ниже, чем для клиентов других компаний.
Для этого для начала давайте загрузим данные,
сразу же выведем их размер — видим, что у нас доступны данные приблизительно
о 1700 случаях ремонта оборудования, и видим, что у нас есть всего два столбца.
Вот давайте посмотрим.
Видим, что в первом столбце у нас отложено время, то есть время ремонта оборудования,
а в следующем столбце у нас отмечена группа.
Как видно из описания задачи, ILEC — это означает, что клиент является клиентом
компаний Verizon, CLEC — это значит, что клиент внешний по отношению к компании.
Ну и давайте теперь посмотрим, как много данных у нас есть относительно клиентов
компании Verizon и как много данных относительно клиентов внешних компаний.
Итак, видим, что практически все данные — это данные по клиентам компании Verizon.
Ну ничего, в таких условиях мы также можем сравнивать среднее время.
Для начала давайте построим гистограммы отдельно для клиентов
компании Verizon и отдельно для других клиентов.
Это делается очень просто: будем использовать pylab и метод hist.
Теперь давайте попробуем эти диаграммы, гистограммы проанализировать.
Вообще говоря, судя по тому, что мы видим, кажется, что все-таки время
время ремонта оборудования для внутренних клиентов сильно меньше — мы видим,
что основная часть значения сосредоточена в районе нуля.
Однако оценивать такие вещи глазами не совсем правильно,
давайте сделаем это строго.
Будем пользоваться методологией Bootstrap.
Реализация очень простая: для начала давайте сгенерируем вспомогательную
функцию, для того чтобы получать эти самые псевдоподвыборки.
Ну это очень просто — будет пользоваться методом randint из библиотеки numpy.
Что нам хочется сделать?
Нам хочется сгенерировать заданное количество выборок,
количество выборок мы будем определять с помощью аргумента n_samples,
исходя из исходной выборки, которую мы будем передавать в виде аргумента data.
Подвыборки мы будем задавать с помощью индексов, то есть мы просто будем
генерировать n_samples наборов индексов из исходного доступного диапазона.
А далее, чтобы получить непосредственно выборки,
мы просто применим полученный набор индексов к исходным данным.
Таким образом, вернется набор подвыборок.
Далее по полученным подвыборкам мы с вами сможем рассчитывать статистику,
но для этого нужен просто метод, который статистику по данным умеет считать.
И после того как мы с вами набор статистик получим, нам нужно просто оценить его
интервально, будем это делать с помощью функции percentile.
Итак, вспомогательная работа проведена,
теперь давайте строить интервальные оценки.
Для начала нам нужно разделить данные — делить данные про
внутренних и внешних клиентов.
Вот давайте это сделаем с помощью очень простого условия.
Итак, данные мы отделили,
теперь нам нужно научиться рассчитывать значения статистики.
Так как статистика стандартная, это медиана,
давайте использовать готовую реализацию — будем пользоваться функцией np.
median — и посчитаем наши статистики.
Несмотря на то что у нас доступно больше данных про клиентов внутренних компаний,
чем внешних, давайте будем строить одинаковое количество подвыборок для одних
или других клиентов.
Соответственно, что мы с вами делаем?
Мы с вами применяем функцию get_bootstrap_samples к наборам данных,
получаем псевдоподвыборки.
Далее для каждой из этих подвыборок считаем статистику этой медианы и
записываем все это в список.
После этого что мы можем сделать?
Мы можем применить функцию stat_invervals, которой мы определили шагом ранее,
к полученным данным, и получить интересующие нас доверительные интервалы.
Вот в данном случае давайте получим 95-процентные доверительные интервалы.
Итак, применяем, и что мы видим?
Мы видим, что весь интервал для медианы времени ремонта оборудования внутренних
клиентов находится левее интервала медианы времени ремонта оборудования для внешних
клиентов — значит,
что действительно внутренним клиентам оборудование ремонтируют быстрее.
Теперь давайте немного усложним и попробуем оценить медиану разности во
времени ремонта оборудования.
Казалось бы, получить точечную оценку довольно просто — мы можем независимо
оценить медиану по одной и по другой выборке, а дальше посчитать их разность.
Вот давайте с этого начнем.
Считаем медиану и оцениваем разность.
Видим, что мы получили довольно большое значение для разности.
Что если мы хотим оценить медиану разности во времени ремонта интервально?
Кажется, что если мы будем действовать независимо, то есть интервально оценим
медиану для одной выборки, а потом — для другой, то у нас нет никаких технических
оснований, чтобы из этих двух интервальных оценок получить одну То есть, скажем,
мы не можем просто взять и посчитать разность левых и правых границ этих
интервалов — этой статистикой мы никак не сможем воспользоваться.
Давайте тогда поступим чуть более хитро.
Что если сначала мы сгенерируем подвыборки из исходных выборок с помощью технологии
Bootstrap?
То есть получим тысячу подвыборок для одной группы, тысячу подвыборок для
другой группы, и дальше посчитаем для них медианы времени ремонта.
После этого мы получим два набора медиан, и что мы сможем с ними сделать?
Мы с ними сможем посчитать разность и интервально оценить полученную статистику.
Вот давайте так поступим.
Для этого пользуемся простой комбинацией функций zip и map,
то есть сначала объединяем оценки медиан по подвыборкам из одной и другой
исходной выборки — мы с вами получили их чуть ранее, не будем их просто
перегенерировать, и дальше на основе этих данных просто посчитаем их разности.
Итак, считаем дельта медиан, и теперь так как дельта медиан у нас уже есть,
вот эту выборку мы можем оценить, вот ее мы можем оценить интервально.
Давайте это сделаем и выведем 95-процентный доверительный интервал.
Что мы видим?
Видим оценку от 2 до 16.6.
Таким образом, мы смогли интервально оценить разность медиан.
А на этом мы заканчиваем.
Мы научились строить интервальные оценки на основе методологии Bootsrap,
а на следующем занятии мы перейдем к очень интересной теме — «Проверка статистических
гипотез».