ブートストラップの概要

Pythonで学ぶサンプリング

James Chapman

Curriculum Manager, DataCamp

復元抽出と非復元抽出

非復元抽出:

カジノテーブルのトランプ。

復元抽出(「リサンプリング」):

転がる4つのサイコロ。

Pythonで学ぶサンプリング

非復元単純無作為抽出

母集団:

行と列に並べられたコーヒー豆。

サンプル:

行と列に並べられたコーヒー豆(大部分がグレーアウト)。

Pythonで学ぶサンプリング

復元単純無作為抽出

母集団:

行と列に並べられたコーヒー豆。

リサンプル:

一部が重複しているコーヒー豆のランダムサンプル。

Pythonで学ぶサンプリング

復元抽出を使う理由

  • coffee_ratings:より大きな母集団からのサンプル
  • サンプルの各コーヒーは、多くの仮想的な母集団のコーヒーを表す
  • 復元抽出はその代替手法
Pythonで学ぶサンプリング

コーヒーデータの準備

coffee_focus = coffee_ratings[["variety", "country_of_origin", "flavor"]]
coffee_focus = coffee_focus.reset_index()
      index  variety country_of_origin  flavor
0         0     None          Ethiopia    8.83
1         1    Other          Ethiopia    8.67
2         2  Bourbon         Guatemala    8.50
3         3     None          Ethiopia    8.58
4         4    Other          Ethiopia    8.50
...     ...      ...               ...     ...
1333   1333     None           Ecuador    7.58
1334   1334     None           Ecuador    7.67
1335   1335     None     United States    7.33
1336   1336     None             India    6.83
1337   1337     None           Vietnam    6.67

[1338 rows x 4 columns]
Pythonで学ぶサンプリング

.sample() を使ったリサンプリング

coffee_resamp = coffee_focus.sample(frac=1, replace=True)
      index  variety country_of_origin  flavor
1140   1140  Bourbon         Guatemala    7.25
57       57  Bourbon         Guatemala    8.00
1152   1152  Bourbon            Mexico    7.08
621     621  Caturra          Thailand    7.50
44       44     SL28             Kenya    8.08
...     ...      ...               ...     ...
996     996   Typica            Mexico    7.33
1090   1090  Bourbon         Guatemala    7.33
918     918    Other         Guatemala    7.42
249     249  Caturra          Colombia    7.67
467     467  Caturra          Colombia    7.50

[1338 rows x 4 columns]
Pythonで学ぶサンプリング

重複するコーヒー

coffee_resamp["index"].value_counts()
658     5
167     4
363     4
357     4
1047    4
       ..
771     1
770     1
766     1
764     1
0       1
Name: index, Length: 868, dtype: int64
Pythonで学ぶサンプリング

欠落しているコーヒー

num_unique_coffees = len(coffee_resamp.drop_duplicates(subset="index"))
868
len(coffee_ratings) - num_unique_coffees
470
Pythonで学ぶサンプリング

ブートストラップ法

母集団からのサンプリングとは逆の操作

サンプリング:母集団から小さなサンプルを取り出す

ブートストラップ法:サンプルから理論的な母集団を構築する

ブートストラップ法のユースケース:

  • 単一サンプルを使って標本変動を理解する

カウボーイブーツ。

Pythonで学ぶサンプリング

ブートストラップ法の手順

  1. 元のサンプルと同じサイズのリサンプルを作成する
  2. このブートストラップサンプルの統計量を計算する
  3. 手順1と2を多数回繰り返す

得られた統計量をブートストラップ統計量といい、ブートストラップ分布を形成する

Pythonで学ぶサンプリング

コーヒーの平均フレーバーのブートストラップ

import numpy as np

mean_flavors_1000 = []
for i in range(1000):
mean_flavors_1000.append(
np.mean(coffee_sample.sample(frac=1, replace=True)['flavor'])
)
Pythonで学ぶサンプリング

ブートストラップ分布のヒストグラム

import matplotlib.pyplot as plt
plt.hist(mean_flavors_1000)
plt.show()

平均フレーバーのブートストラップ分布

Pythonで学ぶサンプリング

練習しましょう!

Pythonで学ぶサンプリング

Preparing Video For Download...