Menu
CoddyTech

Zスコアルール

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

ある農場で卵300個の重さを量り、その後、2個を手入力しました。6.2 gと94.6 gで、どちらも入力ミスです。これらのzスコア(平均からの距離を標準偏差単位で表したもの)を見れば、それとわかります。

卵300個の重さをzスコアで表したヒストグラム。すべて-3から3の範囲内にあり、3標準偏差以内と示された網掛けの帯の中にある。2つの赤い点はその外側に大きく離れている。6.2 gはz = -9.9、94.6 gはz = 6.3

np.absはマイナス記号を取り除くため、1つの比較で両側を検出できます。

rng = np.random.default_rng(3)
eggs = np.concatenate([rng.normal(60, 4, size=300), np.array([6.2, 94.6])])
z = (eggs - eggs.mean()) / eggs.std()
print(np.abs(np.array([-4, 2, -1])))
print(eggs[np.abs(z) > 3])

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

[4 2 1]
[ 6.2 94.6]

釣鐘型のデータでは、値の99.7%が3標準偏差以内にあるため、np.abs(z) > 3は、学習前に確認すべきまれな値にフラグを立てます。

ただし、外れ値はそれを測定する際の標準偏差を大きくするため、小さなサンプルでは見つかりにくくなります。その場合はIQRルールを使いましょう。

challenge icon

チャレンジ

中級

パン屋のはかりで250個のパンを計量してloavesに格納し、さらに3個を手入力しました。プログラムはしきい値を読み取ります。

  1. 配列の.mean()と.std()を使って、各パンのzスコアを計算します。
  2. 位置の順に、zスコアが0からしきい値より離れているパンそれぞれについて、位置、重さ(小数点以下1桁)、zスコア(小数点以下2桁)を出力します。
  3. 一覧にしたパンの数を出力します。

別の日に、しきい値を3にした場合:

Loaf 200: 702.5 g, z = -5.38
Loaf 201: 889.3 g, z = 4.91
Loaves to re-weigh: 2

自分で試してみよう

import numpy as np

# 以下の行は変更しないでください:はかりで測定したパン250個分の重さに続き、手入力した3個分の重さがあります
rng = np.random.default_rng(25)
loaves = np.concatenate([rng.normal(800, 15, size=250), np.array([731.4, 868.9, 912.3])])
cutoff = float(input())

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

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

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

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