Skip to content

Hướng dẫn

Bộ phân loại và mô hình hồi quy

Một mô hình dự đoán được đánh giá như mọi hệ thống khác: một hàm gọi được trả về một dự đoán cho mỗi trường hợp, và các bộ đánh giá đọc dự đoán đó. Điều thay đổi là các mẫu số. Accuracy, recall và precision là ba tỷ lệ trên ba tập hàng khác nhau, và một mô hình có thể trông tốt ở tỷ lệ này trong khi không đáp ứng câu hỏi mà doanh nghiệp đang đặt ra.

examples/churn_model/ là dự án mà trang này chạy: hai trăm tài khoản, một mô hình churn tất định, và không cần thông tin xác thực của nhà cung cấp nào.

Dự đoán

Hệ thống trả về một nhãn và, nếu mô hình có, điểm số đứng sau nhãn đó:

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

Một trường hợp khai báo giá trị thực dưới expected:

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

Khối `predictive:`

Nơi chứa dự đoán, điểm số của nó và giá trị thực được khai báo một lần, cho cả dự án:

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]
TrườngMặc địnhÝ nghĩa
label_fieldlabeltrường đầu ra chứa nhãn được dự đoán
score_fieldscoretrường đầu ra chứa điểm số đứng sau nhãn
expected_fieldlabeltrường dưới expected chứa giá trị thực
positivetruegiá trị nhãn nào được tính là dương tính; refund, 1 hoặc true
calibration_bins10số dải điểm mà bảng hiệu chuẩn sử dụng
thresholdskhông cócác ngưỡng cắt để quét; mỗi ngưỡng là bằng chứng, không bao giờ là khuyến nghị
averagekhông cómacro hoặc micro, cho một giá trị tổng hợp trên nhiều lớp

Mọi bộ đánh giá dự đoán không tự khai báo field, expected_field hoặc positive đều lấy các giá trị này từ khối trên, nên một bộ kiểm thử chỉ có một lớp dương tính. Khối này cũng là thứ tạo ra các số đếm nhầm lẫn, bảng hiệu chuẩn và phần quét ngưỡng; một dự án không có nó sẽ nhận được các chỉ số và không có gì bên cạnh.

Một lớp dương tính mà không nhãn nào của trường hợp nào khớp sẽ bị từ chối trước khi bất cứ thứ gì chạy, vì recall trên lớp đó sẽ là một tỷ lệ trên tập rỗng. Cùng dự án đó với 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:` block

Các bộ đánh giá

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 yêu cầu clip, vì nếu không, chỉ một lỗi tự tin cũng cho giá trị vô hạn. predictive_ranking là tiêu chí mà một chỉ số xếp hạng dùng để sắp thứ tự các hàng, và nó cần một mục metrics: nêu tên thống kê: ROC-AUC và average precision trả lời những câu hỏi khác nhau, và engine sẽ không chọn thay bạn.

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 │

Hãy đọc cột excluded. Recall được đo trên 64 tài khoản đã churn, nên 136 tài khoản còn lại bị loại trừ khỏi nó; precision được đo trên 63 tài khoản mà mô hình gắn cờ. Ba mươi hai phần trăm số tài khoản này churn, nên một mô hình dự đoán không ai churn sẽ có accuracy 68% và không tìm ra ai cả. Một ngưỡng sàn chỉ trên accuracy sẽ cho nó đạt, đó là lý do chính sách của ví dụ đặt một ngưỡng sàn cho từng tỷ lệ.

pr_auc có một ước lượng và không có khoảng. Với hai trăm hàng, khoảng của nó thực sự yếu hơn của ROC-AUC, và engine giữ lại một cận mà nó không thể chứng minh thay vì hiển thị nó. Một quy tắc trên chỉ số này cho kết quả:

pr: INSUFFICIENT_EVIDENCE (interval_unavailable)

Bên cạnh các chỉ số

Các số đếm nhầm lẫn là số đếm, không phải tỷ lệ:

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

Một quy tắc phát hành nêu tên một số đếm là lỗi cấu hình, vì một số đếm không phải là chỉ số:

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

Bảng hiệu chuẩn đặt những gì mô hình tuyên bố cạnh những gì đã xảy ra, theo dải điểm:

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

Và phần quét ngưỡng cho thấy mỗi ngưỡng cắt đã khai báo sẽ đo được gì:

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

Phần quét có tiêu đề Thresholds (exploratory; recommends nothing). Ngưỡng cắt nào là đúng phụ thuộc vào chi phí của một dương tính giả so với một âm tính giả, và đó không phải là điều engine có thể biết.

Hồi quy

Một mô hình hồi quy được chấm điểm bằng sai số tuyệt đối, vốn cần biết khoảng giá trị mà các mục tiêu của nó nằm trong:

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 là bắt buộc, không có giá trị mặc định. Sai số tuyệt đối là một trung bình bị chặn, và khoảng tin cậy của nó chỉ đúng trong một khoảng giá trị mà mọi giá trị đều nằm trong. Khoảng giá trị rộng hơn cho khoảng tin cậy rộng hơn, nên hãy khai báo khoảng giá trị mà các mục tiêu thực sự có thể nhận. Quy tắc không thể quyết định: ước lượng nằm trong ngân sách, và 120 đơn hàng chưa thể cho thấy sai số trung bình thực sự cũng nằm trong đó.

Tiếp theo

  • Lát cắt trình bày các dải confidence: và độ hỗ trợ của lát cắt.
  • Quy tắc so sánh trình bày cách so sánh hai phiên bản mô hình.