Menu
CoddyTech

標本が大きいほどノイズは小さく

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 22/64。

サンプルが大きいほど推定値は良くなりますが、どのくらい良くなるのでしょうか?買い物かご25個の平均値が1000個、そして買い物かご100個の平均値が1000個あります。

どちらも30付近を中心とした、買い物かごあたりの商品のサンプル平均値を示す2つのベル型分布。灰色の買い物かご25個の平均値は約20から40まで広がり、青色の買い物かご100個の平均値は幅が半分のベル型を形成している

sample_means はそれぞれのばらつきを測定します。標準誤差 std / np.sqrt(n) を使えば、シミュレーションなしでばらつきを予測できます。

for n in [25, 100]:
    spread = sample_means(baskets, n, 1000).std()
    print(n, np.round(spread, 2), np.round(baskets.std() / np.sqrt(n), 2))

これは次のように出力されます。

25 3.43 3.45
100 1.72 1.72

データが4倍ならノイズは半分。それが平方根の働きです。400個の例でテストしたモデルのスコアは、100個の場合と比べて精度が2倍です。

challenge icon

チャレンジ

中級

bagsには、製粉所の小麦粉の袋5000個の重量がグラム単位で格納されています。品質管理では毎時サンプルを計量し、プログラムは許容する標準誤差を読み取ります。

  1. 標準誤差がその値以下となる最小のnを見つけます。bags.std() / np.sqrt(n)を使い、1から始め、大きすぎる間は1ずつ増やします。
  2. 確認します。sample_meansから得られる300個の標本平均の標準偏差を求めます。
  3. 以下のように小数第2位まで表示します。

別の製粉所で2.5の場合:

Bags to weigh: 24
Standard error: 2.46 g
Simulated spread: 2.37 g

自分で試してみよう

import numpy as np

target = float(input())

# 以下の行は変更しないでください:小麦粉の各袋の重さ(グラム)
rng = np.random.default_rng(22)
bags = np.round(rng.normal(500, 8, size=5000), 1)


# Sample Means Vary で作成した関数:count 個の標本それぞれの平均値
def sample_means(data, size, count):
    means = []
    for i in range(count):
        sample = rng.choice(data, size=size, replace=False)
        means.append(sample.mean())
    return np.array(means)


# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

機械学習のための統計のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ