سود:
- امکان تعریف نوع مشکل (طبقه بندی، رگرسیون، خوشه بندی) و معیارهای موفقیت با توجه به هزینه واقعی کار
- امکان تقسیم صادقانه داده ها (بدون دست زدن به مجموعه آزمایشی؛ به ترتیب زمانی در سری زمانی) و ایجاد یک مبنای ارزیابی بدون نشت
- امکان انتخاب یک مدل قابل تفسیر با شروع با یک خط پایه ساده و افزودن پیچیدگی تنها زمانی که شایسته آن باشد.
تاکنون دادهها را جمعآوری کردهایم، آنها را پاکسازی کردهایم، آنها را بررسی کردهایم و ویژگیهایی تولید کردهایم. حالا میرسیم به کار واقعی، ساختن یک مدل. مدل یک ساختار ریاضی است که یک الگو را از داده ها می آموزد و برای موقعیت های جدید پیش بینی می کند. اما مهمترین بخش ساخت یک مدل، خود کد نیست، بلکه دو تصمیمی است که مقدم بر آن است: تعریف مشکل درست و تقسیم صحیح دادهها. هوش مصنوعی یک مشاور قدرتمند در انتخاب الگوریتم، کدنویسی و تنظیم پارامتر است. اما این به یک نفر بستگی دارد که چه چیزی را پیش بینی کند و موفقیت به چه معناست. یک مشکل بد تعریف شده حتی با یک مدل کاملاً نوشته شده نیز کار نخواهد کرد.
ابتدا تعریف مسئله: چه چیزی را پیش بینی می کنیم
هر کار مدلینگ با یک سوال شروع می شود و این سوال نوع مدل را مشخص می کند. طبقه بندی - خروجی یک دسته است: "این مشتری می رود یا می ماند؟"، "آیا این معامله جعلی است؟". رگرسیون (به انگلیسی رگرسیون - خروجی یک عدد است): "این خانه چقدر ارزش دارد؟"، "ماه آینده چند سفارش می آید؟". خوشه بندی (تقسیم داده های بدون برچسب به گروه های طبیعی): "مشتریان من به چند بخش طبیعی تقسیم می شوند؟".
بخش دوم بیان مسئله، معیار موفقیت است: «خوب» بودن این مدل به چه معناست؟ در مدل کلاهبرداری، از دست دادن یک کلاهبردار بسیار گرانتر از مسدود کردن تصادفی یک مشتری صادق است. بنابراین نه «دقت عمومی» بلکه «میزان دستگیری کلاهبرداران» به چشم می خورد. اگر این معیار را از ابتدا به همراه صاحب کسب و کار تعریف نکنید، در نهایت به یک مدل «بسیار دقیق» خواهید رسید که کار نمی کند (ما در واحد 7 به معیارها عمیق تر خواهیم پرداخت).
احتیاط: "دقت" می تواند گمراه کننده باشد. اگر از هر 1000 تراکنش 10 مورد کلاهبرداری باشد، یک مدل احمقانه که می گوید "هیچکدام تقلبی نیست" 99٪ دقت را ارائه می دهد اما حتی یک کلاهبردار را دستگیر نمی کند. معیارهای موفقیت را بر اساس هزینه واقعی مشکل انتخاب کنید.
تقسیم بندی آموزش/آزمون: بررسی صادقانه مدل
آزمایش یک مدل با داده هایی که آموخته است مانند این است که از دانش آموز همان سؤالاتی را بپرسید که در امتحان خوانده است. او نمرات بالایی می گیرد اما آنچه را که واقعا می داند را نشان نمی دهد. بنابراین ما داده ها را به دو (اغلب سه) تقسیم می کنیم:
- مجموعه آموزشی (مجموعه آموزشی به زبان انگلیسی، معمولاً 70-80%): مدل در این مورد یاد می گیرد.
- مجموعه تست (مجموعه تست، معمولاً 20-30%): مدل اصلاً این را نمی بیند. عملکرد واقعی در اینجا اندازه گیری می شود.
- مجموعه اعتبارسنجی: مجموعه میانی مورد استفاده برای تنظیم مدل (کدام پارامتر بهتر است). برای تمیز نگه داشتن مجموعه تست.
اساسی ترین قانون: مجموعه تست هرگز در طول تمرین لمس نمی شود. مقیاسبندی، کدگذاری، انتخاب ویژگی - همه به سادگی از مجموعه آموزشی یاد میشوند، سپس برای آزمایش اعمال میشوند (اصل نشت از واحد 5). مجموعه تست اولین باری است که مدل دنیای واقعی را می بیند. اگر خیلی زود آن را روشن کنید، هرگز عملکرد واقعی را نمی دانید.
استثنا سری زمانی: اگر داده های شما وابسته به زمان باشد (فروش، بازار سهام، تقاضا)، تقسیم تصادفی انجام نمی شود. زیرا تقسیم تصادفی باعث می شود مدل آینده را ببیند و گذشته را پیش بینی کند - این نشت است. در عوض، به ترتیب زمانی تقسیم کنید: با دوره قدیم تمرین کنید، با دوره جدید تست کنید.
انتخاب الگوریتم: از ساده به پیچیده
رایج ترین اشتباه مبتدیان این است که با پیچیده ترین مدل شروع کنند. رویکرد صحیح برعکس است: ابتدا یک خط پایه ساده ایجاد کنید. "همیشه طبقه اکثریت را حدس بزنید" در یک طبقه بندی. "همیشه میانگین را تخمین بزنید" در یک رگرسیون. این مدل احمقانه یک خط مبنا می دهد. اگر مدل واقعی شما نمی تواند این را قبول کند، مشکل وجود دارد. سپس به سراغ مدل های ساده و قابل تفسیر بروید.
مدل
نوع مشکل
نقطه قوت
ضعف
خط پایه (اکثریت/متوسط)
هر دو
معیار می دهد
یاد نمی گیرد
رگرسیون لجستیک
طبقه بندی
ساده، قابل تفسیر
فقط رابطه خطی
رگرسیون خطی
رگرسیون
ساده، سریع
فرض خطی
درخت تصمیم
هر دو
قابل تفسیر
حفظ آسان
جنگل تصادفی
هر دو
قوی، بادوام
کمتر قابل تفسیر است
تقویت گرادیان (XGBoost و غیره)
هر دو
بسیار قوی
تنظیم مشکل، خطر حفظ کردن
قانون: ساده ترین مدل "به اندازه کافی خوب" را انتخاب کنید. تفسیرپذیری در بیشتر زمینه های تجاری از قدرت ارزشمندتر است. بهتر است در مورد رد وام توضیح دهید "به دلیل اینکه نسبت بدهی شما به درآمد بالا است" تا "چون جعبه سیاه چنین گفته است".
سه کیف کوچک
مورد 1 - تعریف نادرست مشکل. یک تیم یک مدل طبقه بندی بر اساس «راضی بودن مشتری است» ایجاد کرد اما «دقت» را به عنوان معیار موفقیت انتخاب کرد. در دادهها، 88 درصد از مشتریان راضی بودند. این مدل با فراخوانی همه افراد "راضی" 88 درصد دقت داشت و هرگز افراد ناراضی را دستگیر نکرد - حتی اگر هدف واقعی آنها پیدا کردن آنها بود. درس: معیارهای موفقیت را بر اساس هدف واقعی انتخاب کنید.
مورد 2 - نشت زمان در محفظه. در یک پروژه پیش بینی تقاضا، داده ها به طور تصادفی تقسیم شدند. این مدل دقت 93 درصدی داشت اما در تولید خراب شد زیرا در تمرینات ژانویه و سپس نوامبر را با دادههای دسامبر پیشبینی کرده بود - آینده را دیده بود. وقتی به تقسیم زمانی تغییر کردیم، عملکرد واقعی به 74 درصد افزایش یافت. درس: تقسیم زمانی در سری های زمانی.
مورد 3 - پیچیدگی غیر ضروری. یک تحلیلگر مستقیماً با یک شبکه عصبی عمیق شروع به کار کرد، آن را برای هفته ها تنظیم کرد و دقت 81 درصد را به دست آورد. سپس یکی از همکاران با 20 خط رگرسیون لجستیک 80 درصد را به دست آورد - بسیار سریعتر، قابل تفسیر و نگهداری آسانتر. درس: با یک خط مبنا و یک مدل ساده شروع کنید، زمانی که شایسته آن است، پیچیدگی را اضافه کنید.
چهار قالب قابل کپی
1) توضیح تعریف مسئله:
نقش شما: مشاور مدلینگ به من کمک کنید تا این شغل را تعریف کنم: "من می خواهم ریزش مشتری را کاهش دهم." از من بپرسید و توضیح دهید: (1) آیا این یک طبقه بندی یا رگرسیون است، (2) دقیقاً متغیر هدف چیست و چگونه باید تعریف شود، (3) معیار موفقیت چیست و چرا. تصمیم با من است. شما سوالات و گزینه ها را ارائه می دهید.
2) محفظه آموزش / آزمون ایمن:
df من را به آموزش/تست 80%/20% تقسیم کنم. توزیع کلاس را حفظ کنید (stratify).random_state=42. این یک سری زمانی (مشاهدات مستقل) نیست. نسبت کلاس هر مجموعه را پس از تقسیم چاپ کنید. فقط کد تقسیم را بدون اعمال تغییر به مجموعه آزمایشی بدهید.
3) تقسیم زمانی سری های زمانی:
داده ها وابسته به زمان هستند (ستون تاریخ: order_date). تصادفی نیست، به ترتیب زمانی تقسیم کنید: قدیمی ترین 80٪ آموزش، جدیدترین 20٪ تست. بازههای تاریخ آموزش و آزمایش را پرینت بگیرید تا مطمئن شوم که در آینده فاش نشده است.
4) تعیین خط مبنا:
من یک مشکل طبقه بندی دارم (هدف: churn 0/1). ابتدا یک خط پایه ایجاد کنید: دقت آموزش/آزمایش را با DummyClassifier اندازه گیری کنید، که همیشه کلاس اکثریت را پیش بینی می کند. سپس یک رگرسیون لجستیک ساده را آموزش دهید و مقایسه کنید که آیا خط پایه را شکست می دهد یا خیر. معیارهای این دو را در کنار هم نشان دهید.
اعلان ضعیف / اعلان قوی
اعلان ضعیف:
با این داده ها بهترین مدل را بسازید.
"بهترین" تعریف نشده است. هیچ نوع مشکل، هیچ هدف، معیار موفقیت و هیچ استراتژی تقسیم وجود ندارد. هوش مصنوعی یک الگوی تصادفی، احتمالاً نشتی ایجاد می کند.
اعلان قدرتمند:
نقش شما: دستیار مدلینگ. مشکل: طبقه بندی، هدف "فرق" (0/1)، عدم تعادل طبقه وجود دارد (~12٪ ریزش). معیار موفقیت: یادآوری کسانی که سرگردان هستند یک اولویت است. مشاهده مستقل از داده (نه سری زمانی). وظیفه: (1) تقسیم طبقه بندی شده 80/20، (2) خط پایه DummyClassifier، (3) رگرسیون لجستیک، همه تحولات در خط لوله و فقط از آموزش آموخته شده است. قبل از تقسیم به مجموعه تست دست نزنید.
در اینجا نوع مشکل، عدم تعادل، معیار و اندازه گیری نشتی مشخص است.
اشتباهات رایج
- عدم انتخاب معیارهای موفقیت با توجه به هدف واقعی. "دقت" در داده های نامتعادل گمراه کننده است. اگر میخواهید طبقه اقلیت را جذب کنید، یادآوری به منصه ظهور میرسد.
- لمس مجموعه تست در حین تمرین. انجام مقیاسبندی/رمزگذاری قبل از تقسیم، نشتی دارد و عملکرد واقعی را پنهان میکند.
- تقسیم تصادفی در سری های زمانی مدل آینده را می بیند، در تولید سقوط می کند. تقسیم زمانی ضروری است.
- پرش به یک مدل پیچیده بدون ایجاد خط پایه. بدون معیار نمی توانید بفهمید که آیا یک مدل واقعا خوب است یا نه.
- نادیده گرفتن تفسیرپذیری در تصمیمات تجاری، یک مدل ساده و قابل توضیح اغلب از جعبه سیاه ارزشمندتر است.
نکته: قبل از شروع ساخت یک مدل، یک جمله بنویسید: "این مدل _____ را پیش بینی می کند، موفقیت آن با متریک _____ اندازه گیری می شود، زیرا هزینه واقعی کار _____ است." اگر نمی توانید این جمله را پر کنید، هنوز برای نوشتن کد آماده نیستید.
به طور خلاصه
مهمترین بخش ساخت یک مدل کد نیست، بلکه تصمیمهایی است که مقدم بر آن هستند: تعریف مشکل درست (طبقهبندی یا رگرسیون، هدف چیست، معیار موفقیت چیست) و تقسیم دادهها به طور عادلانه (بدون لمس مجموعه آزمایشی، زمانی در سری زمانی). همیشه با یک خط پایه ساده شروع کنید و پیچیدگی را فقط زمانی که شایسته آن است اضافه کنید. تفسیرپذیری در بیشتر زمینههای تجاری بیش از قدرت ارزش دارد. هوش مصنوعی یک مشاور قدرتمند در انتخاب الگوریتم و کد است، اما انسان تصمیم میگیرد که شما چه چیزی را پیشبینی کنید و چرا.
وظیفه کاربردی
یک مسئله پیش بینی را تعریف کنید و جمله زیر را به صورت کتبی تکمیل کنید: "این مدل ___ (طبقه بندی/رگرسیون) را پیش بینی می کند، هدف ___ است، معیار موفقیت ___ است زیرا ___. سپس دادهها را با استراتژی مناسب تقسیم کنید (زمانشناسی اگر سری زمانی باشد)، یک خط پایه ایجاد کنید، و اندازهگیری کنید که آیا یک الگوی ساده آن خط مبنا را میشکند یا خیر.
چک لیست
- [ ] آیا به وضوح نوع مشکل (طبقه بندی/رگرسیون) و هدف را تعریف کرده ام؟
- [ ] آیا معیارهای موفقیت را بر اساس هزینه واقعی کار انتخاب کرده ام؟
- [ ] آیا مجموعه تست را در طول تمرین دست نخورده رها کردم؟
- [ ] اگر یک سری زمانی است، آیا آن را به ترتیب زمانی تقسیم کردم؟
- [ ] آیا قبل از حرکت به مدل پیچیده یک خط پایه ایجاد کرده ام؟