Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?

Phân loại học máy là một loại học tập có giám sát trong đó một thuật toán ánh xạ một tập hợp các đầu vào để đầu ra rời rạc. Các mô hình phân loại có một loạt các ứng dụng trong các ngành công nghiệp khác nhau và là một trong những chính của việc học tập có giám sát.The simplicity of defining a problem makes classification models quite versatile and industry agnostic. 

Một phần quan trọng của việc xây dựng các mô hình phân loại là đánh giá hiệu suất mô hình. Nói tóm lại, các nhà khoa học dữ liệu cần một cách đáng tin cậy để kiểm tra khoảng cách một mô hình sẽ dự đoán chính xác một kết quả. Nhiều công cụ có sẵn để đánh giá hiệu suất mô hình; Tùy thuộc vào vấn đề mà bạn đang cố gắng giải quyết, một số có thể hữu ích hơn những người khác. & NBSP;

Ví dụ: nếu bạn có một đại diện bằng nhau của tất cả các kết quả trong độ chính xác dữ liệu của bạn, thì một ma trận nhầm lẫn có thể đủ dưới dạng số liệu hiệu suất. Ngược lại, nếu dữ liệu của bạn thể hiện sự mất cân bằng, có nghĩa là một hoặc nhiều kết quả được thể hiện đáng kể, bạn có thể muốn sử dụng một số liệu như độ chính xác. Nếu bạn muốn hiểu mô hình của bạn mạnh mẽ như thế nào trên các ngưỡng quyết định, các số liệu như khu vực dưới đường cong đặc tính vận hành máy thu (AUROC) và khu vực theo đường cong thu hồi chính xác (AUPRC) có thể phù hợp hơn. & NBSP;

Cho rằng việc chọn số liệu phân loại phù hợp phụ thuộc vào câu hỏi mà bạn đang cố gắng trả lời, mọi nhà khoa học dữ liệu nên quen thuộc với bộ số liệu hiệu suất phân loại. Thư viện Scikit-learn trong Python có một mô-đun số liệu giúp nhanh chóng tính toán độ chính xác, độ chính xác, AUROC và AUPRC dễ dàng. Hơn nữa, biết cách trực quan hóa hiệu suất mô hình thông qua các đường cong ROC, đường cong PR và ma trận nhầm lẫn cũng quan trọng không kém. & NBSP;

Ở đây, chúng tôi sẽ xem xét nhiệm vụ xây dựng một mô hình phân loại đơn giản dự đoán xác suất của khách hàng. Churn được định nghĩa là sự kiện của một khách hàng rời khỏi một công ty, hủy đăng ký hoặc không còn mua hàng sau một thời gian. Chúng tôi sẽ làm việc với dữ liệu Telco Churn, trong đó có thông tin về một công ty viễn thông hư cấu. Nhiệm vụ của chúng tôi sẽ là dự đoán liệu khách hàng có rời công ty hay không và đánh giá mô hình của chúng tôi thực hiện tốt như thế nào.Telco Churn data, which contains information about a fictional telecom company. Our tasks will be to predict whether or not the customer will leave the company and evaluate how well our model performs this task.

  • Xây dựng mô hình phân loại
  • Độ chính xác và ma trận nhầm lẫn
  • Đường cong ROC và Auroc
  • AUPRC

Xây dựng mô hình phân loại

Độ chính xác và ma trận nhầm lẫn

Đường cong ROC và Auroc

AUPRC

Hãy cùng bắt đầu bằng cách đọc dữ liệu Churco Telco vào DataFrame Pandas:
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

df = pd.read_csv('telco_churn.csv')

Bây giờ, hãy để hiển thị năm hàng dữ liệu đầu tiên:

df.head()
Image được tạo bởi tác giả.

import numpy as np 

df['Churn'] = np.where(df['Churn'] == 'Yes', 1, 0)

Chúng tôi thấy rằng tập dữ liệu chứa 21 cột với cả giá trị phân loại và số. Dữ liệu cũng chứa 7.043 hàng, tương ứng với 7.043 khách hàng duy nhất. & NBSP;

X = df[['tenure', 'MonthlyCharges']]

y = df['Churn']

Hãy để xây dựng một mô hình đơn giản cần có nhiệm kỳ, đó là khoảng thời gian mà khách hàng đã làm với công ty và tính phí hàng tháng là đầu vào và dự đoán xác suất của khách hàng. Đầu ra sẽ là cột Churn, có giá trị có hoặc không. & NBSP;

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y,

test_size=0.33, random_state=42)

Đầu tiên, hãy để sửa đổi cột mục tiêu của chúng tôi để có các giá trị nhị phân có thể đọc được bằng máy. Chúng tôi sẽ cung cấp cho cột Churn một giá trị của một cho Có và Zero cho không. Chúng ta có thể đạt được điều này bằng cách sử dụng phương thức WHERE () từ Numpy:

from sklearn.linear_models import LogisticRegression

Tiếp theo, & nbsp; & nbsp; hãy để xác định đầu vào và đầu ra của chúng tôi:

clf_model = LogisticRegression()

clf_model.fit(X_train, y_train)

Sau đó, chúng tôi có thể & nbsp; chia dữ liệu của chúng tôi để đào tạo và kiểm tra. Để làm điều này, chúng tôi cần nhập phương thức Train_Test_Split từ mô -đun model_selection trong sklearn. Hãy để tạo ra một tập huấn luyện tạo nên & nbsp; 67 phần trăm dữ liệu của chúng tôi và sau đó sử dụng dữ liệu còn lại để thử nghiệm. Bộ thử nghiệm được tạo thành từ 2.325 điểm dữ liệu:

y_pred = cllf_model.predict(X_test)

Đối với mô hình phân loại của chúng tôi, chúng tôi sẽ sử dụng mô hình hồi quy logistic đơn giản. Hãy cùng nhập lớp logisticRegression từ mô -đun linear_models trong sklearn:

Bây giờ, hãy để xác định một thể hiện của lớp hồi quy logistic của chúng tôi và lưu trữ nó trong một biến có tên là CLF_MODEL. Sau đó, chúng tôi sẽ phù hợp với mô hình của chúng tôi với dữ liệu đào tạo của chúng tôi:A Beginner’s Guide to Text Data Wrangling With Pandas in Python

Cuối cùng, chúng ta có thể đưa ra dự đoán về dữ liệu thử nghiệm và lưu trữ các dự đoán trong một biến có tên là Y_Pred: 

Bây giờ chúng tôi đã đào tạo mô hình của chúng tôi và đưa ra dự đoán về dữ liệu thử nghiệm, chúng tôi cần đánh giá mô hình của chúng tôi đã làm tốt như thế nào. & NBSP;

Thông tin thêm từ Sadrach Pierrea Hướng dẫn người mới bắt đầu về dữ liệu văn bản gây tranh cãi với gấu trúc trong Python

from sklearn.metrics import accuracy_score

print("Accuracy: ", accuracy_score(y_test, y_pred))
Image được tạo bởi tác giả.
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

Chúng tôi thấy rằng mô hình của chúng tôi có độ chính xác dự đoán là 79 phần trăm. Mặc dù điều này rất hữu ích, nhưng chúng tôi không thực sự biết nhiều về mô hình của chúng tôi dự đoán cụ thể hoặc không khuấy động. Ma trận nhầm lẫn có thể cung cấp cho chúng ta thêm một chút thông tin về mức độ mô hình của chúng ta làm cho từng kết quả. & NBSP;

Số liệu này rất quan trọng để xem xét nếu dữ liệu của bạn bị mất cân bằng. Ví dụ: nếu dữ liệu thử nghiệm của chúng tôi có 95 nhãn không có nhãn và năm nhãn Churn, bằng cách đoán không có Churn Churn cho mỗi khách hàng, nó có thể gây hiểu lầm về độ chính xác 95 %. & NBSP;

Chúng tôi sẽ tạo ra một sự nhầm lẫn_matrix từ dự đoán của chúng tôi bây giờ. Hãy cùng nhập gói ma trận nhầm lẫn từ mô -đun số liệu trong SKLearn:

from sklearn.metrics import confusion_matrix

Hãy để tạo ra mảng ma trận nhầm lẫn của chúng tôi và lưu trữ nó trong một biến có tên là Conmat:

df.head()
0

Hãy để tạo ra một khung dữ liệu từ mảng ma trận nhầm lẫn, được gọi là df_cm:

df.head()
1Image được tạo bởi tác giả.
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

Bây giờ, hãy để tạo ra ma trận nhầm lẫn của chúng tôi bằng phương pháp bản đồ nhiệt Seaborn:

df.head()
2Image được tạo bởi tác giả.
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

Vì vậy, chính xác những gì con số này cho chúng ta biết về hiệu suất của mô hình của chúng ta? Nhìn dọc theo đường chéo của ma trận nhầm lẫn, hãy để chú ý đến các số 1.553 và 289. Số 1.553 tương ứng với số lượng khách hàng được mô hình dự đoán chính xác để không khuấy động, có nghĩa là họ ở lại với công ty. Số 289 tương ứng với số lượng khách hàng mà mô hình dự đoán chính xác cho Churn. & NBSP;

Sẽ tốt hơn nếu chúng ta có thể hiển thị đây là tỷ lệ phần trăm của tổng số. Ví dụ, sẽ rất hữu ích khi biết bao nhiêu phần trăm của tất cả các khu vực thực hiện 289 khách hàng dự đoán chính xác. Chúng tôi có thể hiển thị tỷ lệ phần trăm cho từng kết quả bằng cách thêm dòng mã sau trước biểu đồ nhiệt của chúng tôi:

df.head()
3Image được tạo bởi tác giả.
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

Như chúng ta có thể thấy, mô hình của chúng tôi dự đoán chính xác 91 phần trăm khách hàng không phải là người và 46 phần trăm khách hàng làm. Điều này minh họa rõ ràng những hạn chế của việc sử dụng độ chính xác vì nó không cung cấp cho chúng tôi thông tin về tỷ lệ phần trăm của kết quả dự đoán chính xác. & NBSP;

Đường cong ROC và & NBSP; Auroc

Thông thường, các công ty muốn làm việc với xác suất dự đoán thay vì nhãn riêng biệt. Điều này cho phép họ chọn ngưỡng để ghi nhãn kết quả là âm hoặc dương. Khi xử lý xác suất, chúng ta cần một cách đo lường mức độ mô hình khái quát hóa trên các ngưỡng xác suất. Cho đến thời điểm này, thuật toán của chúng tôi đã được chỉ định nhãn nhị phân bằng cách sử dụng ngưỡng mặc định là 0,5, nhưng có thể ngưỡng xác suất lý tưởng cao hơn hoặc thấp hơn, tùy thuộc vào trường hợp sử dụng. & NBSP;

Trong trường hợp dữ liệu cân bằng, ngưỡng lý tưởng là 0,5. Khi dữ liệu của chúng tôi mất cân bằng, thì ngưỡng lý tưởng thường thấp hơn. Hơn nữa, các công ty đôi khi thích làm việc với xác suất thay vì các nhãn riêng biệt hoàn toàn. Với tầm quan trọng của xác suất dự đoán, rất hữu ích khi hiểu được số liệu để sử dụng để đánh giá chúng.

Auroc là một cách để đo lường mức độ mạnh mẽ của mô hình của bạn trên các ngưỡng quyết định. Đây là khu vực dưới âm mưu của tỷ lệ dương thực sự so với tỷ lệ dương tính giả. Tỷ lệ tích cực thực sự (TPR) là (tích cực thực sự)/(dương tính thực sự + âm tính sai). Tỷ lệ dương tính giả là (dương tính giả)/(dương tính giả + âm tính đúng). & Nbsp;

Trong bối cảnh vấn đề khó khăn của chúng tôi, điều này sẽ đo lường mức độ mô hình của chúng tôi nắm bắt tốt những khách hàng không vượt qua các ngưỡng xác suất khác nhau. & NBSP;

Hãy bắt đầu bằng cách tính toán Auroc. Hãy cùng nhập các phương thức ROC_CURVE và ROC_AUC_SCORE từ mô -đun số liệu:

df.head()
4

Tiếp theo, hãy để tạo xác suất dự đoán trong bộ thử nghiệm của chúng tôi bằng cách sử dụng mô hình được đào tạo của chúng tôi:

df.head()
5

Sau đó, chúng ta có thể tính toán tỷ lệ dương tính giả (cho) và & nbsp; Tỷ lệ dương tính (TPR) thực sự cho các ngưỡng xác suất khác nhau:

df.head()
6

Cuối cùng, chúng ta có thể vẽ đường cong ROC của mình:

df.head()
7Image được tạo bởi tác giả.
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

Tỷ lệ tích cực thực sự tiếp cận một càng nhanh, hành vi của đường cong ROC của chúng tôi càng tốt. Vì vậy, mô hình của chúng tôi hoạt động khá tốt trong các điều khoản này.

Hơn nữa, AUROC là 0,82 là khá tốt vì một mô hình hoàn hảo sẽ có AUROC là 1.0. Chúng tôi đã thấy rằng 91 phần trăm các trường hợp tiêu cực (có nghĩa là không bị khuấy) được dự đoán chính xác bởi mô hình của chúng tôi khi sử dụng ngưỡng mặc định là 0,5, vì vậy điều này không nên đến quá nhiều bất ngờ. & NBSP;

AUPRC (độ chính xác trung bình) & nbsp;

Khu vực dưới đường cong thu hồi chính xác cho chúng ta hiểu rõ về độ chính xác của chúng ta trên các ngưỡng quyết định khác nhau. Độ chính xác là (thực sự tích cực)/(dương tính thực sự + dương tính giả). Nhớ lại là một từ khác cho tỷ lệ tích cực thực sự. & Nbsp;

Trong trường hợp của Churn, AUPRC (hoặc độ chính xác trung bình) là thước đo mô hình của chúng tôi dự đoán chính xác khách hàng sẽ rời khỏi một công ty, trái ngược với dự đoán rằng khách hàng sẽ ở lại, qua các ngưỡng quyết định. Tạo đường cong chính xác/thu hồi và tính toán AUPRC tương tự như những gì chúng tôi đã làm cho AUROC:

df.head()
8Image được tạo bởi tác giả.
Hướng dẫn how do you find the accuracy of a classification model in python? - làm thế nào để bạn tìm thấy độ chính xác của một mô hình phân loại trong python?
Image created by the author.

Chúng ta có thể thấy rằng, với AUPRC là 0,63 và sự suy giảm độ chính xác nhanh chóng trong đường cong chính xác/thu hồi của chúng tôi, mô hình của chúng tôi thực hiện tồi tệ hơn & nbsp; công việc của & nbsp; dự đoán nếu khách hàng sẽ rời khỏi ngưỡng xác suất thay đổi. Kết quả này sẽ được mong đợi vì chúng tôi đã thấy rằng khi chúng tôi sử dụng ngưỡng mặc định là 0,5, chỉ có 46 phần trăm nhãn churn được dự đoán chính xác. Đối với những người quan tâm đến việc làm việc với dữ liệu và mã, tập lệnh Python có sẵn ở đây. & NBSP;here

Đánh giá mô hình phân loại

Các nhà khoa học dữ liệu trên các lĩnh vực và ngành công nghiệp phải có sự hiểu biết mạnh mẽ về các số liệu hiệu suất phân loại. Biết được số liệu để sử dụng cho dữ liệu mất cân bằng hoặc cân bằng là rất quan trọng để truyền đạt rõ ràng hiệu suất của mô hình của bạn. Sử dụng độ chính xác để truyền đạt kết quả từ một mô hình được đào tạo trên dữ liệu mất cân bằng có thể đánh lừa khách hàng nghĩ rằng mô hình của họ hoạt động tốt hơn so với thực tế. & NBSP;

Hơn nữa, có & nbsp; Một sự hiểu biết mạnh mẽ về cách dự đoán sẽ được sử dụng trong thực tế là rất quan trọng. Nó có thể là trường hợp một công ty tìm kiếm các nhãn kết quả riêng biệt mà họ có thể sử dụng để đưa ra quyết định. Trong các trường hợp khác, các công ty quan tâm nhiều hơn đến việc sử dụng xác suất để đưa ra quyết định của họ, trong trường hợp chúng tôi cần đánh giá xác suất. Làm quen với nhiều góc độ và cách tiếp cận để đánh giá hiệu suất mô hình là rất quan trọng đối với sự thành công của một dự án học máy. & NBSP;

Gói Scikit-learn trong Python thuận tiện cung cấp các công cụ cho hầu hết các số liệu hiệu suất bạn có thể cần sử dụng. Điều này cho phép bạn có được một cái nhìn về hiệu suất mô hình từ nhiều góc độ trong một khoảng thời gian ngắn và tương đối ít dòng mã. Nhanh chóng có thể tạo ra các ma trận nhầm lẫn, các đường cong ROC và các đường cong chính xác/thu hồi cho phép các nhà khoa học dữ liệu lặp lại nhanh hơn trong các dự án. & NBSP;

Cho dù bạn muốn nhanh chóng xây dựng và đánh giá mô hình học máy cho một vấn đề, so sánh các mô hình ML, chọn các tính năng mô hình & NBSP; hoặc điều chỉnh mô hình học máy của bạn, có kiến ​​thức tốt về các số liệu hiệu suất phân loại này là một bộ kỹ năng vô giá. & NBSP;

Làm thế nào để bạn tìm thấy độ chính xác của mô hình phân loại?

Độ chính xác là một số liệu được sử dụng trong các vấn đề phân loại được sử dụng để cho biết tỷ lệ phần trăm dự đoán chính xác.Chúng tôi tính toán nó bằng cách chia số lượng dự đoán chính xác cho tổng số dự đoán.dividing the number of correct predictions by the total number of predictions.

Làm thế nào để bạn tìm thấy điểm chính xác trong Python?

Bạn cũng có thể nhận được điểm chính xác trong Python bằng cách sử dụng hàm chính xác của sklearn.metrics_score () có trong các nhãn thực và nhãn dự đoán là đối số và trả về độ chính xác như một giá trị nổi.sklearn. metrics' accuracy_score() function which takes in the true labels and the predicted labels as arguments and returns the accuracy as a float value.

Làm thế nào để bạn kiểm tra độ chính xác của mô hình phân loại Sklearn?

Nếu bình thường hóa == true, hãy trả về phần của các mẫu được phân loại chính xác (float), thì khác sẽ trả về số lượng mẫu được phân loại chính xác (int).Hiệu suất tốt nhất là 1 với bình thường == true và số lượng mẫu có bình thường hóa == false.Tính độ chính xác cân bằng để đối phó với các bộ dữ liệu mất cân bằng.. The best performance is 1 with normalize == True and the number of samples with normalize == False . Compute the balanced accuracy to deal with imbalanced datasets.