Menu
CoddyTech

Presisi dan Recall

Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 22 dari 58.

Dua pertanyaan menilai jawaban tes flu. Dari alarm flu yang diberikan, berapa banyak yang benar? Dari kasus flu yang sebenarnya, berapa banyak yang berhasil dideteksi?

Matriks kebingungan tes flu digambar dua kali. Kiri, berjudul Presisi 42 / 45 = 0.933, kolom yang disebut flu disorot: 3 alarm palsu dan 42 kasus terdeteksi. Kanan, berjudul Recall 42 / 47 = 0.894, baris flu disorot: 5 kasus terlewat dan 42 kasus terdeteksi

Precision menjawab pertanyaan pertama: 42 dari 45 alarm. Recall menjawab pertanyaan kedua: 42 dari 47 kasus.

from sklearn.metrics import precision_score, recall_score

print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}")

:.3f selalu menampilkan 3 angka desimal, jadi 0.9 akan mencetak 0.900. Ini mencetak:

0.933
0.894

Pilih berdasarkan kesalahan yang lebih merugikan. Kasus flu yang terlewat dapat menyebar, jadi tes ini membutuhkan recall. Filter spam yang menyembunyikan email asli membutuhkan precision.

challenge icon

Tantangan

Sedang

Filter sebuah toko menyembunyikan ulasan yang tampak palsu. Kode awal membuat dua versi dari satu model, strict_pred dan eager_pred, lalu membaca kesalahan mana yang lebih merugikan: missed (ulasan palsu tetap ditampilkan) atau hidden (ulasan asli menghilang).

  1. Cetak precision dan recall setiap filter dengan 3 angka desimal.
  2. Cetak filter yang membuat lebih sedikit kesalahan tersebut, seperti di bawah ini (untuk missed: Fewer fakes missed: ...).

Untuk toko lain dan hidden:

Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strict

Coba sendiri

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score

# Kesalahan mana yang lebih merugikan: terlewat (ulasan palsu tetap tampil) atau tersembunyi (ulasan asli disembunyikan)
worse = input()

# Satu baris per ulasan: 1 pada fake berarti ulasan tersebut ditulis atas pesanan
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]

# Dua penyaring dari model yang sama: strict menyembunyikan ulasan jika peluangnya palsu mencapai 0.7, eager pada 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Terawasi

Latihan sendiri: Compiler Python online