كانت قرارات نموذجنا طلاسم: كيف أنقذتنا مكتبة SHAP من جحيم ‘الصندوق الأسود’؟

يا جماعة الخير، السلام عليكم ورحمة الله.

خليني أحكيلكم هالشغلة اللي صارت معي ومع فريقي قبل فترة. كنا شغالين على مشروع كبير، مشروع حساس جداً، لعميل في القطاع المالي. المطلوب كان بناء نموذج تعلم آلة (Machine Learning Model) يقدر يتنبأ باحتمالية تعثر العملاء عن سداد القروض. قضينا أسابيع وليالي واحنا بنبني النموذج، بنجمع البيانات، بننظفها، وبنختار أفضل الخوارزميات. وفي النهاية، طلع معنا وحش! نموذج من نوع XGBoost بدقة بتتجاوز الـ 94%. إشي بيرفع الراس، صح؟

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

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

لماذا يعتبر “الصندوق الأسود” مشكلة حقيقية؟

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

  • انعدام الثقة: كيف بدك تقنع مديرك، أو عميلك، أو حتى المستخدم النهائي، إنه يثق بقرار هو نفسه ما بيفهمه؟ الثقة هي عملة المشاريع التقنية.
  • صعوبة التصحيح (Debugging): إذا النموذج بلش يعطي نتائج غريبة أو خاطئة، كيف بدك تعرف وين الخلل؟ هل المشكلة في البيانات؟ في الخوارزمية؟ في ميزة معينة؟ بدون فهم “المنطق” الداخلي، أنت بتكون زي اللي بصلح سيارة وهو معصوب العينين.
  • العدالة والانحياز (Fairness & Bias): كثير من النماذج بتتعلم من بيانات تاريخية ممكن تكون منحازة ضد فئات معينة (مثلاً على أساس الجنس، أو المنطقة الجغرافية). الصندوق الأسود بخفي هاد الانحياز، وممكن نموذجك ياخد قرارات ظالمة بدون ما تدري.
  • المتطلبات القانونية والتنظيمية: في قطاعات كثيرة زي الطب والمال، فيه قوانين (مثل GDPR في أوروبا) بتعطي المستخدم الحق في معرفة “سبب” القرارات الآلية اللي بتأثر عليه. الصندوق الأسود بخليك غير قادر على تلبية هاي المتطلبات.

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

المنقذ SHAP: تكسير قيود الصندوق الأسود

بعد بحث مكثف، ومعاناة، وكاسات شاي بالمرمية ما الها عدد، تعرفنا على عالم جميل اسمه “الذكاء الاصطناعي المفسر” (Explainable AI – XAI). ومن بين كل الأدوات والمكتبات، لمعت أداة بشكل خاص، وكانت هي طوق النجاة تبعنا: مكتبة SHAP (SHapley Additive exPlanations).

الفكرة ورا SHAP عبقرية وبسيطة بنفس الوقت. هي مستوحاة من “نظرية الألعاب” (Game Theory)، وتحديداً من مفهوم اسمه “قيم شابلي” (Shapley Values) اللي طورها عالم الرياضيات لويد شابلي. خلينا نبسطها بمثال من خارج البرمجة.

تخيل فريق كرة قدم سجل هدف. النتيجة النهائية (الهدف) معروفة. لكن مين اله الفضل الأكبر؟ المهاجم اللي سجل؟ ولا لاعب الوسط اللي مررله الكرة؟ ولا المدافع اللي قطع الكرة وبدأ الهجمة؟ SHAP بتعمل نفس الإشي، بس مع نموذج تعلم الآلة.

بتحسب SHAP “مساهمة” كل ميزة (feature) من بياناتك في “دفع” تنبؤ النموذج من قيمة أساسية (متوسط التنبؤات) إلى القيمة النهائية اللي وصلها. يعني، بدل ما تحكيلك “النموذج قرر يرفض الطلب”، SHAP بتحكيلك:

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

فرق شاسع، صح؟ فجأة، صار للنموذج لسان يحكي فيه، وصار عنا منطق نقدر نناقشه ونحلله.

شغل عملي: كيف طبقنا SHAP؟

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

أولاً، لازم يكون عندك مكتبة shap و xgboost. بتركبهم بسهولة:


pip install shap
pip install xgboost

الآن، لنفترض أنه عنا نموذج مدرب (model) وبيانات اختبار (X_test). الخطوات لتفسير تنبؤ واحد بتكون كالتالي:


import shap
import xgboost

# لنفترض أن هذا هو النموذج المدرب وبيانات الاختبار
# model = xgboost.XGBClassifier().fit(X_train, y_train)
# X_test = ...

# 1. إنشاء "المُفسِّر" (Explainer) الخاص بـ SHAP
# نستخدم TreeExplainer لأنه فعال جداً مع النماذج الشجرية مثل XGBoost
explainer = shap.TreeExplainer(model)

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

# 3. تفسير تنبؤ واحد (مثلاً، العميل الأول في بيانات الاختبار)
# shap.initjs() # لتفعيل الرسوم في بيئة مثل Jupyter Notebook
shap.force_plot(explainer.expected_value, shap_values[0,:], X_test.iloc[0,:])

السطر الأخير هاد هو السحر كله! رح ينتجلك رسم بياني تفاعلي اسمه Force Plot. شكله كالتالي:

مثال على رسم SHAP Force Plot

هاد الرسم بينقسم لقسمين:

  • القيمة الأساسية (base value): هي متوسط تنبؤ النموذج على كل البيانات. ممكن تفكر فيها كنقطة البداية المحايدة.
  • الأسهم الملونة: كل سهم بيمثل ميزة (feature) من بيانات العميل.
    • الأسهم الحمراء: هي الميزات اللي “دفعت” القرار نحو نتيجة أعلى (مثلاً، نحو “الموافقة على القرض”). طول السهم بيمثل قوة الدفع.
    • الأسهم الزرقاء: هي الميزات اللي “سحبت” القرار نحو نتيجة أقل (نحو “رفض القرض”).

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

النظر إلى الصورة الكبيرة: تفسير النموذج ككل

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

هون بيجي دور الـ Summary Plot.


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

النتيجة بتكون رسم بياني خرافي زي هاد:

مثال على رسم SHAP Summary Plot

هاد الرسم بيحكيلك قصة كاملة:

  • المحور الرأسي (Y-axis): الميزات مرتبة من الأكثر أهمية للأقل أهمية.
  • المحور الأفقي (X-axis): قيمة SHAP. القيم الموجبة بتدفع التنبؤ للأعلى، والسالبة بتسحبه للأسفل.
  • اللون: لون النقطة بيعبر عن قيمة الميزة نفسها (عالية أو منخفضة).

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

نصائح أبو عمر العملية (من الكيس)

بعد ما استخدمنا SHAP في عدة مشاريع، جمعت لكم كم نصيحة من واقع التجربة، زي ما بنحكي “من الآخر”:

  1. ابدأ بتفسير قرار واحد: لا تغرق نفسك في البداية بتحليل كل البيانات. اختر حالة مثيرة للاهتمام (مثلاً، حالة تنبأ فيها النموذج بشكل خاطئ، أو حالة نتيجتها غير متوقعة) واستخدم force_plot لفهمها بعمق. هاد أفضل مدخل لعالم SHAP.
  2. SHAP حسابياً مكلفة: حساب قيم شابلي ممكن يكون بطيء جداً، خصوصاً مع البيانات الكبيرة أو النماذج المعقدة. مكتبة SHAP فيها تحسينات ممتازة (زي TreeExplainer للنماذج الشجرية)، بس خليك واعي للموضوع. لو بياناتك ضخمة، جرب تحسب القيم على عينة ممثِّلة من البيانات.
  3. SHAP تفسر ما يراه النموذج، وليس الحقيقة المطلقة: هاي نقطة مهمة جداً. إذا كان نموذجك فيه انحياز (bias) لأنه تعلم من بيانات منحازة، SHAP رح تظهرلك هاد الانحياز بوضوح. هي بتكشفلك “عقلية” النموذج، وهاد بحد ذاته أداة قوية جداً لاكتشاف وتصحيح الانحياز.
  4. استخدمها كأداة لتصحيح الأخطاء (Debugging): هل فيه ميزة الها تأثير أكبر بكتير من المتوقع؟ يمكن فيه تسريب بيانات (Data Leakage). هل تأثير ميزة معينة عكس المنطق؟ يمكن فيه خطأ في معالجة البيانات (Preprocessing). SHAP هي أفضل صديق للمبرمج في مرحلة الـ Debugging لنماذج تعلم الآلة.

الخلاصة: من طلاسم إلى ثقة ✅

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

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

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

أبو عمر

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

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

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

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

آخر المدونات

الحوسبة السحابية

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

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

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

كانت طلباتنا تتعثر في أوقات الذروة: كيف أنقذتنا ‘طوابير الرسائل’ (Message Queues) من جحيم الاختناقات؟

أشارككم قصة حقيقية من قلب المعركة البرمجية، كيف كاد تطبيقنا أن ينهار تحت ضغط المستخدمين في يوم إطلاق مهم، وكيف كانت "طوابير الرسائل" (Message Queues)...

21 مايو، 2026 قراءة المزيد
التكنلوجيا المالية Fintech

كانت بياناتنا المالية سجينة البنوك: كيف حررتها واجهات ‘الصيرفة المفتوحة’ (Open Banking)؟

من واقع تجربتي كمبرمج، كانت بياناتنا المالية حبيسة جدران البنوك الرقمية. في هذه المقالة، أسرد لكم كيف حولت واجهات برمجة التطبيقات للصيرفة المفتوحة (Open Banking)...

21 مايو، 2026 قراءة المزيد
البنية التحتية وإدارة السيرفرات

كانت سجلاتنا متناثرة وضائعة: كيف أنقذنا التجميع المركزي (ELK/Loki) من جحيم تتبع الأخطاء؟

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

21 مايو، 2026 قراءة المزيد
ادارة الفرق والتنمية البشرية

كانت ساحة لتبادل الاتهامات: كيف أنقذتنا ‘ثقافة ما بعد الحوادث عديمة اللوم’ من جحيم الخوف؟

من واقع تجربتي كمبرمج، تحولت اجتماعات مراجعة الحوادث التقنية من جلسات لوم واتهامات إلى بيئة آمنة للتعلم والنمو. في هذه المقالة، أشارككم كيف يمكن لـ...

21 مايو، 2026 قراءة المزيد
اختبارات الاداء والجودة

وداعاً لكابوس “هل كسرنا شيئاً؟”: كيف أنقذ اختبار التراجع البصري واجهاتنا الأمامية

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

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