.. _partial_dependence:
===============================================================
مخططات الاعتماد الجزئي والتوقع الشرطي الفردي
===============================================================
.. currentmodule:: sklearn.inspection
يمكن استخدام مخططات الاعتماد الجزئي (PDP) ومخططات التوقع الشرطي الفردي (ICE) لتصور وتحليل التفاعل بين الاستجابة المستهدفة [1]_ ومجموعة من ميزات الإدخال ذات الأهمية.
يفترض كل من PDPs [H2009]_ و ICEs [G2015]_ أن ميزات الإدخال ذات الأهمية مستقلة عن ميزات المُكمل، وغالبًا ما يتم انتهاك هذا الافتراض في الممارسة العملية. وبالتالي، في حالة الميزات المُرتبطة، سنقوم بإنشاء نقاط بيانات سخيفة لحساب PDP/ICE [M2019]_.
مخططات الاعتماد الجزئي
========================
تُظهر مخططات الاعتماد الجزئي (PDP) التبعية بين الاستجابة المستهدفة ومجموعة من ميزات الإدخال ذات الأهمية، مع التهميش على قيم جميع ميزات الإدخال الأخرى (ميزات "المُكمل"). بشكل حدسي، يمكننا تفسير الاعتماد الجزئي على أنها الاستجابة المستهدفة المتوقعة كدالة لميزات الإدخال ذات الأهمية.
بسبب حدود الإدراك البشري، يجب أن يكون حجم مجموعة ميزات الإدخال ذات الأهمية صغيرًا (عادةً واحد أو اثنين)، وبالتالي يتم اختيار ميزات الإدخال ذات الأهمية عادةً من بين أهم الميزات.
يُظهر الشكل أدناه مخططين للتبعية الجزئية أحادي الاتجاه ومخططًا واحدًا للتبعية الجزئية ثنائي الاتجاه لمجموعة بيانات مشاركة الدراجات، مع :class:`~sklearn.ensemble.HistGradientBoostingRegressor`:
.. figure:: ../auto_examples/inspection/images/sphx_glr_plot_partial_dependence_006.png
:target: ../auto_examples/inspection/plot_partial_dependence.html
:align: center
:scale: 70
تُخبرنا مخططات PDP أحادية الاتجاه عن التفاعل بين الاستجابة المستهدفة وميزة إدخال ذات أهمية (على سبيل المثال، خطية، غير خطية). يُظهر الرسم التخطيطي الأيسر في الشكل أعلاه تأثير درجة الحرارة على عدد تأجيرات الدراجات؛ يمكننا أن نرى بوضوح أن درجة الحرارة المرتفعة مرتبطة بزيادة عدد تأجيرات الدراجات. وبالمثل، يمكننا تحليل تأثير الرطوبة على عدد تأجيرات الدراجات (الرسم التخطيطي الأوسط). وبالتالي، فإن هذه التفسيرات هامشية، مع الأخذ في الاعتبار ميزة واحدة في كل مرة.
تُظهر مخططات PDP مع ميزتين إدخال ذات أهمية التفاعلات بين الميزتين. على سبيل المثال، يُظهر مخطط PDP ثنائي المتغير في الشكل أعلاه تبعية عدد تأجيرات الدراجات على القيم المُشتركة لدرجة الحرارة والرطوبة. يمكننا أن نرى بوضوح تفاعلًا بين الميزتين: مع درجة حرارة أعلى من 20 درجة مئوية، يكون للرطوبة بشكل أساسي تأثير قوي على عدد تأجيرات الدراجات. بالنسبة لدرجات الحرارة المنخفضة، يكون لكل من درجة الحرارة والرطوبة تأثير على عدد تأجيرات الدراجات.
تُوفر وحدة :mod:`sklearn.inspection` دالة مُلائمة :func:`~PartialDependenceDisplay.from_estimator` لإنشاء مخططات تبعية جزئية أحادية الاتجاه وثنائية الاتجاه. في المثال أدناه، نُوضح كيفية إنشاء شبكة من مخططات الاعتماد الجزئي: مخططي PDP أحاديي الاتجاه للميزتين ``0`` و ``1`` ومخطط PDP ثنائي الاتجاه بين الميزتين::
>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> from sklearn.inspection import PartialDependenceDisplay
>>> X, y = make_hastie_10_2(random_state=0)
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
... max_depth=1, random_state=0).fit(X, y)
>>> features = [0, 1, (0, 1)]
>>> PartialDependenceDisplay.from_estimator(clf, X, features)
<...>
يمكنك الوصول إلى كائنات الشكل والمحاور التي تم إنشاؤها حديثًا باستخدام ``plt.gcf()`` و ``plt.gca()``.
لإنشاء مخطط تبعية جزئية مع ميزات فئوية، تحتاج إلى تحديد الميزات الفئوية باستخدام المعلمة `categorical_features`. تأخذ هذه المعلمة قائمة من المؤشرات أو أسماء الميزات الفئوية أو قناعًا منطقيًا. التمثيل الرسومي للتبعية الجزئية للميزات الفئوية هو مخطط شريطي أو خريطة حرارية ثنائية الأبعاد.
.. dropdown:: PDPs لتصنيف متعدد الفئات
بالنسبة للتصنيف متعدد الفئات، تحتاج إلى تعيين تسمية الفئة التي يجب إنشاء PDPs لها عبر وسيطة ``target``::
>>> from sklearn.datasets import load_iris
>>> iris = load_iris()
>>> mc_clf = GradientBoostingClassifier(n_estimators=10,
... max_depth=1).fit(iris.data, iris.target)
>>> features = [3, 2, (3, 2)]
>>> PartialDependenceDisplay.from_estimator(mc_clf, X, features, target=0)
<...>
تُستخدم نفس المعلمة ``target`` لتحديد الهدف في إعدادات الانحدار متعدد المخرجات.
إذا كنت بحاجة إلى القيم الأولية لدالة الاعتماد الجزئي بدلاً من المخططات، فيمكنك استخدام الدالة :func:`sklearn.inspection.partial_dependence`::
>>> from sklearn.inspection import partial_dependence
>>> results = partial_dependence(clf, X, [0])
>>> results["average"]
array([[ 2.466..., 2.466..., ...
>>> results["grid_values"]
[array([-1.624..., -1.592..., ...
يتم إنشاء القيم التي يجب عندها تقييم الاعتماد الجزئي مُباشرةً من ``X``. بالنسبة للتبعية الجزئية ثنائية الاتجاه، يتم إنشاء شبكة ثنائية الأبعاد من القيم. يُعطي حقل ``values`` الذي تُعيده :func:`sklearn.inspection.partial_dependence` القيم الفعلية المستخدمة في الشبكة لكل ميزة إدخال ذات أهمية. وهي تتوافق أيضًا مع محور المخططات.
.. _individual_conditional:
مخطط التوقع الشرطي الفردي (ICE)
=============================================
على غرار PDP، يُظهر مخطط التوقع الشرطي الفردي (ICE) التبعية بين دالة الهدف وميزة إدخال ذات أهمية. ومع ذلك، على عكس PDP، الذي يُظهر متوسط تأثير ميزة الإدخال، يُصوّر مخطط ICE تبعية التنبؤ على ميزة لكل عينة على حدة مع خط واحد لكل عينة. نظرًا لحدود الإدراك البشري، يتم دعم ميزة إدخال واحدة فقط ذات أهمية لمخططات ICE.
تُظهر الأشكال أدناه مخططي ICE لمجموعة بيانات مشاركة الدراجات، مع :class:`~sklearn.ensemble.HistGradientBoostingRegressor`:. تُخطط الأشكال خط PD المقابل المُتراكب على خطوط ICE.
.. figure:: ../auto_examples/inspection/images/sphx_glr_plot_partial_dependence_004.png
:target: ../auto_examples/inspection/plot_partial_dependence.html
:align: center
:scale: 70
بينما تُعد مخططات PDP جيدة في إظهار متوسط تأثير الميزات المستهدفة، إلا أنها قد تُخفي علاقة غير متجانسة ناتجة عن التفاعلات. عند وجود تفاعلات، سيُوفر مخطط ICE المزيد من الأفكار. على سبيل المثال، نرى أن ICE لميزة درجة الحرارة يُعطينا بعض المعلومات الإضافية: بعض خطوط ICE مسطحة بينما يُظهر البعض الآخر انخفاضًا في التبعية لدرجة الحرارة فوق 35 درجة مئوية. نلاحظ نمطًا مشابهًا لميزة الرطوبة: تُظهر بعض خطوط ICE انخفاضًا حادًا عندما تكون الرطوبة أعلى من 80٪.
يمكن استخدام الدالة المُلائمة :meth:`PartialDependenceDisplay.from_estimator` لوحدة :mod:`sklearn.inspection` لإنشاء مخططات ICE عن طريق تعيين ``kind='individual'``. في المثال أدناه، نُوضح كيفية إنشاء شبكة من مخططات ICE:
>>> from sklearn.datasets import make_hastie_10_2
>>> from sklearn.ensemble import GradientBoostingClassifier
>>> from sklearn.inspection import PartialDependenceDisplay
>>> X, y = make_hastie_10_2(random_state=0)
>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,
... max_depth=1, random_state=0).fit(X, y)
>>> features = [0, 1]
>>> PartialDependenceDisplay.from_estimator(clf, X, features,
... kind='individual')
<...>
في مخططات ICE، قد لا يكون من السهل رؤية متوسط تأثير ميزة الإدخال ذات الأهمية. ومن ثم، يُوصى باستخدام مخططات ICE جنبًا إلى جنب مع PDPs. يمكن رسمها معًا باستخدام ``kind='both'``.
>>> PartialDependenceDisplay.from_estimator(clf, X, features,
... kind='both')
<...>
إذا كان هناك عدد كبير جدًا من الخطوط في مخطط ICE، فقد يكون من الصعب رؤية الاختلافات بين العينات الفردية وتفسير النموذج. يؤدي توسيط ICE عند القيمة الأولى على المحور x إلى إنتاج مخططات توقع شرطي فردي مُركزة (cICE) [G2015]_. هذا يُؤكّد على تباعد التوقعات الشرطية الفردية عن خط المتوسط، مما يجعل من الأسهل استكشاف العلاقات غير المتجانسة. يمكن رسم مخططات cICE عن طريق تعيين `centered=True`:
>>> PartialDependenceDisplay.from_estimator(clf, X, features,
... kind='both', centered=True)
<...>
التعريف الرياضي
=======================
دع :math:`X_S` تكون مجموعة ميزات الإدخال ذات الأهمية (أي معلمة `features`)، ودع :math:`X_C` تكون مُكملها.
يتم تعريف الاعتماد الجزئي للاستجابة :math:`f` عند نقطة :math:`x_S` على النحو التالي:
.. math::
pd_{X_S}(x_S) &\overset{def}{=} \mathbb{E}_{X_C}\left[ f(x_S, X_C) \right]\\
&= \int f(x_S, x_C) p(x_C) dx_C,
حيث :math:`f(x_S, x_C)` هي دالة الاستجابة (:term:`predict` أو :term:`predict_proba` أو :term:`decision_function`) لعينة مُعطاة يتم تعريف قيمها بواسطة :math:`x_S` للميزات في :math:`X_S`، وبواسطة :math:`x_C` للميزات في :math:`X_C`. لاحظ أن :math:`x_S` و :math:`x_C` قد يكونان مجموعات.
يؤدي حساب هذا التكامل لقيم مُختلفة من :math:`x_S` إلى إنتاج مخطط PDP كما هو مذكور أعلاه. يتم تعريف خط ICE على أنه :math:`f(x_{S}, x_{C}^{(i)})` واحد يتم تقييمه عند :math:`x_{S}`.
طرق الحساب
===================
هناك طريقتان رئيسيتان لتقريب التكامل أعلاه، وهما طريقتا "brute" و "recursion". تتحكم المعلمة `method` في الطريقة التي يجب استخدامها.
طريقة "brute" هي طريقة عامة تعمل مع أي مُقدر. لاحظ أنه لا يتم دعم حساب مخططات ICE إلا باستخدام طريقة "brute". تُقارب التكامل أعلاه عن طريق حساب متوسط على البيانات `X`:
.. math::
pd_{X_S}(x_S) \approx \frac{1}{n_\text{samples}} \sum_{i=1}^n f(x_S, x_C^{(i)}),
حيث :math:`x_C^{(i)}` هي قيمة العينة i للميزات في :math:`X_C`. لكل قيمة من :math:`x_S`، تتطلب هذه الطريقة تمريرة كاملة على مجموعة البيانات `X`، وهي مُكلفة من الناحية الحسابية.
كل من :math:`f(x_{S}, x_{C}^{(i)})` يقابل خط ICE واحد يتم تقييمه عند :math:`x_{S}`. بحساب هذا لقيم متعددة من :math:`x_{S}`، يحصل المرء على خط ICE كامل. كما ترى، فإن متوسط خطوط ICE يقابل خط الاعتماد الجزئي.
طريقة "recursion" أسرع من طريقة "brute"، ولكنها مدعومة فقط لمخططات PDP بواسطة بعض المقدرات القائمة على الأشجار. يتم حسابها على النحو التالي. بالنسبة لنقطة مُعطاة :math:`x_S`، يتم إجراء اجتياز شجرة مرجح: إذا تضمنت عقدة تقسيم ميزة إدخال ذات أهمية، فسيتم اتباع الفرع الأيسر أو الأيمن المقابل؛ وإلا، فسيتم اتباع كلا الفرعين، مع ترجيح كل فرع بنسبة عينات التدريب التي دخلت هذا الفرع. أخيرًا، يتم إعطاء الاعتماد الجزئي بمتوسط مرجح لجميع قيم الأوراق التي تمت زيارتها.
باستخدام طريقة "brute"، يتم استخدام المعلمة `X` لكل من إنشاء شبكة من القيم :math:`x_S` وقيم ميزات المُكمل :math:`x_C`. ومع ذلك، مع طريقة "recursion"، يتم استخدام `X` فقط لقيم الشبكة: ضمنيًا، قيم :math:`x_C` هي قيم بيانات التدريب.
افتراضيًا، تُستخدم طريقة "recursion" لرسم PDPs على المقدرات القائمة على الأشجار التي تدعمها، وتُستخدم "brute" للباقي.
.. _pdp_method_differences:
.. note::
بينما يجب أن تكون كلتا الطريقتين متقاربتين بشكل عام، إلا أنهما قد تختلفان في بعض الإعدادات المُحدّدة. تفترض طريقة "brute" وجود نقاط البيانات :math:`(x_S, x_C^{(i)})`. عندما تكون الميزات مُرتبطة، قد يكون لعينات البيانات المُصطنعة هذه كتلة احتمالية منخفضة جدًا. من المُرجّح أن تختلف طريقتا "brute" و "recursion" فيما يتعلق بقيمة الاعتماد الجزئي، لأنهما ستُعاملان هذه العينات غير المُحتملة بشكل مُختلف. تذكر، مع ذلك، أن الافتراض الأساسي لتفسير PDPs هو أن الميزات يجب أن تكون مستقلة.
.. rubric:: أمثلة
* :ref:`sphx_glr_auto_examples_inspection_plot_partial_dependence.py`
.. rubric:: الحواشي السفلية
.. [1] بالنسبة للتصنيف، قد تكون الاستجابة المستهدفة هي احتمال فئة (الفئة الإيجابية للتصنيف الثنائي)، أو دالة القرار.
.. rubric:: المراجع
.. [H2009] T. Hastie, R. Tibshirani and J. Friedman,
`The Elements of Statistical Learning
`_,
Second Edition, Section 10.13.2, Springer, 2009.
.. [M2019] C. Molnar,
`Interpretable Machine Learning
`_,
Section 5.1, 2019.
.. [G2015] :arxiv:`A. Goldstein, A. Kapelner, J. Bleich, and E. Pitkin,
"Peeking Inside the Black Box: Visualizing Statistical
Learning With Plots of Individual Conditional Expectation"
Journal of Computational and Graphical Statistics,
24(1): 44-65, Springer, 2015. <1309.6392>`