Menu
CoddyTech
flag Ar iconالعربيةdown icon

الدقة والاستدعاء

جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 22 من 58.

هناك سؤالان لتقييم إجابات الاختبار بشأن الإنفلونزا. من بين تنبيهات الإنفلونزا التي أصدرها، كم منها كان صحيحًا؟ ومن بين حالات الإنفلونزا الفعلية، كم حالة اكتشفها؟

مصفوفة الالتباس لاختبار الإنفلونزا مرسومة مرتين. على اليسار، بعنوان Precision 42 / 45 = 0.933، عمود الإنفلونزا المذكورة مضاء: 3 إنذارات كاذبة و42 حالة مكتشفة. على اليمين، بعنوان Recall 42 / 47 = 0.894، صف الإنفلونزا مضاء: 5 حالات فائتة و42 حالة مكتشفة

الدقة تجيب عن السؤال الأول: 42 من أصل 45 إنذارًا. الاسترجاع يجيب عن السؤال الثاني: 42 من أصل 47 حالة.

from sklearn.metrics import precision_score, recall_score

print(f"{precision_score(y_test, pred):.3f}")
print(f"{recall_score(y_test, pred):.3f}")

يعرض :.3f دائمًا 3 منازل عشرية، لذا ستُطبع 0.9 بالشكل 0.900. يُطبع ما يلي:

0.933
0.894

اختر بناءً على الخطأ الأعلى تكلفة. فحالة الإنفلونزا التي لا يُكتشفها الاختبار قد تنتشر، لذا يحتاج هذا الاختبار إلى الاستدعاء. أما مرشح الرسائل المزعجة الذي يدفن الرسائل الحقيقية، فيحتاج إلى الدقة.

challenge icon

التحدي

متوسط

يُخفي عامل التصفية في متجرٍ ما المراجعات التي تبدو مزيفة. ينشئ الكود التمهيدي نسختين من نموذج واحد، strict_pred وeager_pred، ويقرأ أيّ الخطأين أشدّ ضررًا: missed (تبقى مراجعة مزيفة معروضة) أو hidden (تختفي مراجعة حقيقية).

  1. اطبع الدقة والاستدعاء لكل عامل تصفية، إلى 3 منازل عشرية.
  2. اطبع عامل التصفية الذي يرتكب عددًا أقل من ذلك الخطأ، كما هو موضح أدناه (بالنسبة إلى missed: Fewer fakes missed: ...).

بالنسبة إلى متجر آخر وhidden:

Strict: precision 0.900, recall 0.450
Eager: precision 0.640, recall 0.800
Fewer real reviews hidden: strict

جرّب بنفسك

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score

# أيّ الخطأين أشد ضررًا: تفويت مراجعة مزيفة (فتبقى ظاهرة) أم إخفاء مراجعة حقيقية؟
worse = input()

# صف واحد لكل مراجعة: القيمة 1 في fake تعني أن المراجعة كُتبت بطلب من جهة ما
reviews = pd.read_csv("reviews.csv")
features = ["words", "exclamations", "account_days", "user_reviews", "stars", "photo"]
X_train, X_test, y_train, y_test = train_test_split(reviews[features], reviews["fake"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
proba = model.predict_proba(X_test)[:, 1]

# مرشحان من النموذج نفسه: strict يخفي المراجعة عندما يكون احتمال زيفها 0.7، وeager عند 0.3
strict_pred = proba >= 0.7
eager_pred = proba >= 0.3

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت