Menu
CoddyTech

標本と母集団の違い

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

養蜂家が5つの巣箱から採れた蜂蜜の重さをkg単位で量りました。NumPyとpandasでは標準偏差の値が異なります:

values = [18, 22, 25, 19, 26]
print(np.round(np.std(values), 2))
print(np.round(pd.Series(values).std(), 2))

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

3.16
3.54

どちらも同じ偏差平方和を求めてから、割ります:

巣箱5個の偏差平方は、16、0、9、9、16で、合計は50です。一方の矢印はnp.stdを指し、50 / 5 = 10、標準偏差は3.16で、母集団の公式です。もう一方はpandasを指し、50 / 4 = 12.5、標準偏差は3.54で、標本の公式です

母集団にはすべての値が含まれているため、母集団では n で割るのが適切です。標本はそれ自身の平均値に寄るため、ばらつきが小さく見えます。n - 1でその分を補います。

ddof=1を指定すると、NumPyは標本用の式を使います。np.std(a, ddof=1)はpandasの結果と一致します。モデルのデータは標本なので、ツール間で標準偏差が一致しない場合、その原因はバグではなくddofです。

challenge icon

チャレンジ

簡単

ある生物学者が、数匹のコウモリの翼幅(cm)の標準偏差を2種類の方法で計算したところ、異なる値になりました。スターターコードでは、値を配列 spans と Series column に読み込みます。チェック結果は False と表示されます。

  1. コウモリは標本です。両方のツールで標本標準偏差が得られるよう、NumPyの行を修正してください。
  2. その下に、NumPyのデフォルトの np.std(spans) が column.std() をどれだけ下回るかを、小数点以下2桁で出力してください。

翼幅が33、27、30、35、29の場合:

Sample std: 3.19 cm, tools agree: True
Dividing by n underestimated it by 0.34 cm

自分で試してみよう

import numpy as np
import pandas as pd

n = int(input())
values = []
for i in range(n):
    values.append(int(input()))
spans = np.array(values)
column = pd.Series(values)

# このチェックでは False と表示されます。両方のツールが標本標準偏差を返すように NumPy の行を修正してください
numpy_std = np.round(np.std(spans), 2)
pandas_std = np.round(column.std(), 2)
print(f"Sample std: {numpy_std} cm, tools agree: {numpy_std == pandas_std}")

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

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

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

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