من الصندوق الأسود إلى القرار الواعي: رحلتي مع الذكاء الاصطناعي القابل للتفسير (XAI)

السلام عليكم يا جماعة الخير، معكم أبو عمر.

قبل كم سنة، كنت شغال على مشروع حساس شوي مع أحد المستشفيات الكبيرة. المشروع كان عبارة عن تطوير نظام ذكاء اصطناعي قادر على تحليل صور شبكية العين والتنبؤ بوجود اعتلال شبكية سكري (Diabetic Retinopathy) في مراحله المبكرة. بعد شهور من الشغل والتعب، وتدريب النموذج على آلاف الصور، وصلنا لنتائج خرافية. النموذج كان يحقق دقة 98%، إشي بصراحة بفتح النفس وبرفع الراس.

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

قال لي: “يا ابني، شغلكم ممتاز، والأرقام ما عليها غبار. بس عندي هالصورة لمريض، النموذج تبعك بحكي إنها ‘إيجابية’ وفيها بوادر اعتلال، وأنا بعيني المجردة وخبرة 30 سنة مش شايف إشي مقلق. ممكن تحكيلي ليش النموذج أخذ هاد القرار؟ على شو تطلع بالضبط في الصورة؟”

وقتها، حسيت حالي انحطيت في زاوية. الجواب الصادق والمحرج كان: “والله يا دكتور، ما بعرف”. نموذجنا كان “صندوق أسود” (Black Box). بنعطيه صورة، وبيعطينا جواب، بس شو بصير جوه… الله أعلم. هداك الموقف كان نقطة تحول في مسيرتي المهنية، وخلاني أبحث وأتعمق في عالم كان وقتها لسا في بداياته: عالم الذكاء الاصطناعي القابل للتفسير (Explainable AI)، أو اختصاراً XAI.

ما هو “الصندوق الأسود” اللعين هذا؟

قبل ما نغوص في الحلول، خلينا نفهم المشكلة. “الصندوق الأسود” هو مصطلح بنطلقه على أي نظام، وخصوصاً نماذج تعلم الآلة المعقدة، اللي بنقدر نشوف مدخلاته ومخرجاته، لكن العمليات الداخلية اللي بتحول المدخلات لمخرجات غامضة وغير مفهومة للبشر.

تخيلها زي شيف أسطوري في مطعم. بتطلب منه مكونات (مدخلات)، وبعطيك طبق أسطوري (مخرجات). لكن لو سألته عن الوصفة بالتفصيل، أو ليش استخدم رشة زعتر بدل الأوريجانو، بضحك وبحكيلك “هاي أسرار المهنة”.

أشهر النماذج اللي بتوقع في فخ الصندوق الأسود هي:

  • الشبكات العصبونية العميقة (Deep Neural Networks): بملايين البارامترات والطبقات المتشابكة، من المستحيل تتبع مسار قرار واحد بشكل يدوي.
  • نماذج التعزيز المتدرج (Gradient Boosting Machines) مثل XGBoost و LightGBM: رغم قوتها الهائلة، إلا إنها بتبني مئات أو آلاف الأشجار الصغيرة، وفهم مساهمة كل شجرة في القرار النهائي معقد جداً.

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

ولادة المنقذ: الذكاء الاصطناعي القابل للتفسير (XAI)

من رحم هذه المشكلة، وُلد الـ XAI. الذكاء الاصطناعي القابل للتفسير هو مش نوع جديد من الذكاء الاصطناعي، بل هو مجموعة من التقنيات والممارسات اللي هدفها الرئيسي هو جعل قرارات نماذج الذكاء الاصطناعي مفهومة وقابلة للتفسير من قبل البشر.

ليش هالحكي مهم؟

  1. بناء الثقة: زي ما صار معي مع الدكتور أحمد، ما حدا رح يستخدم نظام ما بثق فيه، حتى لو دقته 100%. الطبيب لازم يفهم “ليش” النظام بيقترح تشخيص معين عشان يقدر ياخد القرار النهائي.
  2. تصحيح الأخطاء وتطوير النموذج: لما نفهم كيف النموذج بيفكر، ممكن نكتشف إنه بيعتمد على عوامل خاطئة. مثلاً، ممكن نكتشف إن نموذج تشخيص سرطان الجلد بيعطي أهمية لوجود مسطرة في الصورة (لأن أغلب صور الأورام الخبيثة اللي تدرب عليها كان فيها مسطرة لقياس الحجم)، وهذا خطأ كارثي!
  3. العدالة والأخلاق: كيف نتأكد إن نموذج منح القروض ما بيميز ضد فئة معينة من المجتمع؟ الـ XAI بيساعدنا نكشف التحيزات (Bias) الخفية في بياناتنا ونماذجنا.
  4. المتطلبات القانونية: في أماكن كثيرة بالعالم (مثل أوروبا مع GDPR)، صار للمواطن “الحق في التفسير” (Right to Explanation). يعني لو بنك رفض يعطيك قرض باستخدام نظام آلي، من حقك تعرف ليش.

كيف “نفتح” الصندوق الأسود؟ – أشهر تقنيات XAI

هنا بتبدأ المتعة. في عنا مجموعة أدوات وتقنيات، كل وحدة الها نقاط قوة وضعف. خلينا نحكي عن أشهرها بأسلوب بسيط.

1. تقنيات لا تعتمد على نوع النموذج (Model-Agnostic)

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

LIME (Local Interpretable Model-agnostic Explanations)

فكرة LIME عبقرية في بساطتها. عشان يفهم قرار معين (مثلاً، ليش تم تصنيف هذا الإيميل كـ spam)، بيعمل الآتي:

  • بيأخذ العينة الأصلية (الإيميل).
  • بيعمل نسخ كثيرة منها مع تغييرات بسيطة وعشوائية (مثلاً، بيحذف بعض الكلمات، أو بيغيرها).
  • بيسأل الصندوق الأسود (نموذجنا الأصلي) عن رأيه في كل هاي النسخ الجديدة.
  • بعدها، بيقوم ببناء نموذج بسيط جداً وقابل للتفسير (مثل الانحدار الخطي)، بيحاول يقلد سلوك الصندوق الأسود “محلياً” حول العينة الأصلية فقط.

النتيجة؟ النموذج البسيط هاد بحكيلنا: “بالنسبة لهذا الإيميل تحديداً، أهم الكلمات اللي خلت النموذج الأصلي يعتبره spam هي ‘مجاناً’، ‘عرض حصري’، و ‘اضغط هنا'”.

SHAP (SHapley Additive exPlanations)

الـ SHAP هو الأداة المفضلة عندي، وهو المعيار الذهبي حالياً في عالم الـ XAI. فكرته مستوحاة من نظرية الألعاب وقيم شابلي (Shapley Values).

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

SHAP بيعمل نفس الإشي، بس بدل اللاعبين والهدف، عنده الخصائص (Features) والقرار النهائي. لكل قرار، بيعطيك قيمة (SHAP value) لكل خاصية، واللي بتمثل “مساهمة” هاي الخاصية في “دفع” القرار باتجاه معين (مثلاً، نحو “موافق على القرض” أو “مرفوض”).

الجميل في SHAP إنه بيعطينا تفسيرات محلية (لكل قرار) وعالمية (نظرة عامة على سلوك النموذج ككل).

2. تقنيات خاصة بنماذج معينة (Model-Specific)

هاي التقنيات مصممة لنوع معين من النماذج وبتستغل بنيتها الداخلية لتعطينا تفسيرات.

أهمية الخصائص (Feature Importance) في نماذج الأشجار

نماذج مثل Random Forest و XGBoost عندها طريقة مدمجة لحساب “أهمية” كل خاصية. بشكل عام، الخاصية اللي بتستخدمها الشجيرات كثير في تقسيم البيانات وبتؤدي لتحسين كبير في الدقة، بتعتبر خاصية مهمة. هاي طريقة سريعة ومفيدة لأخذ فكرة عامة عن أهم العوامل في نموذجك.

آليات الانتباه (Attention Mechanisms) في الشبكات العصبونية

في معالجة اللغات الطبيعية والصور، آليات الانتباه هي ثورة. لما نموذج بيترجم جملة أو بيوصف صورة، آلية الانتباه بتخليه “يركز” أو “ينتبه” على أجزاء معينة من المدخلات في كل خطوة.

والأجمل من هيك، إنه بنقدر “نرسم” هذا الانتباه. فبنشوف إنه عند ترجمة كلمة معينة، النموذج كان “بيتطلع” على كلمة مقابلة في الجملة الأصلية. أو لما النموذج بيتعرف على “قطة” في صورة، بنقدر نشوف إنه كان بيركز على منطقة الأذنين والشاربين.

مثال عملي: هيا بنا نفسر قرار نموذجنا

الحكي النظري حلو، بس خلينا نشوف شغل عملي. تخيل عنا نموذج XGBoost يتنبأ باحتمالية أن يترك العميل الشركة (Customer Churn).

أولاً، نقوم بتدريب النموذج (الكود للتوضيح، وليس للتشغيل المباشر بدون بيانات):


import xgboost as xgb
import pandas as pd
from sklearn.model_selection import train_test_split

# افترض أن لدينا بيانات في متغير data
# X = data.drop('Churn', axis=1)
# y = data['Churn']

# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# تدريب نموذج XGBoost
# model = xgb.XGBClassifier()
# model.fit(X_train, y_train)

الآن، نموذجنا جاهز، وهو صندوق أسود. نريد أن نفهم لماذا اتخذ قراراً معيناً لعميل محدد. هنا يأتي دور SHAP.


import shap

# 1. إنشاء "مُفسِّر" (Explainer) للنموذج
explainer = shap.TreeExplainer(model)

# 2. حساب قيم SHAP لبيانات الاختبار
shap_values = explainer.shap_values(X_test)

# 3. تفسير قرار واحد لعميل معين (مثلاً، العميل رقم 5)
# shap.initjs() # لتهيئة العرض في الـ notebook
shap.force_plot(explainer.expected_value, shap_values[5,:], X_test.iloc[5,:])

هذا الكود سيُنتج مخططاً تفاعلياً جميلاً يسمى “Force Plot”. يوضح لك هذا المخطط:

  • القيمة الأساسية (Base Value): متوسط التنبؤ لجميع العينات.
  • الخصائص باللون الأحمر: هي الخصائص التي “دفعت” التنبؤ نحو الأعلى (مثلاً، نحو “سيترك الشركة”).
  • الخصائص باللون الأزرق: هي الخصائص التي “دفعت” التنبؤ نحو الأسفل (نحو “سيبقى في الشركة”).

تخيل أن ترى مخططاً يوضح أن العميل رقم 5 لديه احتمال كبير للمغادرة لأن قيمة “الفاتورة الشهرية” عالية جداً (بالأحمر)، بينما “مدة بقائه كعميل” منخفضة (أيضاً بالأحمر). الآن، أصبح لديك فهم واضح وملموس للقرار!

وإذا أردنا نظرة عامة على أهم الخصائص في النموذج كله؟


# رسم ملخص لأهمية الخصائص وتأثيرها
shap.summary_plot(shap_values, X_test)

هذا المخطط (Summary Plot) يعطيك كنزا من المعلومات. لكل خاصية، يوضح لك كيف أن القيم المرتفعة (اللون الأحمر) والمنخفضة (اللون الأزرق) منها تؤثر على القرار النهائي. إنه يفتح الصندوق الأسود بالكامل.

نصائح من مطبخ أبو عمر

من خلال تجربتي في هذا المجال، تعلمت كم شغلة على الطريق الصعب، وبدي أشارككم إياها:

  • ابدأ بالتفسير مبكراً: لا تنتظر حتى نهاية المشروع لتبدأ بالتفكير في XAI. ادمج أدوات التفسير خلال عملية التطوير. هذا يساعدك على اكتشاف المشاكل في بياناتك أو نموذجك في وقت مبكر.
  • التفسير ليس لك فقط: تذكر أنك لا تفسر النموذج لنفسك (كمطور)، بل للمستخدم النهائي (الطبيب، مدير البنك، المحلل). يجب أن يكون التفسير بلغة بسيطة ومفهومة وقابلة للتنفيذ.
  • لا يوجد حل سحري واحد: استخدم مجموعة من أدوات XAI. قد يعطيك SHAP نظرة، و LIME نظرة أخرى، وتحليل الأخطاء يكشف لك شيئاً ثالثاً. الصورة الكاملة تأتي من تجميع هذه الأجزاء معاً.
  • الأبسط هو الأفضل (أحياناً): قبل أن تقفز إلى بناء شبكة عصبونية معقدة من 20 طبقة، اسأل نفسك: هل يمكن لنموذج انحدار لوجستي بسيط (وهو قابل للتفسير بطبيعته) أن يحل المشكلة بدقة مقبولة؟ أحياناً، التضحية بـ 1% من الدقة مقابل الحصول على نموذج شفاف بالكامل هي صفقة رابحة.

الخلاصة: من الظلام إلى النور 💡

العودة إلى قصة الدكتور أحمد. بعد عدة أشهر، عدت إلى المستشفى. هذه المرة، لم أعرض عليهم أرقام دقة فقط. عرضت عليهم نظاماً متكاملاً. عندما كان النموذج يحدد صورة على أنها “إيجابية”، كان يعرض بجانبها صورة أخرى تسمى “خريطة حرارية” (Heatmap) – ناتجة عن تقنية XAI تسمى Grad-CAM – تضيء بالضبط المناطق في شبكية العين التي “نظر” إليها النموذج ليتخذ قراره.

رأيت الابتسامة على وجه الدكتور أحمد. قال لي: “هيك صار الحكي. الآن، أنا والآلة بنقدر نشتغل مع بعض. هو بشوف إشي أنا ممكن ما أنتبهله، وأنا بخبرتي بقدر أقرر إذا كان هالإشي منطقي أو لا”.

الذكاء الاصطناعي بدون ثقة هو مجرد خوارزميات معقدة. والذكاء الاصطناعي بدون تفسير لا يمكن الوثوق به. الـ XAI هو الجسر الذي نبنيه بين قوة الآلة وحكمة الإنسان. إنه يحول نماذجنا من صناديق سوداء غامضة إلى شركاء شفافين في اتخاذ القرار.

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

أبو عمر

سجل دخولك لعمل نقاش تفاعلي

كافة المحادثات خاصة ولا يتم عرضها على الموقع نهائياً

آراء من النقاشات

لا توجد آراء منشورة بعد. كن أول من يشارك رأيه!

آخر المدونات

​معمارية البرمجيات

كان تاريخ قراراتنا ضبابياً: كيف أنقذتنا ‘سجلات القرارات المعمارية’ (ADRs) من جحيم الأسئلة المتكررة؟

في عالم تطوير البرمجيات سريع الخطى، غالباً ما ننسى "لماذا" اتخذنا قراراً معمارياً معيناً. أشارككم تجربتي كـ "أبو عمر" وكيف أنقذتنا سجلات القرارات المعمارية (ADRs)...

19 مايو، 2026 قراءة المزيد
خوارزميات

كانت حساباتنا تتكرر إلى ما لا نهاية: كيف أنقذتنا ‘البرمجة الديناميكية’ من جحيم التعقيد الأسي؟

أشارككم قصة من الميدان، من أيام كانت الخوادم تئن تحت وطأة الحسابات المتكررة. تعالوا نكتشف معًا كيف كانت "البرمجة الديناميكية" طوق النجاة الذي حول التعقيد...

19 مايو، 2026 قراءة المزيد
تجربة المستخدم والابداع البصري

كانت واجهاتنا خليطاً فوضوياً: كيف أنقذنا ‘نظام التصميم’ من جحيم عدم الاتساق؟

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف انتقلنا من فوضى الواجهات وعدم الاتساق إلى نظام وتناغم بفضل "نظام التصميم". هذه ليست مجرد مقالة تقنية،...

19 مايو، 2026 قراءة المزيد
برمجة وقواعد بيانات

كنا نعدل قاعدة البيانات يدوياً بخوف: كيف أنقذتنا ‘هجرات قواعد البيانات’ (Database Migrations) من جحيم التحديثات الفوضوية؟

أشارككم قصة من ليالي البرمجة الطويلة، وكيف انتقلنا من التعديل اليدوي المرعب لقواعد البيانات إلى عالم منظم وآمن بفضل "هجرات قواعد البيانات". مقالة لكل مبرمج...

19 مايو، 2026 قراءة المزيد
التوظيف وبناء الهوية التقنية

كان حسابي على GitHub مقبرة للمشاريع المنسية: كيف أنقذني ‘ملف README الشخصي’ من جحيم الانطباع الأول الباهت؟

أشارككم قصتي مع حسابي المهمل على GitHub وكيف تحولت صفحتي من مقبرة للمشاريع غير المكتملة إلى بطاقة تعريف احترافية تجذب الفرص. اكتشفوا معي قوة ملف...

19 مايو، 2026 قراءة المزيد
التوسع والأداء العالي والأحمال

كان فشل خدمة واحدة يُسقط النظام بأكمله: كيف أنقذنا نمط ‘قاطع الدائرة’ من جحيم الأعطال المتتالية؟

أشارككم قصة من قلب المعركة التقنية، عندما كان نظامنا ينهار بسبب عطل بسيط في إحدى الخدمات. سأشرح لكم بالتفصيل كيف أنقذنا نمط التصميم "قاطع الدائرة"...

19 مايو، 2026 قراءة المزيد
البودكاست