Panduan
Classifier dan regressor
Model prediktif dievaluasi seperti sistem lain: sebuah callable mengembalikan prediksi untuk setiap kasus, dan evaluator membacanya. Yang berubah adalah penyebutnya. Accuracy, recall, dan precision adalah tiga rasio atas tiga himpunan baris yang berbeda, dan sebuah model bisa tampak baik pada salah satunya sambil gagal menjawab pertanyaan yang diajukan bisnis.
examples/churn_model/ adalah proyek yang dijalankan halaman ini: dua ratus akun, model churn yang deterministik, dan tanpa kredensial penyedia.
Prediksinya
Sistem mengembalikan label dan, jika modelnya punya, skor di baliknya:
from oloproof import system
@system(name="churn-model", version="slice-f-example")
def run(account):
score = churn_score(account)
return {"label": score >= 0.5, "score": round(score, 4)}Sebuah kasus menyatakan kebenarannya di bawah expected:
{"expected": {"label": false}, "id": "account_000", "input": {"recent_upgrade": true, "support_contacts": 0, "tenure_months": 0}, "metadata": {"plan": "enterprise"}}Blok `predictive:`
Lokasi prediksi, skornya, dan kebenarannya dinyatakan sekali, untuk seluruh proyek:
predictive:
label_field: label
score_field: score
expected_field: label
positive: true
calibration_bins: 10
thresholds: [0.3, 0.4, 0.5, 0.6, 0.7]| Field | Bawaan | Arti |
|---|---|---|
| label_field | label | field output yang memuat label prediksi |
| score_field | score | field output yang memuat skor di baliknya |
| expected_field | label | field di bawah expected yang memuat kebenarannya |
| positive | true | nilai label mana yang dihitung sebagai positif; refund, 1 atau true |
| calibration_bins | 10 | berapa banyak pita skor yang digunakan tabel kalibrasi |
| thresholds | tidak ada | batas potong yang disapu; masing-masing adalah bukti, tidak pernah rekomendasi |
| average | tidak ada | macro atau micro, untuk agregat atas beberapa kelas |
Setiap evaluator prediktif yang tidak menyatakan sendiri field, expected_field, atau positive mengambilnya dari blok ini, sehingga satu suite memiliki satu kelas positif. Blok ini juga yang menghasilkan hitungan confusion, tabel kalibrasi, dan sapuan threshold; proyek tanpa blok ini hanya mendapat metriknya dan tidak ada yang lain di sampingnya.
Kelas positif yang tidak cocok dengan label kasus mana pun ditolak sebelum apa pun dijalankan, karena recall atasnya akan menjadi rasio atas ketiadaan. Proyek yang sama dengan positive: churned:
Configuration error: evaluator 'recall' counts 'churned' as the positive class, and no case's 'label' is 'churned' (labels: False, True); declare `positive:` on the evaluator or in the `predictive:` blockEvaluatornya
evaluators:
- {type: predictive_correct, criterion: accuracy}
- {type: predictive_recall, criterion: recall}
- {type: predictive_precision, criterion: precision}
- {type: predictive_brier, criterion: brier}
- {type: predictive_log_loss, criterion: log_loss, clip: 0.02}
- {type: predictive_ranking, criterion: rank}
metrics:
- {id: roc_auc, type: ranking, criterion: rank, statistic: roc_auc}
- {id: pr_auc, type: ranking, criterion: rank, statistic: average_precision}
slices: [metadata.plan, "confidence:0.5"]
min_slice_support: 20predictive_log_loss mewajibkan clip, karena satu kesalahan yang yakin akan bernilai tak hingga jika tidak dibatasi. predictive_ranking adalah kriteria yang dipakai metrik peringkat untuk mengurutkan baris, dan ia memerlukan entri metrics: yang menyebut statistiknya: ROC-AUC dan average precision menjawab pertanyaan yang berbeda, dan engine tidak akan memilihkannya untuk Anda.
oloproof run│ accuracy │ 88.5% │ [83.2%, 92.6%] │ 177 / 200 observed · 0 missing · 0 excluded │
│ recall │ 81.2% │ [69.5%, 90.0%] │ 52 / 64 observed · 0 missing · 136 excluded │
│ precision │ 82.5% │ [70.9%, 91.0%] │ 52 / 63 observed · 0 missing · 137 excluded │
│ brier │ 0.120 │ [0.094, 0.154] │ mean of 200 observed · 0 missing · 0 excluded │
│ log_loss │ 0.389 │ [0.323, 0.499] │ mean of 200 observed · 0 missing · 0 excluded │
│ roc_auc │ 92.3% │ [69.3%, 100.0%] │ roc_auc over 64 positive · 136 negative · 0 missing · 0 excluded │
│ pr_auc │ 86.5% │ │ average_precision over 64 positive · 136 negative · 0 missing · 0 excluded │Baca kolom excluded. Recall diukur atas 64 akun yang churn, sehingga 136 lainnya dikecualikan darinya; precision atas 63 akun yang ditandai model. Tiga puluh dua persen dari akun ini churn, sehingga model yang memprediksi tidak ada yang churn akurat 68% dan tidak menemukan siapa pun. Batas bawah pada accuracy saja akan meloloskannya, itulah sebabnya kebijakan contoh ini memasang batas bawah pada setiap rasio.
pr_auc memiliki estimasi tanpa interval. Pada dua ratus baris, intervalnya memang lebih lemah daripada interval ROC-AUC, dan engine menahan batas yang tidak dapat didukungnya alih-alih menampilkannya. Aturan atasnya berbunyi:
pr: INSUFFICIENT_EVIDENCE (interval_unavailable)Di samping metrik
Hitungan confusion adalah hitungan, bukan rasio:
│ actually positive │ 52 │ 12 │
│ actually negative │ 11 │ 125 │Aturan rilis yang menyebut salah satunya adalah kesalahan konfigurasi, karena hitungan bukanlah metrik:
Configuration error: release rule 'fp' refers to unknown metric 'false_positives'Tabel kalibrasi membandingkan apa yang diklaim model dengan apa yang terjadi, per pita skor:
│ 0.2-0.3 │ 26.7% │ 0.0% │ 34 rows │
│ 0.5-0.6 │ 53.4% │ 81.0% │ 21 rows │Dan sapuan threshold menunjukkan apa yang akan diukur oleh setiap batas potong yang dinyatakan:
│ 0.3 │ 57.4% │ 96.9% │ 62/108 predicted positive · 62/64 actual positive │
│ 0.5 │ 82.5% │ 81.2% │ 52/63 predicted positive · 52/64 actual positive │
│ 0.7 │ 100.0% │ 37.5% │ 24/24 predicted positive · 24/64 actual positive │Sapuan itu berjudul Thresholds (exploratory; recommends nothing). Batas potong mana yang tepat bergantung pada biaya false positive dibandingkan false negative, dan itu bukan sesuatu yang dapat diketahui engine.
Regresi
Regressor dinilai dengan galat absolut, yang memerlukan rentang tempat target-targetnya berada:
evaluators:
- type: predictive_absolute_error
criterion: days_error
field: days
expected_field: days
target_range: [0, 20]rules:
- id: error-budget
metric: days_error
max: 1.5│ days_error │ 1.02 │ [0.78, 1.88] │ mean of 120 observed · 0 missing · 0 excluded │error-budget: INSUFFICIENT_EVIDENCE (interval_overlaps_threshold)target_range wajib, tidak memiliki nilai bawaan. Galat absolut adalah rata-rata terbatas, dan intervalnya hanya berlaku dalam rentang yang memuat setiap nilai. Rentang yang lebih lebar berarti interval yang lebih lebar, jadi nyatakan rentang yang benar-benar dapat diambil target. Aturan ini tidak dapat memutuskan: estimasinya berada di dalam anggaran, dan 120 pesanan belum dapat menunjukkan bahwa rata-rata galat yang sebenarnya juga demikian.
Langkah selanjutnya
- Irisan (slice) membahas pita confidence: dan dukungan irisan.
- Aturan perbandingan membahas cara membandingkan dua versi model.