Menu
CoddyTech

La regola dello z-score

Fa parte della sezione Statistica per il machine learning del percorso Machine Learning di Coddy. Lezione 26 di 64.

Una fattoria ha pesato 300 uova, poi ne ha inserite due a mano: 6.2 g e 94.6 g, entrambe con errori di digitazione. I loro punteggi z (distanze dalla media, in deviazioni standard) le smascherano:

Un istogramma dei pesi di 300 uova espressi come punteggi z, tutti compresi tra -3 e 3 all'interno di una fascia ombreggiata indicata come entro 3 deviazioni standard. Due punti rossi si trovano molto al di fuori: 6.2 g a z = -9.9 e 94.6 g a z = 6.3

np.abs elimina i segni meno, quindi un solo confronto intercetta entrambi i lati:

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])

Questo stampa:

[4 2 1]
[ 6.2 94.6]

Nei dati a campana, il 99.7% dei valori si trova entro 3 std, quindi np.abs(z) > 3 segnala i valori rari da controllare prima dell'addestramento.

Ma un valore anomalo aumenta la deviazione standard calcolata includendolo, quindi nei campioni piccoli può passare inosservato: in questi casi usa la regola dell’IQR.

challenge icon

Sfida

Medio

La bilancia di una panetteria ha pesato 250 pagnotte in loaves e altre 3 sono state inserite a mano. Il programma legge una soglia.

  1. Calcola il punteggio z di ogni pagnotta usando .mean() e .std() dell'array.
  2. In ordine di posizione, stampa ogni pagnotta il cui punteggio z dista da 0 più della soglia: la sua posizione, il peso (1 cifra decimale) e il punteggio z (2 cifre decimali).
  3. Stampa quante ne hai elencate.

Per un altro giorno e con la soglia 3:

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

Provalo tu

import numpy as np

# No cambies las líneas siguientes: 250 panes pesados con la báscula y luego 3 pesos introducidos a mano
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())

# Escribe tu código a continuación
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Statistica per il machine learning

Esercitati da solo: Compilatore Python online