Ví dụ về trăn Roc_auc_score

Một cách thực sự hiệu quả để đánh giá khả năng dự đoán của bộ phân loại là vẽ đồ thị Đường cong ROC (Đặc điểm hoạt động của máy thu)

Điều này ai cũng biết, nhưng bạn có biết cách diễn giải Đường cong ROC không?

Trực giác đường cong ROC

Đường cong này cho chúng ta thấy hành vi của bộ phân loại đối với mọi ngưỡng bằng cách vẽ hai biến. tỷ lệ tích cực thực sự (TPR) và tỷ lệ tích cực sai (FPR)

Tỷ lệ tích cực thực sự thường được gọi là Thu hồi / Độ nhạy và được định nghĩa là

Trong khi Tỷ lệ dương tính giả được định nghĩa là

Trên hình ảnh bên dưới, chúng tôi minh họa đầu ra của mô hình Hồi quy logistic cho một tập dữ liệu nhất định. Khi chúng tôi xác định ngưỡng ở mức 50%, không có quan sát tích cực thực tế nào sẽ được phân loại là tiêu cực, vì vậy FN = 0 và TP = 11, nhưng 4 ví dụ tiêu cực sẽ được phân loại là tích cực, vì vậy FP = 4 và 15 quan sát tiêu cực được phân loại là

Chuyển thể từ Google Developers

Khi chúng tôi chuyển ngưỡng lên 75%, chỉ những quan sát tích cực sẽ được phân loại là tích cực, vì vậy TP = 7 và FP = 0, trong khi tất cả các quan sát tiêu cực sẽ được phân loại là tiêu cực và TN = 19. Chúng tôi vẫn có 4 quan sát tích cực được phân loại là tiêu cực, vì vậy FN = 4

Chúng ta có thể tính toán TPR và FPR cho từng ngưỡng này và so sánh chúng

Ngưỡng tốt nhất phụ thuộc vào mục tiêu của mô hình. Nếu điều quan trọng hơn là phải phân loại tất cả các mặt tích cực là tích cực, ngay cả khi điều đó có nghĩa là phân loại một số mặt tiêu cực là tích cực, thì ngưỡng 50% sẽ tốt hơn (xem ví dụ bên dưới)

1) Dự đoán sự cố ô tô — Thu hồi cao, Độ chính xác thấp

Giả sử rằng bạn làm việc cho một nhà sản xuất ô tô thu thập dữ liệu từ ô tô và mô hình của bạn cố gắng dự đoán khi nào ô tô sẽ bị hỏng để khách hàng được cảnh báo nên đến cửa hàng sửa chữa để kiểm tra

Trong trường hợp này, bạn có thể muốn thu hồi cao, điều đó có nghĩa là tất cả chủ sở hữu ô tô có lỗi tiềm ẩn sẽ được cảnh báo để kiểm tra. Tuy nhiên, bằng cách tối đa hóa việc thu hồi, chúng tôi cũng có thể gửi cảnh báo đến những chiếc xe không có khả năng bị hỏng sớm (Dương tính giả), do đó làm giảm độ chính xác. Chủ nhân của một chiếc xe dương tính giả sẽ gặp một chút bất tiện khi đến cửa hàng sửa chữa chỉ để biết rằng chiếc xe của mình vẫn ổn, nhưng mặt khác, hầu hết các trường hợp xe có thể bị hỏng (và thậm chí có thể gây ra tai nạn) là

Chúng tôi giảm FN (và tăng thu hồi) nhưng tăng FP (và giảm độ chính xác)

Bây giờ nếu chúng ta muốn có một mô hình với độ tin cậy cao trên mọi quan sát được phân loại là tích cực, ngay cả khi điều đó có nghĩa là phân loại sai một số quan sát tích cực thành tiêu cực, thì ngưỡng 75% là lựa chọn tốt nhất (xem ví dụ chọn cổ phiếu bên dưới)

2) Dự đoán chọn cổ phiếu — Thu hồi thấp, Độ chính xác cao

Ở đây bạn là một nhà giao dịch trên thị trường chứng khoán và muốn xây dựng một mô hình để giúp bạn chọn cổ phiếu. Mô hình này sẽ phân loại là tích cực một cổ phiếu có xác suất cao mang lại lợi nhuận tốt

Trong trường hợp này, bạn chỉ muốn mua những cổ phiếu tốt nhất, vì số tiền của bạn có hạn và bạn không muốn chịu nhiều rủi ro. Đây là trường hợp bạn muốn nâng cao độ chính xác và chỉ chọn những cổ phiếu có nhiều khả năng mang lại lợi nhuận nhất, ngay cả khi điều đó có nghĩa là một số cổ phiếu tốt có thể bị loại (Phủ định sai)

Bằng cách chỉ chọn những cái tốt nhất, chúng tôi giảm các Kết quả Xác định Sai (và tăng độ chính xác) trong khi chấp nhận tăng các Kết quả Phủ định Sai (và giảm khả năng thu hồi)

Giải thích đường cong ROC

Mục đích của Đường cong ROC là cho thấy mô hình hoạt động tốt như thế nào đối với mọi ngưỡng có thể, dưới dạng mối quan hệ giữa TPR và FPR. Vì vậy, về cơ bản để vẽ đồ thị đường cong, chúng ta cần tính toán các biến này cho từng ngưỡng và vẽ đồ thị trên mặt phẳng

Trên các ô bên dưới, đường màu xanh lá cây biểu thị vị trí TPR = FPR, trong khi đường màu xanh lam biểu thị đường cong ROC của bộ phân loại. Nếu đường cong ROC nằm chính xác trên đường màu xanh lá cây, điều đó có nghĩa là bộ phân loại có khả năng dự đoán giống như tung đồng xu

Hình ảnh của tác giả

Trên biểu đồ bên trái, đường màu xanh lam tương đối gần với đường màu xanh lá cây, điều đó có nghĩa là trình phân loại không tốt. Biểu đồ ngoài cùng bên phải cho thấy một bộ phân loại tốt, với đường cong ROC gần các trục hơn và “khuỷu tay” gần với tọa độ (0,1). Cái ở giữa là một bộ phân loại đủ tốt, gần với những gì có thể nhận được từ dữ liệu trong thế giới thực

Một cách khác để giải thích đường cong ROC là suy nghĩ về sự phân tách của các lớp và chúng ta có thể minh họa điều đó bằng biểu đồ, như bên dưới

Hình ảnh của tác giả

Bộ phân loại kém (trái) có quá nhiều lớp trùng lặp và do đó không thể đưa ra dự đoán tốt và không có ngưỡng nào có thể tách các lớp. Đúng như dự đoán, bộ phân loại tốt (bên phải) hầu như không có sự trùng lặp, vì vậy chúng ta có thể dễ dàng tìm thấy một ngưỡng tốt để tách các dự đoán trong các lớp bên phải của chúng. Cuối cùng cái ở giữa nằm ở giữa. có một số chồng chéo, nhưng có thể đạt được kết quả tốt bằng cách đặt ngưỡng phù hợp

ROC AUC

Bây giờ bạn đã biết ROC Curves hữu ích như thế nào, nhưng làm thế nào để đánh giá chúng? . Khu vực dưới đường cong (AUC)

Đường cong AUROC (Khu vực dưới đường cong ROC) hay đơn giản là Điểm AUC của ROC, là số liệu cho phép chúng tôi so sánh các Đường cong ROC khác nhau

Đường màu xanh lá cây là giới hạn dưới và khu vực dưới đường đó là 0. 5 và Đường cong ROC hoàn hảo sẽ có diện tích là 1. ROC AUC của mô hình của chúng tôi càng gần từ 1 thì càng tốt trong việc phân tách các lớp và đưa ra dự đoán tốt hơn

Chúng ta có thể sử dụng sklearn để dễ dàng tính toán ROC AUC

from sklearn.metrics import roc_auc_score
score = roc_auc_score(y_real, y_pred)
print(f"ROC AUC: {score:.4f}")

đầu ra là

ROC AUC: 0.8720

Khi sử dụng

ROC AUC: 0.8720
0, Đường cong ROC sẽ chỉ có các số “1” và “0” để tính toán các biến, do đó, Đường cong ROC sẽ là một giá trị gần đúng. Để tránh hiệu ứng này và nhận được kết quả chính xác hơn, nên sử dụng
ROC AUC: 0.8720
1 và lấy xác suất của loại “1”, khi tính ROC AUC

score = roc_auc_score(y_real, y_proba[:, 1)
print(f"ROC AUC: {score:.4f}")

đầu ra là

ROC AUC: 0.9271
Vẽ đường cong ROC từ đầu

Tôi tin rằng cách tốt nhất để hiểu một khái niệm là thử nghiệm với khái niệm đó, vì vậy hãy tìm hiểu cách vẽ đồ thị Đường cong ROC từ đầu. Sau này tôi sẽ chỉ cho bạn cách dễ dàng thực hiện điều đó với thư viện sklearn

Bạn có thể tìm thấy mã có sẵn trên kho lưu trữ github của tôi, vì vậy vui lòng bỏ qua phần này

Bài viết/Đường cong ROC và ROC AUC tại chính · vinyluis/Bài viết

Điều 1. Giải thích Đường cong ROC và ROC AUC để Đánh giá Phân loại (TBD) [EN] Đường cong ROC là gì, cách…

github. com

Đầu tiên chúng ta cần đào tạo một mô hình phân loại trong tập dữ liệu

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
# Split train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
# Create the model object
model = GaussianNB()
# Fit the model to the training data
model.fit(X_train, y_train)
# Predict the classes on the test data
y_pred = model.predict(X_test)
# Predict the classes on the test data, and return the probabilities for each class
y_proba = model.predict_proba(X_test)

Sau đó, chúng tôi xác định một hàm để tính toán TPR và FPR cho từng trường hợp, dựa trên các phương trình được trình bày trước đây

from sklearn.metrics import confusion_matrixdef calculate_tpr_fpr(y_real, y_pred):
# Calculates the confusion matrix and recover each element
cm = confusion_matrix(y_real, y_pred)
TN = cm[0, 0]
FP = cm[0, 1]
FN = cm[1, 0]
TP = cm[1, 1]
# Calculates tpr and fpr
tpr = TP/(TP + FN) # sensitivity - true positive rate
fpr = 1 - TN/(TN+FP) # 1-specificity - false positive rate

return tpr, fpr

Chúng tôi muốn đánh giá TPR và FPR cho mọi ngưỡng, vì vậy chúng tôi xác định một hàm sẽ tạo ngưỡng “n” và lặp lại chúng để tính toán các biến và lưu trữ chúng trong danh sách. Đó sẽ là tọa độ của các điểm Đường cong ROC

Trong bộ phân loại nhị phân, các dự đoán có thể là “0” hoặc “1” và việc di chuyển ngưỡng sẽ không có hiệu lực. Để đảm bảo chúng tôi có thể có đường cong chính xác, chúng tôi cần sử dụng xác suất phân loại từng quan sát trong lớp “1”, và chúng tôi nhận được các xác suất đó bằng phương pháp

ROC AUC: 0.8720
2

def get_n_roc_coordinates(y_real, y_proba, n = 50):
tpr_list = [0]
fpr_list = [0]
for i in range(n):
threshold = i/n
y_pred = y_proba[:, 1] > threshold
tpr, fpr = calculate_tpr_fpr(y_real, y_pred)
tpr_list.append(tpr)
fpr_list.append(fpr)
return tpr_list, fpr_list

Cuối cùng, chúng ta có thể sử dụng seaborn để vẽ các điểm và đường cong, bằng cách chuyển danh sách tpr và fpr cho hàm bên dưới

import seaborn as sns
import matplotlib.pyplot as plt
def plot_roc_curve(tpr, fpr, scatter = True):
plt.figure(figsize = (5, 5))
if scatter:
sns.scatterplot(x = fpr, y = tpr)
sns.lineplot(x = fpr, y = tpr)
sns.lineplot(x = [0, 1], y = [0, 1], color = 'green')
plt.xlim(-0.05, 1.05)
plt.ylim(-0.05, 1.05)
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")

Kết quả là một Đường cong ROC khá tốt, sử dụng các đường gần đúng cho các phân đoạn mà không cần tính tọa độ

# Calculates 10 coordinates of the ROC Curve
tpr, fpr = get_n_roc_coordinates(y_test, y_proba, resolution = 10)
# Plots the ROC curve
plot_roc_curve(tpr, fpr)

Vẽ đường cong ROC bằng Scikit-Learn

Chắc chắn bạn sẽ không xây dựng Đường cong ROC từ đầu mỗi khi bạn cần điều đó, vì vậy tôi sẽ chỉ cách vẽ biểu đồ đó bằng scikit-learning

Kiểm tra xem nó đơn giản như thế nào

from sklearn.metrics import roc_curve
from sklearn.metrics import RocCurveDisplay
def plot_sklearn_roc_curve(y_real, y_pred):
fpr, tpr, _ = roc_curve(y_real, y_pred)
roc_display = RocCurveDisplay(fpr=fpr, tpr=tpr).plot()
roc_display.figure_.set_size_inches(5,5)
plt.plot([0, 1], [0, 1], color = 'g')
# Plots the ROC curve using the sklearn methods - Good plot
plot_sklearn_roc_curve(y_test, y_proba[:, 1])
# Plots the ROC curve using the sklearn methods - Bad plot
plot_sklearn_roc_curve(y_test, y_pred)

Hàm

ROC AUC: 0.8720
3 tính toán tất cả các tọa độ FPR và TPR, trong khi hàm
ROC AUC: 0.8720
4 sử dụng chúng làm tham số để vẽ đường cong. Dòng
ROC AUC: 0.8720
5 vẽ đường màu xanh lá cây và là tùy chọn

Nếu bạn sử dụng đầu ra của

ROC AUC: 0.8720
6 làm tham số y_pred, kết quả sẽ là một đường cong ROC tuyệt đẹp

Nhưng nếu bạn sử dụng trực tiếp đầu ra của

ROC AUC: 0.8720
7, thì phương thức sẽ không có tất cả thông tin cần thiết để xây dựng tất cả các điểm và biểu đồ sẽ là một xấp xỉ của hai đoạn thẳng

Phần kết luận

Kết luận của bài viết này là. ROC AUC cuối cùng là thước đo sự phân tách giữa các lớp trong bộ phân loại nhị phân. Tôi ước đây là cách nó được giải thích cho tôi khi bắt đầu hành trình trở thành một nhà khoa học dữ liệu và tôi hy vọng điều này sẽ tạo ra sự khác biệt cho tất cả những người đọc bài viết này

Nếu bạn thích bài đăng này…

Ủng hộ mình 1 ly cafe

Mua cho tôi một ly cà phê

Và nếu bạn thích chủ đề này, hãy xem bài viết của tôi giải thích việc sử dụng Đường cong ROC để phân loại đa lớp

roc_auc_score trong Python là gì?

roc_auc_score được định nghĩa là khu vực bên dưới đường cong ROC , là đường cong có Tỷ lệ dương tính giả trên trục x và Tỷ lệ dương tính thật . Nhưng không thể tính FPR và TPR cho các phương pháp hồi quy, vì vậy chúng tôi không thể đi theo con đường này.

Làm cách nào để sử dụng điểm ROC AUC trong Python?

Đường cong ROC và AUC trong Python . Giống như hàm roc_curve(), hàm AUC lấy cả kết quả thực (0,1) từ tập kiểm tra và xác suất dự đoán cho lớp 1. The AUC for the ROC can be calculated using the roc_auc_score() function. Like the roc_curve() function, the AUC function takes both the true outcomes (0,1) from the test set and the predicted probabilities for the 1 class.

Điểm ROC AUC tốt là gì?

Kết quả diện tích dưới đường cong ROC (AUC) được coi là xuất sắc đối với các giá trị AUC trong khoảng từ 0. 9-1, phù hợp với các giá trị AUC trong khoảng 0. 8-0. 9 , hợp lý cho các giá trị AUC trong khoảng từ 0. 7-0. 8, kém đối với các giá trị AUC trong khoảng 0. 6-0. 7 và không thành công đối với các giá trị AUC trong khoảng từ 0. 5-0. 6.

Điểm ROC AUC được sử dụng để làm gì?

AUC - Đường cong ROC là phép đo hiệu suất cho các vấn đề phân loại ở các cài đặt ngưỡng khác nhau . ROC là một đường cong xác suất và AUC biểu thị mức độ hoặc thước đo khả năng phân tách. Nó cho biết mức độ mô hình có khả năng phân biệt giữa các lớp.