ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 1.3 · 4 z 33 gotowych lekcji · 12 min

Punkt odniesienia: z czym porównujesz model?

W skrócie

Zanim pochwalisz model, policz wynik bez uczenia: najczęstszą klasę lub średnią. Gdy chorych jest mało, „zawsze zdrowy” ma wysoką trafność i nikogo nie wykryje.

Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Z lekcji 1.2: Dane, cechy, etykiety i podział zbioru Zmieniasz tylko ziarno losowania podziału, a trafność na teście się zmienia. Co to pokazuje?

Pokaż odpowiedź

Poprawna odpowiedź: Że wynik testu zależy od tego, które wiersze akurat trafiły do testu

Inne ziarno daje inne wiersze testowe, więc wynik waha się przypadkowo, tym bardziej, im mniejszy zbiór testowy.

Z lekcji 1.1: Czym jest uczenie maszynowe? Model ma rację w mniej więcej 60% przypadków na tych danych o guzach. Dlaczego to nie robi wrażenia?

Pokaż odpowiedź

Poprawna odpowiedź: Bo „zawsze łagodny” trafia już w prawie dwóch trzecich przypadków

Większość guzów w zbiorze jest łagodna, więc model musi najpierw pobić banalną odpowiedź większościową.

W lekcji 0.1 drzewo trafiało 95,1% pingwinów, a zgadywanie 43,7%. Ta druga liczba to punkt odniesienia (ang. baseline): wynik odpowiedzi, która niczego się nie uczy. Bez niego nie wiesz, czy model coś umie. Dziś zobaczysz, jak go policzyć w dwóch zadaniach i kiedy sama trafność oszukuje. Dane: 569 biopsji guzów piersi i 442 pacjentów z cukrzycą.

Przewidź, potem sprawdź W teście zostaje 107 łagodnych biopsji i tylko 1 złośliwa. „Model” na każdą odpowiada „łagodny”. Jaką ma trafność i ile złośliwych wykryje?
Jak bardzo jesteś pewny(-a)?

Eksperyment

Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać.

Pokaż odpowiedź

Poprawna odpowiedź: Około 99%, więcej niż wyuczona reguła, i nie wykryje żadnej

107 ze 108 biopsji to 99,1% trafności, a złośliwa przechodzi niezauważona. Wyuczona reguła z jednym progiem ma na tym teście 90,7%, czyli mniej, ale tę jedną złośliwą wykrywa. Na pełnym teście, z 64 złośliwymi, „zawsze łagodny” ma tylko 62,6%.

Spróbuj

  • Zacznij od biopsji z wszystkimi 64 złośliwymi. O ile wyuczona reguła bije „zawsze łagodny”?
  • Przesuwaj suwak w prawo, aż złośliwych będzie 5, a potem 1. Co dzieje się z trafnością „zawsze łagodny”, a co z liczbą wykrytych złośliwych?
  • Przełącz na cukrzycę. Porównaj błąd prostej z BMI i modelu z 10 pomiarami z błędem samej średniej.

Gdy już sprawdzisz to w labie, nazwijmy, co widzisz.

Pomysł w prostych słowach

Punkt odniesienia to najprostsza odpowiedź, jaką da się dać bez uczenia. W klasyfikacji to najczęstsza klasa: wśród 398 biopsji do nauki łagodnych jest 250, więc odpowiedź brzmi zawsze „łagodny”. W regresji to średnia: każdy pacjent dostaje ten sam przewidywany postęp choroby, średni z pacjentów do nauki.

Model ma sens dopiero wtedy, gdy wyraźnie bije punkt odniesienia na tych samych danych testowych. Na biopsjach reguła z jednym pomiarem i progiem ma 91,2% wobec 62,6%. W cukrzycy model z 10 pomiarami ma błąd 2827 wobec 5076 dla średniej, czyli o 44,3% mniejszy. Prosta z samym BMI zmniejsza błąd tylko o 19,3%.

Jest też słabszy punkt odniesienia: zgadywanie w proporcjach, czyli „łagodny” z szansą taką, jaki jest udział łagodnych w nauce. Średnio trafia 53,2%, mniej niż „zawsze łagodny”. Dlatego za punkt odniesienia bierze się najczęstszą klasę: łatwiej ją pobić losowo niż zrozumieniem.

Jak to policzono
  • Biopsje: Breast Cancer Wisconsin (Diagnostic), UCI, licencja CC BY 4.0. 569 biopsji (357 łagodnych, 212 złośliwych), 10 pomiarów jąder komórkowych.
  • Cukrzyca: zbiór Diabetes (Efron i in., 2004) z scikit-learn; autorzy nie podali licencji. 442 pacjentów, 10 pomiarów, postęp choroby rok później.
  • Podział 70/30, ten sam co train_test_split(test_size=0.3, random_state=1) w scikit-learn; biopsje ze stratyfikacją. W teście 171 biopsji i 133 pacjentów.
  • Reguła: drzewo decyzyjne z jednym pytaniem (CART). Model regresji: metoda najmniejszych kwadratów.

Dlaczego to działa

Trafność „zawsze najczęstszej klasy” to po prostu udział tej klasy w teście. Na pełnym teście łagodnych jest 107 ze 171, stąd 62,6%. Gdy zostawisz 1 złośliwą, łagodne to 107 ze 108, stąd 99,1%. Trafność punktu odniesienia nie mówi nic o biopsjach. Mówi tylko, jak rzadka jest druga klasa.

Dlatego przy rzadkiej klasie trafność przestaje odróżniać dobry model od bezużytecznego. Przy 5 złośliwych w teście „zawsze łagodny” ma 95,5%, a reguła 91,1%, choć tylko reguła wykrywa wszystkie 5. To nie przypadek jednego podziału: na 100 różnych podziałach „zawsze łagodny” wygrywa w trafności z regułą w 82. Tu pomaga druga liczba obok trafności: ile przypadków klasy rzadkiej model naprawdę wykrył.

W regresji średnia jest najlepszą stałą odpowiedzią: żadna inna jedna liczba nie daje mniejszego błędu średniokwadratowego na danych do nauki. Każdy model, który ma pomiary, powinien ją pobić, i tu bije zawsze. Na 100 podziałach prosta z BMI i model z 10 pomiarami mają mniejszy błąd niż średnia za każdym razem, średnio o 33,7% i 48,5%.

Częsty błąd

Prawda czy fałsz: „90% trafności to dużo”. To nieprawda, a raczej: sama liczba tego nie mówi. Gdy choruje 1 osoba na 100, test „zawsze zdrowy” ma 99% trafności i nie wykrywa nikogo. Model z 90% byłby wtedy gorszy od niczego w trafności, a mógłby być bardzo cenny, jeśli wykrywa chorych. Zawsze podawaj punkt odniesienia obok wyniku i sprawdzaj, ile przypadków rzadkiej klasy model wykrył.

Gdzie ta analogia się psuje: punkt odniesienia to dolna granica, a nie cel. Pobicie go o włos zwykle nic nie znaczy, bo inny podział danych może odwrócić wynik.

Quiz

Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.

1. Co jest punktem odniesienia w klasyfikacji?
Pokaż odpowiedź

Poprawna odpowiedź: Odpowiedź „zawsze najczęstsza klasa z danych do nauki”

Punkt odniesienia to wynik odpowiedzi bez uczenia. Tu „zawsze łagodny” ma 62,6% na pełnym teście i każdy model musi go wyraźnie pobić.

2. W teście jest 108 biopsji, w tym 1 złośliwa. „Zawsze łagodny” ma 99,1%, reguła 90,7%. Który model jest lepszy do badań przesiewowych?
Pokaż odpowiedź

Poprawna odpowiedź: Reguła, bo wykrywa złośliwą, a „zawsze łagodny” nie wykryje nigdy

Przy rzadkiej klasie trafność nagradza ignorowanie jej. „Zawsze łagodny” nie wykryje żadnej złośliwej biopsji, niezależnie od tego, ile ich będzie.

3. Model regresji ma błąd 4096, a średnia 5076. O ile model jest lepszy od punktu odniesienia?
Pokaż odpowiedź

Poprawna odpowiedź: O 19,3%, bo 1 − 4096 / 5076 ≈ 0,193, czyli niewiele

Porównujesz z punktem odniesienia: prosta z BMI zmniejsza błąd o 19,3%, a model z 10 pomiarami o 44,3%.

Najważniejsze wnioski

  • Punkt odniesienia to wynik bez uczenia: najczęstsza klasa w klasyfikacji, średnia w regresji.
  • Model porównujesz z punktem odniesienia na tych samych danych testowych, a nie z zerem.
  • Gdy klasa jest rzadka, „zawsze częstsza klasa” ma wysoką trafność i nie wykrywa nikogo; podawaj też, ile rzadkich przypadków model wykrył.
  • Przewagę sprawdzaj na wielu podziałach, bo jeden może wypaść korzystnie przez przypadek.

Głębiej: wzór, kod, praktyka

Matematyka

Trafność odpowiedzi „zawsze klasa k” to udział tej klasy w teście: trafność = n_k / n. Na pełnym teście 107 / 171 ≈ 0,626, przy jednej złośliwej 107 / 108 ≈ 0,991.

Zgadywanie „łagodny” z prawdopodobieństwem p (udział łagodnych w nauce, 250 / 398 ≈ 0,628) trafia średnio p · q + (1 − p) · (1 − q), gdzie q to udział łagodnych w teście. Na pełnym teście daje to około 0,532.

W regresji stała odpowiedź c ma błąd MSE(c) = (1/n) · Σ (yᵢ − c)². Pochodna −(2/n) · Σ (yᵢ − c) zeruje się przy c = ȳ, więc średnia daje najmniejszy błąd spośród wszystkich stałych. Względną poprawę liczysz jako 1 − MSE(model) / MSE(średnia): dla 10 pomiarów 1 − 2827 / 5076 ≈ 0,443.

W kodzie (Python)

Ten sam eksperyment w scikit-learn: punkt odniesienia i reguła z jednym progiem na biopsjach przy 64, 5 i 1 złośliwej w teście, porównanie na 100 podziałach, a potem średnia, prosta z BMI i model z 10 pomiarami w cukrzycy.

import numpy as np
from sklearn.datasets import load_breast_cancer, load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LinearRegression

X, y = load_breast_cancer(return_X_y=True)
X = X[:, :10]  # 10 pomiarów „mean”, jak w labie; y: 0 = złośliwy, 1 = łagodny
def biopsies(seed, keep_malignant):
    tr, te = train_test_split(np.arange(len(y)), test_size=0.3, stratify=y, random_state=seed)
    te = np.sort(te)  # wiersze testowe w kolejności z pliku, jak w labie
    major = np.bincount(y[tr]).argmax()  # punkt odniesienia: najczęstsza klasa w nauce
    rule = DecisionTreeClassifier(max_depth=1, random_state=0).fit(X[tr], y[tr])  # jeden pomiar, jeden próg
    rows = np.r_[te[y[te] == 1], te[y[te] == 0][:keep_malignant]]  # wszystkie łagodne + pierwsze m złośliwych
    pred = rule.predict(X[rows])
    return (y[rows] == major).mean(), ((major == 0) & (y[rows] == 0)).sum(), (pred == y[rows]).mean(), ((pred == 0) & (y[rows] == 0)).sum()
for m in (64, 5, 1):
    base, base_found, acc, found = biopsies(1, m)
    print(f"malignant {m}: always benign {base:.3f} (finds {base_found}), rule {acc:.3f} (finds {found})")
wins = sum(biopsies(s, 5)[0] > biopsies(s, 5)[2] for s in range(100))
print(f"100 splits, 5 malignant: always benign beats the rule in {wins}")

Xd, yd = load_diabetes(return_X_y=True)
def diabetes(seed):
    a, b, c, e = train_test_split(Xd, yd, test_size=0.3, random_state=seed)
    mse = lambda p: ((e - p) ** 2).mean()
    return mse(c.mean()), mse(LinearRegression().fit(a[:, [2]], c).predict(b[:, [2]])), mse(LinearRegression().fit(a, c).predict(b))
mean, bmi, full = diabetes(1)
print(f"diabetes: mean {mean:.0f}, BMI {bmi:.0f} ({1 - bmi / mean:.1%} lower), all 10 {full:.0f} ({1 - full / mean:.1%} lower)")
r = np.array([diabetes(s) for s in range(100)])
print(f"100 splits: BMI beats the mean in {(r[:, 1] < r[:, 0]).sum()}, all 10 in {(r[:, 2] < r[:, 0]).sum()}; error lower by {1 - r[:, 1].mean() / r[:, 0].mean():.1%} and {1 - r[:, 2].mean() / r[:, 0].mean():.1%} on average")

Wynik

malignant 64: always benign 0.626 (finds 0), rule 0.912 (finds 59)
malignant 5: always benign 0.955 (finds 0), rule 0.911 (finds 5)
malignant 1: always benign 0.991 (finds 0), rule 0.907 (finds 1)
100 splits, 5 malignant: always benign beats the rule in 82
diabetes: mean 5076, BMI 4096 (19.3% lower), all 10 2827 (44.3% lower)
100 splits: BMI beats the mean in 100, all 10 in 100; error lower by 33.7% and 48.5% on average

Na podziale 1 liczby są takie same jak w labie. Model z 10 pomiarami w labie liczy na danych zaokrąglonych do dwóch miejsc po przecinku, dlatego jego błąd może różnić się od tego kodu o ułamek, ale po zaokrągleniu wynosi tyle samo: 2827.

Dla praktyka
  • W scikit-learn punkt odniesienia dają DummyClassifier(strategy="most_frequent") i DummyRegressor(strategy="mean"). Licz go na tym samym podziale co model.
  • Przy niezrównoważonych klasach podawaj obok trafności czułość klasy rzadkiej albo zbalansowaną trafność; „zawsze częstsza klasa” ma zbalansowaną trafność 50%.
  • Silniejszym punktem odniesienia bywa prosta reguła z jednym pomiarem albo poprzedni model w firmie. Nowy model musi pobić najlepszy z nich.
  • Gdy przewaga nad punktem odniesienia jest mała, sprawdź ją na wielu podziałach albo w walidacji krzyżowej, zanim ją ogłosisz.

Więcej w Atlasie

Hasła encyklopedii o pojęciach z tej lekcji: