مطالب خوب و بهدردبخور در حوزهی هوش مصنوعی و پردازش زبان طبیعی!
شکرشکن شوند همه طوطیان هند
زین قند پارسی که به بنگاله میرود
اگر انتقاد، پیشنهاد و یا مطلب مفیدی (لینک، پست و ...) داشتید:
@AliAkbarBadri
@mmsamiei
@MmahdiAghajani
Post #301
3.97K
چالهای به نام model drift!
اگه تجربه دیپلوی مدلهای یادگیری ماشین در پروداکشن رو داشته باشید حتما به این موضوع برخوردید که مدلتون بعد از مدتی ممکنه جوابهای خوبی تولید نکنه. یکی از علل رایج همچین اتفاقی، رخداد model drift هست که به انواع مختلف میتونه رخ بده. model drift میتونه ناشی از data drift یا concept drift باشه. خود data drift هم میتونه براساس دریفت در فیچرها و یا دریفت در لیبل رخ بده. تصور کنید میخواید مدل پیشبینی قیمت خانه رو آموزش بدید و بعد از کرونا تقاضای خانههای بزرگ در بازار بیشتر شده و به همین دلیل تعداد خانههای کوچک در بازار بیشتر میشه و خانههای بزرگ کمتر. در این حالت توزیع فیچر سایز خانه عوضشده و منجر به data drift شده. یا در سناریوی دیگهای بهدلیل وقوع موج گرانی قیمت کل خانهها دچار تغییر شده باشه که در اینجا هم data drift از نوع تغییر متغیر هدف رو داریم.
در حالت concept drift هم نه توزیع فیچرها تغییر میکنه و نه توزیع متغیر هدف بلکه تابع نگاشتکننده فیچرها به لیبل تغییر میکنه. تصور کنید که در مساله پیشبینی قیمت خانه نه فیچرها تغییر کرده باشند و نه توزیع لیبلها بلکه افراد به دلیل تغییرات شرایط جامعه خانههای ویلایی رو بیشتر از خانههای آپارتمانی ترجیح بدند. در این حالت قیمت خانههای ویلایی به طور مضاعفی بالا میره و مدلی که قبلا آموزش دیده باشه در این شرایط نمیتونه پیشبینی خوبی حداقل درباره خانههای ویلایی داشته باشه.
اما چاره چیه؟! در وهله اول مانیتور، مانیتور، مانیتور! یکی از اصلیترین قسمتهای دیپلوی مدل در پروداکشن، مانیتور کردن عملکرد اون به صورت دورهای هست. با این روش اولین سوالی که بهوجود میاد اینه که چهطور میتونیم یه آلارم model drift رو به موقع ارسال کنیم؟ طبیعتا نیاز داریم علاوه بر اینکه با چشم نمودارها رو کنترل میکنیم به صورت سیستمی هم آلارم داشته باشیم. روشهای مختلفی برای این کار وجود داره مانند استفاده از تستهای آماری برای مقایسه توزیع فیچرهای دیتای ترین و دیتای پروداکشن. یکی از راهحلهای هوشمندانه هم آموزش یک مدل دستهبند (مانند مدل random forest) بر روی دیتای ترین و تست به صورت همزمان هست به این صورت که به کل دیتای ترین لیبل ۱ و به کل دیتای تست لیبل صفر بزنیم. اگه مدل ما بتونه با دقت خوبی این دو تا دیتا رو از هم تفکیک کنه ینی به احتمال زیاد data drift رخ داده و چنانچه از مدلهای درختی استفاده کرده باشید با مفهوم feature importance میتونید حتی متغیر دریفت کرده رو هم شناسایی کنید. (برای استفاده از این مفهوم یه بار دیگه این پست رو نگاه بندازید)
و در آخر، علل مختلفی برای وقوع model drift وجود داره که از مهمترینهاشون تاثیرات فصلی و مقطعی روی داده، معرفی مفاهیم یا محصولات و یا سرویسهای جدید به بازار هدف و یا تغییر کیفیت داده است. مهمترین راهکار هم برای رفع model drift اینه که فرآیند retrain برای مدلتون داشته باشید و هیچ وقت به اینکه یه مدل با کیفیت رو روی دیتای ترین آموزش دادید و روی دیتای تست نتیجه خوب گرفتید هم بسنده نکنید.
منابع:
A survey on concept drift adaptation
Design Machine Learning Systems
#handsOn
@nlp_stuff
اگه تجربه دیپلوی مدلهای یادگیری ماشین در پروداکشن رو داشته باشید حتما به این موضوع برخوردید که مدلتون بعد از مدتی ممکنه جوابهای خوبی تولید نکنه. یکی از علل رایج همچین اتفاقی، رخداد model drift هست که به انواع مختلف میتونه رخ بده. model drift میتونه ناشی از data drift یا concept drift باشه. خود data drift هم میتونه براساس دریفت در فیچرها و یا دریفت در لیبل رخ بده. تصور کنید میخواید مدل پیشبینی قیمت خانه رو آموزش بدید و بعد از کرونا تقاضای خانههای بزرگ در بازار بیشتر شده و به همین دلیل تعداد خانههای کوچک در بازار بیشتر میشه و خانههای بزرگ کمتر. در این حالت توزیع فیچر سایز خانه عوضشده و منجر به data drift شده. یا در سناریوی دیگهای بهدلیل وقوع موج گرانی قیمت کل خانهها دچار تغییر شده باشه که در اینجا هم data drift از نوع تغییر متغیر هدف رو داریم.
در حالت concept drift هم نه توزیع فیچرها تغییر میکنه و نه توزیع متغیر هدف بلکه تابع نگاشتکننده فیچرها به لیبل تغییر میکنه. تصور کنید که در مساله پیشبینی قیمت خانه نه فیچرها تغییر کرده باشند و نه توزیع لیبلها بلکه افراد به دلیل تغییرات شرایط جامعه خانههای ویلایی رو بیشتر از خانههای آپارتمانی ترجیح بدند. در این حالت قیمت خانههای ویلایی به طور مضاعفی بالا میره و مدلی که قبلا آموزش دیده باشه در این شرایط نمیتونه پیشبینی خوبی حداقل درباره خانههای ویلایی داشته باشه.
اما چاره چیه؟! در وهله اول مانیتور، مانیتور، مانیتور! یکی از اصلیترین قسمتهای دیپلوی مدل در پروداکشن، مانیتور کردن عملکرد اون به صورت دورهای هست. با این روش اولین سوالی که بهوجود میاد اینه که چهطور میتونیم یه آلارم model drift رو به موقع ارسال کنیم؟ طبیعتا نیاز داریم علاوه بر اینکه با چشم نمودارها رو کنترل میکنیم به صورت سیستمی هم آلارم داشته باشیم. روشهای مختلفی برای این کار وجود داره مانند استفاده از تستهای آماری برای مقایسه توزیع فیچرهای دیتای ترین و دیتای پروداکشن. یکی از راهحلهای هوشمندانه هم آموزش یک مدل دستهبند (مانند مدل random forest) بر روی دیتای ترین و تست به صورت همزمان هست به این صورت که به کل دیتای ترین لیبل ۱ و به کل دیتای تست لیبل صفر بزنیم. اگه مدل ما بتونه با دقت خوبی این دو تا دیتا رو از هم تفکیک کنه ینی به احتمال زیاد data drift رخ داده و چنانچه از مدلهای درختی استفاده کرده باشید با مفهوم feature importance میتونید حتی متغیر دریفت کرده رو هم شناسایی کنید. (برای استفاده از این مفهوم یه بار دیگه این پست رو نگاه بندازید)
و در آخر، علل مختلفی برای وقوع model drift وجود داره که از مهمترینهاشون تاثیرات فصلی و مقطعی روی داده، معرفی مفاهیم یا محصولات و یا سرویسهای جدید به بازار هدف و یا تغییر کیفیت داده است. مهمترین راهکار هم برای رفع model drift اینه که فرآیند retrain برای مدلتون داشته باشید و هیچ وقت به اینکه یه مدل با کیفیت رو روی دیتای ترین آموزش دادید و روی دیتای تست نتیجه خوب گرفتید هم بسنده نکنید.
منابع:
A survey on concept drift adaptation
Design Machine Learning Systems
#handsOn
@nlp_stuff

