ویژگی های شما مهم هستند؟ این به این معنی نیست که آنها خوب هستند - KDnuggets

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند - KDnuggets

گره منبع: 2893531

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
[تصویر توسط نویسنده]

 

مفهوم "اهمیت ویژگی" به طور گسترده در یادگیری ماشین به عنوان اساسی ترین نوع توضیح پذیری مدل استفاده می شود. به عنوان مثال، از آن در حذف ویژگی های بازگشتی (RFE) استفاده می شود تا به طور مکرر کمترین ویژگی مدل را حذف کند.

با این حال، یک تصور غلط در مورد آن وجود دارد.

این واقعیت که یک ویژگی مهم است به این معنی نیست که برای مدل مفید است!

در واقع، وقتی می گوییم یک ویژگی مهم است، این به سادگی به این معنی است که این ویژگی سهم بالایی در پیش بینی های انجام شده توسط مدل دارد. اما ما باید این را در نظر بگیریم چنین مشارکتی ممکن است اشتباه باشد.

یک مثال ساده را در نظر بگیرید: یک دانشمند داده به طور تصادفی شناسه مشتری را بین ویژگی های مدل خود فراموش می کند. این مدل از شناسه مشتری به عنوان یک ویژگی بسیار پیش بینی کننده استفاده می کند. در نتیجه، این ویژگی اهمیت ویژگی بالایی خواهد داشت حتی اگر در واقع مدل را بدتر کند، زیرا نمی تواند روی داده های دیده نشده به خوبی کار کند.

برای روشن تر شدن مطالب، باید بین دو مفهوم تمایز قائل شویم:

  • پیش بینی سهم: چه بخشی از پیش بینی ها به دلیل ویژگی است. این معادل اهمیت ویژگی است.
  • سهم خطا: چه بخشی از خطاهای پیش بینی به دلیل وجود ویژگی در مدل است.

در این مقاله، نحوه محاسبه این مقادیر و نحوه استفاده از آنها برای به دست آوردن بینش ارزشمند در مورد یک مدل پیش بینی (و بهبود آن) را خواهیم دید.

توجه: این مقاله بر روی حالت رگرسیون متمرکز شده است. اگر بیشتر به پرونده طبقه بندی علاقه دارید می توانید مطالعه کنید "کدام ویژگی برای مدل طبقه بندی شما مضر است؟"

فرض کنید ما مدلی برای پیش بینی درآمد افراد بر اساس شغل، سن و ملیت آنها ساخته ایم. اکنون از مدل برای پیش بینی سه نفر استفاده می کنیم.

بنابراین، ما حقیقت پایه، پیش‌بینی مدل و خطای حاصل را داریم:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
حقیقت پایه، پیش‌بینی مدل، و خطای مطلق (به هزار دلار). [تصویر توسط نویسنده]

 

وقتی یک مدل پیش‌بینی داریم، همیشه می‌توانیم پیش‌بینی‌های مدل را به مشارکت‌هایی که توسط ویژگی‌های منفرد ارائه می‌شوند، تجزیه کنیم. این را می توان از طریق مقادیر SHAP انجام داد (اگر از نحوه عملکرد مقادیر SHAP اطلاعی ندارید، می توانید مقاله من را بخوانید: ارزش‌های SHAP دقیقاً توضیح می‌دهند که دوست داشتید کسی برای شما توضیح دهد).

بنابراین، بیایید بگوییم که این مقادیر SHAP نسبت به مدل ما برای این سه فرد هستند.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
مقادیر SHAP برای پیش‌بینی‌های مدل ما (به هزار دلار). [تصویر توسط نویسنده]

 

ویژگی اصلی مقادیر SHAP این است که آنها افزودنی هستند. این بدان معنی است که - با جمع آوری هر ردیف - پیش بینی مدل خود را برای آن فرد به دست خواهیم آورد. به عنوان مثال، اگر ردیف دوم را در نظر بگیریم: 72k $ +3k $ -22k $ = 53k $، که دقیقاً پیش‌بینی مدل برای فرد دوم است.

اکنون، مقادیر SHAP شاخص خوبی از اهمیت یک ویژگی برای پیش‌بینی‌های ما هستند. در واقع، هرچه مقدار (مطلق) SHAP بالاتر باشد، ویژگی برای پیش‌بینی در مورد آن فرد خاص تأثیرگذارتر است. توجه داشته باشید که من در مورد مقادیر مطلق SHAP صحبت می کنم زیرا علامت در اینجا اهمیتی ندارد: یک ویژگی اگر پیش بینی را بالا یا پایین کند به همان اندازه مهم است.

از این رو، سهم پیش بینی یک ویژگی برابر است با میانگین مقادیر مطلق SHAP آن ویژگی. اگر مقادیر SHAP را در یک دیتا فریم Pandas ذخیره کرده اید، این کار به همین سادگی است:

prediction_contribution = shap_values.abs().mean()

در مثال ما، این نتیجه است:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
پیش بینی سهم. [تصویر توسط نویسنده]

 

همانطور که می بینید، شغل به وضوح مهمترین ویژگی است زیرا به طور متوسط ​​71.67 هزار دلار از پیش بینی نهایی را به خود اختصاص می دهد. ملیت و سن به ترتیب دومین و سومین ویژگی مرتبط هستند.

با این حال، این واقعیت که یک ویژگی خاص بخش مربوط به پیش بینی نهایی را به خود اختصاص می دهد، چیزی در مورد عملکرد ویژگی نمی گوید. برای در نظر گرفتن این جنبه، باید "Error Contribution" را محاسبه کنیم.

فرض کنید می‌خواهیم به این سؤال پاسخ دهیم: «اگر مدل این ویژگی را نداشت، چه پیش‌بینی‌هایی انجام می‌داد. کار؟" مقادیر SHAP به ما اجازه می دهد به این سوال پاسخ دهیم. در واقع، از آنجایی که آنها افزودنی هستند، کافی است مقادیر SHAP را نسبت به ویژگی کم کنید کار از پیش بینی های انجام شده توسط مدل.

البته برای هر ویژگی می توانیم این روش را تکرار کنیم. در پانداها:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

اینم نتیجه:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
پیش‌بینی‌هایی که اگر ویژگی مربوطه را حذف کنیم، به دست می‌آوریم. [تصویر توسط نویسنده]

 

این بدان معنی است که اگر ما این ویژگی را نداشتیم کار، سپس مدل برای نفر اول 20 هزار دلار، برای نفر دوم -19 هزار دلار و برای نفر سوم -8 هزار دلار پیش بینی می کند. در عوض، اگر این ویژگی را نداشتیم سن، این مدل برای نفر اول 73 هزار دلار، برای نفر دوم 50 هزار دلار و غیره پیش بینی می کند.

همانطور که می بینید، اگر ویژگی های مختلف را حذف کنیم، پیش بینی ها برای هر فرد بسیار متفاوت است. در نتیجه، خطاهای پیش‌بینی نیز بسیار متفاوت خواهند بود. ما به راحتی می توانیم آنها را محاسبه کنیم:

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

نتیجه به شرح زیر است:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
خطاهای مطلقی که اگر ویژگی مربوطه را حذف کنیم، به دست خواهیم آورد. [تصویر توسط نویسنده]

 

اینها خطاهایی هستند که اگر ویژگی مربوطه را حذف کنیم، به دست می آوریم. به طور مستقیم، اگر خطا کوچک است، حذف این ویژگی مشکلی نیست - یا حتی مفید است - برای مدل. اگر خطا زیاد است، حذف این ویژگی ایده خوبی نیست.

اما ما می توانیم بیش از این انجام دهیم. در واقع، ما می توانیم تفاوت بین خطاهای مدل کامل و خطاهایی را که بدون ویژگی به دست می آوریم محاسبه کنیم:

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

که این است:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
تفاوت بین خطاهای مدل و خطاهایی که بدون ویژگی خواهیم داشت. [تصویر توسط نویسنده]

 

اگر این عدد باشد:

  • منفی است، سپس وجود ویژگی منجر به کاهش خطای پیش بینی می شود، بنابراین این ویژگی برای آن مشاهده به خوبی کار می کند!
  • مثبت است، سپس وجود ویژگی منجر به افزایش خطای پیش‌بینی می‌شود، بنابراین ویژگی برای آن مشاهده بد است.

ما می توانیم «Error Contribution» را به عنوان میانگین این مقادیر برای هر ویژگی محاسبه کنیم. در پانداها:

error_contribution = error_diff.mean()

اینم نتیجه:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
سهم خطا. [تصویر توسط نویسنده]

 

اگر این مقدار مثبت باشد، به این معنی است که به طور متوسط، وجود ویژگی در مدل منجر به خطای بالاتری می شود. بنابراین، بدون آن ویژگی، پیش بینی به طور کلی بهتر بود. به عبارت دیگر، این ویژگی بیشتر ضرر می کند تا سود!

در مقابل، هرچه این مقدار منفی تر باشد، ویژگی برای پیش بینی ها مفیدتر است زیرا وجود آن منجر به خطاهای کوچکتر می شود.

بیایید سعی کنیم از این مفاهیم در یک مجموعه داده واقعی استفاده کنیم.

از این پس، از مجموعه داده ای استفاده خواهم کرد که از آن گرفته شده است Pycaret (یک کتابخانه پایتون در زیر مجوز MIT). مجموعه داده "طلا" نام دارد و حاوی سری زمانی داده های مالی است.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
نمونه مجموعه داده ویژگی ها همه بر حسب درصد بیان می شوند، بنابراین -4.07 به معنای بازده -4.07٪ است. [تصویر توسط نویسنده]

 

ویژگی ها عبارتند از بازده دارایی های مالی به ترتیب 22، 14، 7 و 1 روز قبل از لحظه مشاهده ("T-22"، "T-14"، "T-7"، "T-1"). در اینجا لیست کاملی از تمام دارایی های مالی مورد استفاده به عنوان ویژگی های پیش بینی وجود دارد:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
لیست دارایی های موجود هر دارایی در زمان های 22-، 14-، 7- و 1- مشاهده می شود. [تصویر توسط نویسنده]

 

در مجموع 120 ویژگی داریم.

هدف این است که قیمت طلا (بازده) را 22 روز جلوتر پیش بینی کنیم ("Gold_T+22"). بیایید نگاهی به متغیر هدف بیندازیم.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
هیستوگرام متغیر. [تصویر توسط نویسنده]

 

هنگامی که مجموعه داده را بارگیری کردم، این مراحل انجام دادم:

  1. مجموعه داده کامل را به صورت تصادفی تقسیم کنید: 33٪ از ردیف ها در مجموعه داده آموزشی، 33٪ دیگر در مجموعه داده اعتبار سنجی، و 33٪ باقیمانده در مجموعه داده آزمایشی.
  2. یک رگرسیور LightGBM را روی مجموعه داده آموزشی آموزش دهید.
  3. با استفاده از مدل آموزش داده شده در مرحله قبل، در مورد آموزش، اعتبار سنجی و مجموعه داده های آزمایشی پیش بینی کنید.
  4. مقادیر SHAP مجموعه داده‌های آموزش، اعتبارسنجی و آزمایش را با استفاده از کتابخانه Python "shap" محاسبه کنید.
  5. سهم پیش‌بینی و سهم خطای هر ویژگی را در هر مجموعه داده (آموزش، اعتبارسنجی و آزمایش) با استفاده از کدی که در پاراگراف قبل دیدیم، محاسبه کنید.

بیایید سهم خطا و سهم پیش بینی را در مجموعه داده آموزشی مقایسه کنیم. ما از نمودار پراکندگی استفاده خواهیم کرد، بنابراین نقاط 120 ویژگی مدل را مشخص می کنند.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
مشارکت پیش‌بینی در مقابل سهم خطا (در مجموعه داده‌های آموزشی). [تصویر توسط نویسنده]

 

بین سهم پیش بینی و سهم خطا در مجموعه آموزشی همبستگی بسیار منفی وجود دارد.

و این منطقی است: از آنجایی که مدل از مجموعه داده آموزشی یاد می‌گیرد، تمایل دارد اهمیت بالایی (یعنی مشارکت پیش‌بینی بالا) را به ویژگی‌هایی که منجر به کاهش زیادی در خطای پیش‌بینی می‌شود (یعنی سهم خطای بسیار منفی) نسبت دهد..

اما این چیز زیادی به دانش ما اضافه نمی کند، درست است؟

در واقع، آنچه واقعاً برای ما مهم است مجموعه داده اعتبارسنجی است. مجموعه داده اعتبارسنجی در واقع بهترین پروکسی است که می توانیم در مورد نحوه عملکرد ویژگی های ما در داده های جدید داشته باشیم. بنابراین، بیایید همان مقایسه را در مجموعه اعتبارسنجی انجام دهیم.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
مشارکت پیش‌بینی در مقابل سهم خطا (در مجموعه داده اعتبارسنجی). [تصویر توسط نویسنده]

 

از این طرح می توانیم اطلاعات بسیار جالب تری را استخراج کنیم.

ویژگی‌هایی که در قسمت پایین سمت راست نمودار قرار دارند، آن‌هایی هستند که مدل ما به درستی به آنها اهمیت زیادی می‌دهد، زیرا در واقع خطای پیش‌بینی را کاهش می‌دهند.

همچنین، توجه داشته باشید که "Gold_T-22" (بازگشت طلا 22 روز قبل از دوره مشاهده) در مقایسه با اهمیتی که مدل به آن نسبت می دهد، واقعاً خوب کار می کند. این به این معنی است که این ویژگی احتمالاً ضعیف است. و این بخش از اطلاعات به ویژه جالب است زیرا طلا دارایی است که ما در تلاش برای پیش بینی آن هستیم ("Gold_T+22").

از سوی دیگر، ویژگی هایی که سهم خطای بالای 0 دارند، پیش بینی های ما را بدتر می کنند. به عنوان مثال، "US Bond ETF_T-1" به طور متوسط ​​پیش بینی مدل را 0.092٪ (مشارکت پیش بینی) تغییر می دهد، اما باعث می شود مدل پیش بینی به طور متوسط ​​0.013٪ (سهم خطا) بدتر از آن چیزی باشد که بدون آن ویژگی بود. .

ممکن است چنین فرض کنیم همه ویژگی‌های با سهم خطای بالا (در مقایسه با سهم پیش‌بینی آنها) احتمالاً بیش از حد مناسب هستند یا به طور کلی در مجموعه آموزشی و مجموعه اعتبار سنجی رفتار متفاوتی دارند.

بیایید ببینیم کدام ویژگی بیشترین سهم خطا را دارد.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
ویژگی‌ها با کاهش سهم خطا مرتب شدند. [تصویر توسط نویسنده]

 

و اکنون ویژگی هایی با کمترین سهم خطا:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
ویژگی‌ها با افزایش سهم خطا مرتب شدند. [تصویر توسط نویسنده]

 

جالب توجه است، ممکن است مشاهده کنیم که همه ویژگی‌های با سهم خطای بالاتر نسبت به T-1 (1 روز قبل از لحظه مشاهده) هستند، در حالی که تقریباً همه ویژگی‌های با سهم خطای کمتر نسبت به T-22 (22 روز قبل از لحظه مشاهده) هستند. ).

به نظر می رسد این نشان دهنده آن است جدیدترین ویژگی‌ها مستعد بیش از حد برازش هستند، در حالی که ویژگی‌های دورتر در زمان تمایل به تعمیم بهتر دارند.

توجه داشته باشید که بدون مشارکت خطا، ما هرگز این بینش را نمی‌دانستیم.

روش‌های حذف ویژگی‌های بازگشتی سنتی (RFE) بر اساس حذف ویژگی‌های بی‌اهمیت هستند. این معادل حذف ویژگی‌ها با یک پیش‌بینی کوچک است.

با این حال، بر اساس آنچه در پاراگراف قبلی گفتیم، منطقی‌تر است که ابتدا ویژگی‌هایی با بیشترین سهم خطا حذف شوند.

برای بررسی اینکه آیا شهود ما تأیید شده است، بیایید این دو رویکرد را با هم مقایسه کنیم:

  • RFE سنتی: ابتدا ویژگی های بی فایده را حذف کنید (کمترین سهم پیش بینی).
  • RFE ما: حذف ویژگی های مضر اول (بالاترین سهم خطا).

بیایید نتایج مجموعه اعتبار سنجی را ببینیم:

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
میانگین خطای مطلق دو استراتژی در مجموعه اعتبارسنجی. [تصویر توسط نویسنده]

 

بهترین تکرار برای هر روش دایره شده است: این مدل با 19 ویژگی برای RFE سنتی (خط آبی) و مدل با 17 ویژگی برای RFE ما (خط نارنجی) است.

به طور کلی، به نظر می رسد که روش ما به خوبی کار می کند: حذف ویژگی با بیشترین سهم خطا منجر به MAE به طور مداوم کوچکتر در مقایسه با حذف ویژگی با بالاترین سهم پیش بینی می شود.

با این حال، ممکن است فکر کنید که این فقط به این دلیل که ما بیش از حد مجموعه اعتبار سنجی را تطبیق می دهیم، به خوبی کار می کند. از این گذشته ، ما به نتیجه ای که در مجموعه آزمایشی به دست می آوریم علاقه مند هستیم.

بنابراین بیایید همان مقایسه را در مجموعه آزمایشی ببینیم.

 

ویژگی های شما مهم هستند؟ این بدان معنا نیست که آنها خوب هستند
میانگین خطای مطلق دو استراتژی در مجموعه آزمون. [تصویر توسط نویسنده]

 

نتیجه مشابه قبلی است. حتی اگر فاصله کمتری بین دو خط وجود داشته باشد، MAE به‌دست‌آمده با حذف بیشترین خطای مشارکت‌کننده به وضوح بهتر از MAE با حذف کمترین مشارکت‌کننده پیش‌بینی است.

از آنجایی که ما مدل هایی را انتخاب کردیم که منجر به کوچکترین MAE در مجموعه اعتبار سنجی می شوند، بیایید نتیجه آنها را در مجموعه آزمایش ببینیم:

  • RFE-Prediction Contribution (19 ویژگی). MAE در مجموعه آزمایشی: 2.04.
  • RFE-Error Contribution (17 ویژگی). MAE در مجموعه تست: 1.94.

بنابراین بهترین MAE با استفاده از روش ما 5٪ بهتر از RFE سنتی است!

مفهوم اهمیت ویژگی نقش اساسی در یادگیری ماشین دارد. با این حال، مفهوم "اهمیت" اغلب با "خوبی" اشتباه گرفته می شود.

به منظور تمایز بین این دو جنبه، ما دو مفهوم را معرفی کرده‌ایم: مشارکت پیش‌بینی و سهم خطا. هر دو مفهوم بر اساس مقادیر SHAP مجموعه داده اعتبارسنجی هستند و در مقاله کد پایتون برای محاسبه آنها را مشاهده کرده ایم.

ما همچنین آنها را روی یک مجموعه داده مالی واقعی (که در آن وظیفه پیش‌بینی قیمت طلا است) امتحان کرده‌ایم و ثابت کردیم که حذف ویژگی‌های بازگشتی بر اساس سهم خطا منجر به میانگین خطای مطلق 5 درصد بهتر در مقایسه با RFE سنتی بر اساس مشارکت پیش‌بینی می‌شود.

تمام کدهای استفاده شده برای این مقاله را می توانید در اینجا پیدا کنید این دفترچه یادداشت.

با تشکر از شما برای خواندن!

 
 
ساموئل مازانتی دانشمند ارشد داده در جاکالا است و در حال حاضر در رم زندگی می کند. او در رشته آمار فارغ التحصیل شد و علایق اصلی تحقیقاتی او مربوط به کاربردهای یادگیری ماشین برای صنعت است. او همچنین یک تولید کننده محتوای آزاد است.

 
اصلی. مجدداً با اجازه دوباره ارسال شد.
 

تمبر زمان:

بیشتر از kdnuggets