Skip to content

Kılavuzlar

Sınıflandırıcılar ve regresörler

Tahmine dayalı bir model de diğer her sistem gibi değerlendirilir: bir çağrılabilir her vaka için bir tahmin döndürür ve değerlendiriciler onu okur. Değişen şey paydalardır. Doğruluk (accuracy), duyarlılık (recall) ve kesinlik (precision), üç farklı satır kümesi üzerindeki üç orandır; bir model bunlardan birinde iyi görünürken işin sorduğu soruda başarısız olabilir.

examples/churn_model/ bu sayfanın çalıştırdığı projedir: iki yüz hesap, deterministik bir müşteri kaybı (churn) modeli ve hiçbir sağlayıcı kimlik bilgisi yok.

Tahmin

Sistem bir etiket ve, modelde varsa, onun arkasındaki skoru döndürür:

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

Bir vaka doğruyu expected altında bildirir:

{"expected": {"label": false}, "id": "account_000", "input": {"recent_upgrade": true, "support_contacts": 0, "tenure_months": 0}, "metadata": {"plan": "enterprise"}}

`predictive:` bloğu

Tahminin, skorunun ve doğrunun nerede durduğu proje için bir kez bildirilir:

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]
AlanVarsayılanAnlamı
label_fieldlabeltahmin edilen etiketi tutan çıktı alanı
score_fieldscoreonun arkasındaki skoru tutan çıktı alanı
expected_fieldlabelexpected altında doğruyu tutan alan
positivetruehangi etiket değerinin pozitif sayıldığı; refund, 1 ya da true
calibration_bins10kalibrasyon tablosunun kaç skor bandı kullandığı
thresholdsyoktaranacak eşikler; her biri kanıttır, asla bir öneri değildir
averageyokbirden çok sınıf üzerindeki bir toplam için macro ya da micro

field, expected_field ya da positive değerlerini kendisi belirtmeyen her tahmine dayalı değerlendirici bunları bu bloktan alır; böylece bir paketin tek bir pozitif sınıfı olur. Karışıklık sayılarını, kalibrasyon tablosunu ve eşik taramasını üreten de bu bloktur; bu blok olmayan bir proje metrikleri alır, yanlarında başka hiçbir şey almaz.

Hiçbir vakanın etiketinin eşleşmediği bir pozitif sınıf, herhangi bir şey çalışmadan önce reddedilir, çünkü onun üzerindeki duyarlılık hiçbir şey üzerindeki bir oran olurdu. Aynı proje positive: churned ile:

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:` block

Değerlendiriciler

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: 20

predictive_log_loss için clip zorunludur, çünkü aksi hâlde kendinden emin tek bir hata sonsuz olur. predictive_ranking, bir sıralama metriğinin satırları sıraladığı ölçüttür ve istatistiği adlandıran bir metrics: girdisine ihtiyaç duyar: ROC-AUC ve ortalama kesinlik (average precision) farklı sorulara yanıt verir ve motor sizin yerinize birini seçmez.

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 │

excluded sütununu okuyun. Duyarlılık, müşteri kaybı yaşanan 64 hesap üzerinden ölçülür; bu yüzden diğer 136 hesap ondan hariç tutulur; kesinlik ise modelin işaretlediği 63 hesap üzerinden ölçülür. Bu hesapların yüzde otuz ikisi kaybedilir; dolayısıyla hiç kimsenin ayrılmayacağını tahmin eden bir model %68 doğrudur ve kimseyi bulmaz. Yalnızca doğruluğa konan bir alt sınır onu geçirirdi; örnek projenin politikasının her orana bir alt sınır koymasının nedeni budur.

pr_auc bir tahmine sahiptir ama aralığı yoktur. İki yüz satırda aralığı gerçekten de ROC-AUC'ninkinden daha zayıftır ve motor, destekleyemeyeceği bir sınırı göstermek yerine onu vermez. Onun üzerindeki bir kural şöyle okunur:

pr: INSUFFICIENT_EVIDENCE (interval_unavailable)

Metriklerin yanında

Karışıklık sayıları oran değil, sayıdır:

│ actually positive │ 52                 │ 12                 │
│ actually negative │ 11                 │ 125                │

Bunlardan birini adlandıran bir sürüm kuralı yapılandırma hatasıdır, çünkü bir sayı bir metrik değildir:

Configuration error: release rule 'fp' refers to unknown metric 'false_positives'

Kalibrasyon tablosu, modelin iddia ettiğini olanla skor bandına göre karşılaştırır:

│ 0.2-0.3 │ 26.7%   │ 0.0%     │ 34 rows │
│ 0.5-0.6 │ 53.4%   │ 81.0%    │ 21 rows │

Eşik taraması da bildirilen her eşiğin neyi ölçmüş olacağını gösterir:

│ 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  │

Taramanın başlığı Thresholds (exploratory; recommends nothing) şeklindedir. Hangi eşiğin doğru olduğu, bir yanlış pozitifin bir yanlış negatife göre neye mal olduğuna bağlıdır ve bu, motorun bilebileceği bir şey değildir.

Regresyon

Bir regresör mutlak hata ile puanlanır; bunun için hedeflerinin bulunduğu aralık gerekir:

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 zorunludur, varsayılan bir değeri yoktur. Mutlak hata sınırlı bir ortalamadır ve güven aralığı yalnızca her değerin içinde kaldığı bir değer aralığında geçerlidir. Daha geniş bir değer aralığı daha geniş bir güven aralığı demektir; bu yüzden hedeflerin gerçekten alabileceği aralığı bildirin. Kural karar veremez: tahmin bütçenin içindedir ve 120 sipariş, gerçek ortalama hatanın da öyle olduğunu henüz gösteremez.

Sonraki adımlar