إذا استخدمت بيانات الاختبار لحساب متوسطات التنظيف أو اختيار الخصائص، فقد يحصل النموذج على معلومات لن تتاح له عند استقبال بيانات جديدة. عندها لا تفسر الدرجة المرتفعة قدرته على التعميم كما تتوقع. سنفصل التدريب عن الاختبار في مثال Iris، ونقارن نموذجاً بخط أساس، مع توضيح ما تمنعه Pipeline وما يحتاج فحصاً في طريقة إنشاء البيانات نفسها.

حدد مدخلات النموذج ومخرجه ومقياس التقييم

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

اكتب قرار المقياس قبل تجربة عشرات النماذج. الدقة Accuracy مناسبة لعرض عدد التنبؤات الصحيحة، بينما Macro F1 يعطي الفئات أوزانًا متساوية عند تلخيص precision وrecall. إن كانت تكلفة تفويت فئة أعلى، اعرض recall الخاص بها ومصفوفة الالتباس؛ لا تختصر قرارًا عمليًا في رقم واحد.

الفصل يأتي قبل التحويل

قسّم البيانات قبل حساب المتوسطات أو تعويض القيم أو اختيار الخصائص. استخدم fit على التدريب فقط، ثم transform على التحقق والاختبار. تجمع Pipeline خطوات المعالجة مع النموذج وتساعد على تطبيقها داخل كل طية أثناء التحقق المتقاطع. يشرح دليل scikit-learn للأخطاء الشائعة هذا الفرق وأثر تسرب المعلومات.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.dummy import DummyClassifier
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42, stratify=y)

models = {
    "baseline": DummyClassifier(strategy="most_frequent"),
    "logistic": make_pipeline(
        StandardScaler(), LogisticRegression(max_iter=1000))
}
for name, model in models.items():
    model.fit(X_train, y_train)
    prediction = model.predict(X_test)
    print(name)
    print("accuracy:", accuracy_score(y_test, prediction))
    print("macro_f1:", f1_score(y_test, prediction, average="macro"))
    print("confusion_matrix:", confusion_matrix(y_test, prediction))

يحافظ stratify هنا على تمثيل الفئات في التقسيم، وrandom_state يجعل اختيار الصفوف قابلًا للتكرار ضمن البيئة نفسها. لا توجد أرقام نتائج جاهزة في المقال؛ شغّل المثال وسجّل إصدار Python وscikit-learn والنتيجة الفعلية. لم يُشغّل المثال في بيئة التحقق لعدم توفر scikit-learn، ولذلك تبقى نتائجه غير مقاسة.

لماذا نحتاج خط أساس؟

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

سجل تجربة يُملأ بعد التشغيل
البندما يسجل
نسخة البياناتالمصدر والإصدار والبصمة
التقسيمالنسبة والبذرة ووحدة الفصل
التحويلاتما دُرّب على التدريب فقط
المقارنةخط الأساس والنموذج والإعدادات
النتيجةمقاييس فعلية ومصفوفة التباس وحدودها

ثلاثة تسربات لا تكشفها Pipeline وحدها

تكرار الكيان: إذا كانت للمريض أو العميل أو الجهاز عدة سجلات، قد تقع سجلاته في التدريب والاختبار معًا. افصل بحسب الكيان عندما يكون الهدف التنبؤ لكيانات جديدة. المستقبل: التنبؤ بطلب الأسبوع المقبل لا يجوز أن يستخدم معلومة عُرفت بعد إغلاق الطلب؛ التقسيم الزمني ومراجعة وقت توفر الحقول ضروريان. الهدف المتنكر: حقل مثل «تم اعتماد النتيجة» قد يشفّر الإجابة بدل أن يساعد على التنبؤ بها.

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

اقرأ الفشل وحدّد الخطوة التالية

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

عند تنفيذ التجربة، احفظ الكود ونسخة البيانات أو تعليمات الوصول إليها، وسجّل خط الأساس والتقسيم والمقاييس والحدود. هذه الملفات تتيح مراجعة النتيجة وإعادة حسابها. ولطلب تنفيذ مشروع تعلم آلي، جهّز البيانات وسؤال التقييم أولاً؛ لا يمكن تحديد دقة متوقعة قبل فحصهما وإجراء التجربة.

المصادر

مراجعة المصادر: .

اختبار المثال وحدوده

نجح تحليل صياغة Python بـast على Python 3.12.10. لم تتوفر scikit-learn، لذلك لم يُنفذ تدريب أو تقييم ولم تُنشر أرقام دقة.

مقالات ذات صلة

الخدمة المرتبطة: مشاريع الذكاء الاصطناعي وتحليل البيانات.

أرسل متطلبات مشروعك