ویرگول
ورودثبت نام
sobhan chabi
sobhan chabi
sobhan chabi
sobhan chabi
خواندن ۴ دقیقه·۷ روز پیش

چرا مدل هوش مصنوعی روی لپتاپ عالیه ولی در واقعیت شکست میخوره ؟

منبع عکس : سایت دنیای اقتصاد: لینک مربوطه
منبع عکس : سایت دنیای اقتصاد: لینک مربوطه

تا قبل از آشنا شدن با مفهوم data leakage فکر میکردم هر چی دقت مدل بالاتر باشه ؛ همه چی داره عالی کار میکنه و کارم رو درست انجام دادم .
اما بعداً متوجه شدم که مدل ما میتونه تقلب کنه و به نحوی به اطلاعاتی که نباید دسترسی داشته باشه ، دسترسی پیدا کرده و داره به کل من و مسیر پروژه رو گمراه میکنه . به این اتفاق Data Leakage (نشت داده) گفته میشه .

این داستان مشابه ممکنه که برای شما هم اتفاق افتاده باشه که وقتی مدل موقع test دقت 98 درصدی داشته و شما پیش خودتون میگفتین دیگه از این بهتر نمیشه یا شاید حتی خودتون رو رقیب حقیقی سم التمن خطاب کردین اما موقع deploy مدل به هیچ دردی نمیخوره و عملا بی فایده است .

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


اما Data leakage دقیقا چیه ؟

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

مدل موفق به رسیدن به درصد دقت های عالی میشه اما نه به خاطر یادگیری واقعی ؛ به خاطر تقلب .


انواع نشت داده

در کل سه نوع نشت داده اصلی وجود داره که در این بخش به اختصار بهشون میپردازیم


1. نشت هدف (target leak) :

یه ویژگی در مدل داریم که مستقیما از برچسب هدف نشأت میگیره یا بعد از اون ثبت میشه

2 .آلودگی داده های آموزش و آزمون (train-test-contamination ):

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

3 . نشت زمانی (time leakage ):

در داده های سری زمانی ، از اطلاعات آینده برای پیش بینی گذشته استفاده میشه .


نوع اول - نشت هدف

رایج ترین مثال برای این نوع نشت اینه که میخوایم پیش بینی کنیم آیا یه نفر شامل بیمه درمانی میشه یا نه .

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

مثال :

در اینجا use_meds و diagnosed اطلاعاتی هستن که موقع پیش بینی موجود نیست پس نباید به عنوان ویژگی به مدل آموزش داد .
در اینجا use_meds و diagnosed اطلاعاتی هستن که موقع پیش بینی موجود نیست پس نباید به عنوان ویژگی به مدل آموزش داد .

نوع دوم - آلودگی داده های آموزش و آزمون - اشتباه رایج در پیش پردازش

این نوع نشت معمولا نا خواسته اتفاق میافته و مشکل اینجاست که پیش پردازش رو قبل از تقسیم داده ها انجام میدیم :

بهترین راه حل برای رفع این مشکل اینه که همیشه از sklearn.pipline.Pipeline استفاده بکنیم . این کلاس تضمین میکنه که هر مرحله پردازش فقط روی داده های آموزشی تنظیم میشه نه آزمون .

نشت نوع سوم - تله داده های سری زمانی

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

مثال :

که برای حل این مشکل هم از کلاس TimeSeriesSplit استفاده کردیم که جلوی مشکلات ناشی از نشت تصادفی رو بگیریم .


جمع بندی

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

در خوش بینانه ترین حالت فقط باعث شده که منابع و وقت هدر بره ؛ اما سناریو وقتی جدی میشه که یک سیستم مالی یا پزشکی بر اساس مدل های بی اعتبار تصمیم بگیره . راه حل این مشکل هم ساده است : قبل از هر چیز از خودت بپرس « آیا این ویژگی موقع پیش بینی موجوده ؟» و همیشه زنجیره پردازش بساز تا مدلت در محیط واقعی عم به خوبی روی کاغذ عمل کنه .

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

سخن پایانی : اگه این مقاله برات مفید بود، یه سوال ازت دارم: آیا تا حالا خودت با نشت داده دست‌وپنجه نرم کردی؟ تجربه‌ات رو توی کامنت‌ها بنویس — احتمالاً بقیه هم همون اشتباه رو کردن و از خوندنش چیزی یاد می‌گیرن.

مدلmachine learningdatapandaspython
۷
۳
sobhan chabi
sobhan chabi
شاید از این پست‌ها خوشتان بیاید