Menu
CoddyTech

IQRルール

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

箱ひげ図では、離れた値を点で示します。コードでそれらを見つけるには、その規則を2つの境界線に置き換えます。箱の各端からIQRの1.5倍だけ外側に引きます。

コンサートチケットの価格12個を、線上の点で示しています。10個は37〜43ユーロ付近の細い箱の中にあります。破線の境界線は、箱の各端からIQRの1.5倍外側にある28.1と51.1に引かれており、18と72の価格はその外側にあり、赤い外れ値として示されています

コードでは、マスクを使います:

prices = np.array([35, 42, 38, 45, 40, 72, 37, 44, 39, 41, 36, 18])
q1 = np.percentile(prices, 25)
q3 = np.percentile(prices, 75)
iqr = q3 - q1
low = q1 - 1.5 * iqr
high = q3 + 1.5 * iqr
print(low, high)
print(prices[(prices < low) | (prices > high)])

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

28.125 51.125
[72 18]

四分位数は極端な値を無視するため、外れ値が境界を広げて自分自身を隠すことはできません。学習の前にこれらの値にフラグを立てましょう。極端な値が1つあるだけで、モデルがその値に引き寄せられることがあります。

challenge icon

チャレンジ

中級

ある教師がクイズの時間を計測し、プログラムは各生徒の所要時間(分)をminutesに読み込みます。ひな形のコードは、iqr_fencesが返す境界値を出力します。

  1. iqr_fences(a)を完成させ、aの下側と上側のIQR境界値を返すようにしてください。
  2. 下に、Unusual:と、境界値の範囲外にある時間を元の順序で出力してください。

9人の生徒がそれぞれ8、11、9、10、27、12、9、10、11分かかった場合:

Fences: 6.0 to 14.0 minutes
Unusual: [27]

自分で試してみよう

import numpy as np


# 配列のIQRの下限と上限の境界値を返す
def iqr_fences(a):
    # ここにコードを書いてください
    return 0.0, 0.0


n = int(input())
values = []
for i in range(n):
    values.append(int(input()))
minutes = np.array(values)

# 以下の行は変更しないでください
low, high = iqr_fences(minutes)
print(f"Fences: {np.round(low, 2)} to {np.round(high, 2)} minutes")

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

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

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

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