تبریک! شما مدل تکشاخ را مستقر کردهاید. مدل شما باید بدون هیچ مشکلی به صورت 24 ساعته و 7 روز هفته اجرا شود. برای اطمینان از این امر، باید خط لوله یادگیری ماشین (ML) خود را رصد کنید.
نوشتن یک طرح داده برای اعتبارسنجی دادههای خام
برای نظارت بر دادههای خود، باید با نوشتن قوانینی که دادهها باید برآورده کنند، آنها را به طور مداوم با مقادیر آماری مورد انتظار بررسی کنید. این مجموعه از قوانین، طرحواره داده نامیده میشود. با دنبال کردن این مراحل، یک طرحواره داده تعریف کنید:
دامنه و توزیع ویژگیهای خود را درک کنید. برای ویژگیهای دستهبندیشده، مجموعه مقادیر ممکن را درک کنید.
درک خود را در طرح داده کدگذاری کنید. موارد زیر نمونههایی از قوانین هستند:
- مطمئن شوید که امتیازهای ارسالی کاربران همیشه در محدوده ۱ تا ۵ باشد.
- بررسی کنید که کلمه the بیشترین تکرار را داشته باشد (برای یک ویژگی متنی انگلیسی).
- بررسی کنید که هر ویژگی دستهبندیشده، مقداری از یک مجموعه ثابت از مقادیر ممکن را داشته باشد.
دادههای خود را با طرحواره داده آزمایش کنید. طرحواره شما باید خطاهای دادهای مانند موارد زیر را تشخیص دهد:
- ناهنجاریها
- مقادیر غیرمنتظره متغیرهای دستهای
- توزیعهای غیرمنتظره دادهها
نوشتن تستهای واحد برای اعتبارسنجی مهندسی ویژگیها
اگرچه دادههای خام شما ممکن است از طرح داده عبور کنند، اما مدل شما روی دادههای خام آموزش نمیبیند. بلکه، مدل شما روی دادههایی که مهندسی ویژگی شدهاند آموزش میبیند. به عنوان مثال، مدل شما روی ویژگیهای عددی نرمال شده آموزش میبیند نه روی دادههای عددی خام. از آنجا که دادههای مهندسی ویژگی میتوانند بسیار متفاوت از دادههای ورودی خام باشند، باید دادههای مهندسی ویژگی را جدا از بررسیهای خود روی دادههای ورودی خام بررسی کنید.
بر اساس درک خود از دادههای مهندسیشدهی ویژگی، تستهای واحد بنویسید. برای مثال، میتوانید تستهای واحدی بنویسید تا شرایطی مانند موارد زیر را بررسی کنید:
- تمام ویژگیهای عددی، مثلاً بین ۰ و ۱، مقیاسبندی میشوند.
- بردارهای کدگذاری شدهی وان-هات فقط شامل یک ۱ و N-1 صفر هستند.
- توزیع دادهها پس از تبدیل، مطابق با انتظارات است. برای مثال، اگر با استفاده از نمرات Z نرمالسازی انجام داده باشید، میانگین نمرات Z باید ۰ باشد.
- دادههای پرت با روشهایی مانند مقیاسبندی یا برش ، مدیریت میشوند.
معیارهای مربوط به بخشهای مهم داده را بررسی کنید
یک کل موفق گاهی اوقات یک زیرمجموعه ناموفق را پنهان میکند. به عبارت دیگر، یک مدل با معیارهای کلی عالی ممکن است همچنان پیشبینیهای بدی برای موقعیتهای خاص ارائه دهد. برای مثال:
مدل تکشاخ شما در کل عملکرد خوبی دارد، اما هنگام پیشبینی برای صحرای بزرگ آفریقا عملکرد ضعیفی دارد.
اگر شما از آن دسته مهندسانی هستید که از یک AUC کلی عالی راضی هستید، ممکن است متوجه مشکلات مدل در صحرای بزرگ نشوید. اگر انجام پیشبینیهای خوب برای هر منطقه مهم است، پس باید عملکرد را برای هر منطقه پیگیری کنید. زیرمجموعههای دادهها، مانند زیرمجموعه مربوط به صحرای بزرگ، برشهای داده نامیده میشوند.
بخشهای داده مورد نظر را شناسایی کنید. سپس معیارهای مدل را برای این بخشهای داده با معیارهای کل مجموعه داده خود مقایسه کنید. بررسی اینکه مدل شما در تمام بخشهای داده عملکرد خوبی دارد، به حذف سوگیری کمک میکند. برای اطلاعات بیشتر به بخش «انصاف: ارزیابی سوگیری» مراجعه کنید.
از معیارهای دنیای واقعی استفاده کنید
معیارهای مدل لزوماً تأثیر مدل شما را در دنیای واقعی اندازهگیری نمیکنند. برای مثال، تغییر یک هایپرپارامتر ممکن است AUC مدل را افزایش دهد، اما این تغییر چگونه بر تجربه کاربر تأثیر گذاشته است؟ برای اندازهگیری تأثیر در دنیای واقعی، باید معیارهای جداگانهای تعریف کنید. برای مثال، میتوانید از کاربران مدل خود نظرسنجی کنید تا تأیید کنید که آنها واقعاً یک اسب شاخدار دیدهاند، در حالی که مدل پیشبینی کرده بود که آن را خواهند دید.
انحراف بین سرویس تمرینی و سرویس را بررسی کنید
کجی در سرویس آموزش به این معنی است که دادههای ورودی شما در طول آموزش با دادههای ورودی شما در سرویس متفاوت است. جدول زیر دو نوع مهم کجی را شرح میدهد:
نوع | تعریف | مثال | راه حل |
---|---|---|---|
کجشدگی طرحواره | دادههای ورودی آموزش و ارائه از یک طرحواره یکسان پیروی نمیکنند. | قالب یا توزیع دادههای ارائه شده تغییر میکند در حالی که مدل شما همچنان به آموزش روی دادههای قدیمی ادامه میدهد. | از یک طرحواره برای اعتبارسنجی دادههای آموزشی و ارائه استفاده کنید. مطمئن شوید که آمارهایی را که توسط طرحواره شما بررسی نشدهاند، مانند کسری از مقادیر گمشده، بهطور جداگانه بررسی میکنید. |
کجی ویژگی | دادههای مهندسیشده بین آموزش و خدمت متفاوت هستند. | کد مهندسی ویژگی بین آموزش و ارائه متفاوت است و دادههای مهندسیشده متفاوتی تولید میکند. | مشابه با اسکیما اسکو، قوانین آماری یکسانی را در سراسر دادههای آموزشی و مهندسیشده اعمال کنید. تعداد ویژگیهای اسکوئی شناساییشده و نسبت نمونههای اسکوئی به ازای هر ویژگی را پیگیری کنید. |
علل انحراف در سرویس آموزش میتواند نامحسوس باشد. همیشه در نظر بگیرید که در زمان پیشبینی چه دادههایی برای مدل شما در دسترس است. در طول آموزش، فقط از ویژگیهایی استفاده کنید که هنگام سرویس در دسترس خواهید بود.
تمرین: درک خود را بسنجید
فرض کنید یک فروشگاه آنلاین دارید و میخواهید پیشبینی کنید که در یک روز مشخص چقدر درآمد خواهید داشت. هدف یادگیری ماشین شما پیشبینی درآمد روزانه با استفاده از تعداد مشتریان به عنوان یک ویژگی است.
پاسخ: مشکل این است که شما تعداد مشتریان را در زمان پیشبینی، قبل از تکمیل فروش روزانه، نمیدانید. بنابراین، این ویژگی مفید نیست، حتی اگر این ویژگی پیشبینیکنندهی قوی درآمد روزانهی شما باشد. به طور مشابه، وقتی در حال آموزش یک مدل هستید و معیارهای ارزیابی شگفتانگیزی (مانند 0.99 AUC ) به دست میآورید، به دنبال این نوع ویژگیها باشید که میتوانند در برچسب شما نفوذ کنند.
نشتی برچسب را بررسی کنید
نشت برچسب به این معنی است که برچسبهای حقیقت پایه شما که سعی در پیشبینی آنها دارید، سهواً وارد ویژگیهای آموزشی شما شدهاند. تشخیص نشت برچسب گاهی اوقات بسیار دشوار است.
تمرین: درک خود را بسنجید
فرض کنید شما یک مدل طبقهبندی دودویی میسازید تا پیشبینی کند که آیا یک بیمار جدید بیمارستان سرطان دارد یا خیر. مدل شما از ویژگیهایی مانند موارد زیر استفاده میکند:
- سن بیمار
- جنسیت بیمار
- شرایط پزشکی قبلی
- نام بیمارستان
- علائم حیاتی
- نتایج آزمایش
- وراثت
برچسب به شرح زیر است:
- بولی: آیا بیمار سرطان دارد؟
شما دادهها را با دقت پارتیشنبندی میکنید و مطمئن میشوید که مجموعه آموزشی شما به خوبی از مجموعه اعتبارسنجی و مجموعه تست شما جدا شده است. مدل در مجموعه اعتبارسنجی و مجموعه تست عملکرد فوقالعادهای دارد؛ معیارها فوقالعاده هستند. متأسفانه، مدل در دنیای واقعی روی بیماران جدید عملکرد وحشتناکی دارد.
پاسخ: یکی از ویژگیهای مدل، نام بیمارستان است. برخی بیمارستانها در درمان سرطان تخصص دارند. در طول آموزش، مدل به سرعت متوجه شد که بیمارانی که به بیمارستانهای خاصی اختصاص داده شدهاند، به احتمال زیاد سرطان دارند. بنابراین، نام بیمارستان به یک ویژگی با وزن بالا تبدیل شد.
در زمان استنتاج، اکثر بیماران هنوز به بیمارستان ارجاع داده نشده بودند. از این گذشته، هدف مدل تشخیص وجود یا عدم وجود سرطان و سپس استفاده از آن تشخیص برای ارجاع بیمار به بیمارستان مناسب بود. در نتیجه، در طول استنتاج، ویژگی نام بیمارستان هنوز در دسترس نبود و مدل مجبور شد به ویژگیهای دیگر تکیه کند.
نظارت بر سن مدل در طول خط تولید
اگر دادههای سرویسدهی با گذشت زمان تکامل یابند اما مدل شما به طور منظم آموزش مجدد نبیند، شاهد کاهش کیفیت مدل خواهید بود. زمان آموزش مجدد مدل روی دادههای جدید را پیگیری کنید و یک سن آستانه برای هشدارها تعیین کنید. علاوه بر نظارت بر سن مدل در زمان ارائه، باید سن مدل را در طول خط لوله نظارت کنید تا متوجه توقفهای خط لوله شوید.
بررسی کنید که وزنها و خروجیهای مدل از نظر عددی پایدار باشند.
در طول آموزش مدل، وزنها و خروجیهای لایه شما نباید NaN (عدد نباشد) یا Inf (نامحدود) باشند. تستهایی بنویسید تا مقادیر NaN و Inf وزنها و خروجیهای لایه شما بررسی شود. علاوه بر این، آزمایش کنید که بیش از نیمی از خروجیهای یک لایه صفر نباشند.
نظارت بر عملکرد مدل
پیشبینیکننده ظاهر اسب تکشاخ شما بیش از حد انتظار محبوب شده است! شما درخواستهای پیشبینی زیادی و حتی دادههای آموزشی بیشتری دریافت میکنید. شما فکر میکنید که این عالی است تا زمانی که متوجه میشوید مدل شما حافظه و زمان بیشتری را برای آموزش مصرف میکند. شما تصمیم میگیرید با دنبال کردن این مراحل، عملکرد مدل خود را زیر نظر بگیرید:
- عملکرد مدل را بر اساس نسخههای کد، مدل و دادهها پیگیری کنید. چنین ردیابی به شما امکان میدهد علت دقیق هرگونه افت عملکرد را مشخص کنید.
- مراحل آموزش در هر ثانیه را برای یک نسخه مدل جدید در مقایسه با نسخه قبلی و در برابر یک آستانه ثابت آزمایش کنید.
- با تعیین آستانهای برای استفاده از حافظه، نشت حافظه را تشخیص دهید.
- زمان پاسخگویی API را رصد کنید و درصدهای آنها را پیگیری کنید. اگرچه زمان پاسخگویی API ممکن است خارج از کنترل شما باشد، اما پاسخهای کند میتوانند به طور بالقوه باعث ضعیف شدن معیارهای دنیای واقعی شوند.
- تعداد پرسوجوهای پاسخ داده شده در هر ثانیه را زیر نظر داشته باشید.
کیفیت مدل زنده را روی دادههای ارائه شده آزمایش کنید
شما مدل خود را اعتبارسنجی کردهاید. اما اگر سناریوهای دنیای واقعی، مانند رفتار تکشاخ، پس از ثبت دادههای اعتبارسنجی شما تغییر کنند، چه میشود؟ در این صورت کیفیت مدل ارائه شده شما کاهش مییابد. با این حال، آزمایش کیفیت در ارائه دشوار است زیرا دادههای دنیای واقعی همیشه برچسبگذاری نمیشوند. اگر دادههای ارائه شده شما برچسبگذاری نشدهاند، این آزمایشها را در نظر بگیرید:
مدلهایی را بررسی کنید که سوگیری آماری معناداری در پیشبینیها نشان میدهند. به طبقهبندی: سوگیری پیشبینی مراجعه کنید.
معیارهای دنیای واقعی را برای مدل خود دنبال کنید. به عنوان مثال، اگر در حال طبقهبندی هرزنامهها هستید، پیشبینیهای خود را با هرزنامههای گزارش شده توسط کاربران مقایسه کنید.
با ارائه یک نسخه جدید از مدل روی بخشی از پرسوجوهای خود، واگرایی بالقوه بین دادههای آموزشی و ارائه شده را کاهش دهید. همزمان با اعتبارسنجی مدل ارائه شده جدید خود، به تدریج تمام پرسوجوها را به نسخه جدید تغییر دهید.
با استفاده از این تستها، به یاد داشته باشید که هم افت ناگهانی و هم افت آهسته در کیفیت پیشبینی را رصد کنید.
تصادفیسازی
خط تولید دادههای خود را قابل تکرار کنید. فرض کنید میخواهید یک ویژگی اضافه کنید تا ببینید چگونه بر کیفیت مدل تأثیر میگذارد. برای یک آزمایش منصفانه، مجموعه دادههای شما باید به جز این ویژگی جدید، یکسان باشند. در همین راستا، مطمئن شوید که هرگونه تصادفیسازی در تولید دادهها میتواند قطعی باشد:
- مولدهای اعداد تصادفی (RNG) خود را به صورت تصادفی (seed) ایجاد کنید . این کار تضمین میکند که RNG هر بار که اجرا میشود، مقادیر یکسانی را با ترتیب یکسان تولید کند و مجموعه دادههای شما را از نو بسازد.
- از کلیدهای هش ثابت استفاده کنید. هش کردن یک روش رایج برای تقسیم یا نمونهبرداری از دادهها است. میتوانید هر مثال را هش کنید و از عدد صحیح حاصل برای تصمیمگیری در مورد اینکه مثال را در کدام تقسیم قرار دهید، استفاده کنید. ورودیهای تابع هش شما نباید هر بار که برنامه تولید داده را اجرا میکنید تغییر کنند. به عنوان مثال، اگر میخواهید هشهای خود را بنا به تقاضا از نو ایجاد کنید، از زمان فعلی یا یک عدد تصادفی در هش خود استفاده نکنید.
رویکردهای قبلی هم برای نمونهگیری و هم برای تقسیم دادهها کاربرد دارند.
ملاحظات مربوط به هشینگ
دوباره تصور کنید که شما در حال جمعآوری کوئریهای جستجو هستید و از هش برای گنجاندن یا حذف کوئریها استفاده میکنید. اگر کلید هش فقط از کوئری استفاده کند، در طول چندین روز از دادهها، یا همیشه آن کوئری را گنجانید یا همیشه آن را حذف کنید. گنجاندن یا حذف همیشگی یک کوئری بد است زیرا:
- مجموعه آموزشی شما مجموعهای از پرسوجوهای با تنوع کمتر را مشاهده خواهد کرد.
- مجموعههای ارزیابی شما به صورت مصنوعی سخت خواهند بود، زیرا با دادههای آموزشی شما همپوشانی نخواهند داشت. در واقعیت، در زمان ارائه خدمت، شما برخی از ترافیک زنده را در دادههای آموزشی خود مشاهده خواهید کرد، بنابراین ارزیابی شما باید این را منعکس کند.
در عوض میتوانید هش را روی پرسوجو + تاریخ پرسوجو انجام دهید که منجر به هش متفاوتی برای هر روز میشود.
