سود:
- توانایی تولید ویژگی های مشتق معنادار با دانش دامنه و رمزگذاری دسته بندی های طبقه بندی شده با روش های مناسب (یک داغ، برچسب، هدف)
- امکان مقیاس بندی متغیرهای عددی بر اساس نوع مدل (استانداردسازی، نرمال سازی) و اجتناب از مقیاس بندی غیر ضروری یا ناقص
- امکان جلوگیری از نشت ویژگی با یادگیری تمام تغییرات پس از تقسیم آموزش/آزمون و فقط از آموزش
یک ضرب المثل قدیمی در یادگیری ماشین وجود دارد: "یادگیری ماشین کاربردی اساساً مهندسی ویژگی است." زیرا موفقیت یک مدل اغلب از ورودی هایی است که به مدل می دهید، نه اینکه کدام الگوریتم را انتخاب کنید. مهندسی ویژگی هنر تولید سیگنال های معنی دار از داده های خام است که مدل می تواند از آنها بیاموزد. هوش مصنوعی منبع غنی ایدهها در این مرحله است: وقتی میپرسید «چه ویژگیهایی میتوان از این دادهها تولید کرد»، دهها پیشنهاد را فهرست میکند. اما برخی از این پیشنهادات ممکن است ارزشمند، برخی ممکن است بی فایده و برخی خطرناک باشند (نشت). این وظیفه شماست که آن را مرتب کنید.
چرا ویژگی مهندسی
داده های خام به ندرت به بهترین شکل به مدل می رسد. در حالی که ستون "تاریخ تولد" به تنهایی بی معنی است، مقدار "سن" تولید شده از آن یک سیگنال قوی است. میتوانید ویژگیهایی مانند «روز هفته»، «روز/شب»، «آیا تعطیلات است» را از «مهر زمان سفارش» استخراج کنید. شما می توانید دو ستون را برای ایجاد یک نسبت ("نسبت بدهی/درآمد") ترکیب کنید. در اینجا، مهندسی ویژگی، دانش دامنه را به سیگنال ریاضی تبدیل می کند. و دقیقاً به همین دلیل است که این مرحله به بیشترین هوش انسانی نیاز دارد.
تبدیل متغیرهای دسته بندی به اعداد: کدگذاری
مدل ها معمولا با اعداد کار می کنند نه متن. تبدیل متغیرهای طبقه بندی شده (مانند شهر، رنگ، نوع محصول) به اعداد رمزگذاری نامیده می شود. سه روش رایج:
رمزگذاری تک داغ: یک ستون جداگانه با مقدار 0/1 برای هر دسته باز می کند. برای "شهر"، ستون های استانبول، آنکارا، ازمیر تشکیل شده است. اگر مشتری از استانبول باشد، فقط آن ستون 1 خواهد بود. زمانی ایده آل است که تعداد دسته ها کم باشد. اگر دسته بندی های زیادی وجود داشته باشد، صدها ستون تولید می کند (به این "انفجار اندازه" می گویند).
رمزگذاری برچسب: به هر دسته یک عدد می دهد (استانبول=0، آنکارا=1). ساده است، اما ممکن است به طور تصادفی یک دنباله به مدل آموزش دهد (مانند آنکارا > استانبول). بنابراین در دسته بندی های نامرتب با احتیاط استفاده می شود.
Target encoding: میانگین متغیر هدف در آن دسته را جایگزین هر دسته می کند. این بسیار قدرتمند است، اما خطرناک ترین منبع نشت: اگر هدف داده های آزمایش را در نظر بگیرید، مدل آینده را می بیند. باید فقط از روی داده های آموزشی و با دقت (در داخل اعتبار سنجی متقابل) محاسبه شود.
مقیاس بندی: اعداد زیاد مدل را تحت تأثیر قرار نمی دهند
برخی از مدل ها (مدل های مبتنی بر فاصله، مدل های خطی، شبکه های عصبی) به مقیاس متغیرها حساس هستند. اگر «درآمد» (0-500000) و «سن» (0-100) در یک الگو قرار گیرند، درآمد ممکن است صرفاً به این دلیل که بیشتر است غالب شود. مقیاس بندی این مشکل را برطرف می کند. دو روش متداول: استانداردسازی (هر مقدار را به "چند انحراف استاندارد از میانگین" تبدیل می کند) و عادی سازی (نرمال سازی حداقل حداکثر - مقادیر را در محدوده 0-1 فشرده می کند). مدلهای مبتنی بر درخت (درختهای تصمیمگیری، جنگل تصادفی) نسبت به مقیاس حساس نیستند، نیازی به مقیاسبندی ندارند.
احتیاط: پارامترهای مقیاس بندی و کدگذاری (میانگین، انحراف استاندارد، نگاشت طبقه بندی-میانگین) فقط باید از داده های آموزشی محاسبه شوند، سپس باید همان را برای داده های آزمون اعمال کرد. گنجاندن داده های آزمایشی نشتی است و باعث می شود مدل شما بهتر از آنچه هست به نظر برسد.
قلب نشت در مهندسی ویژگی
تولید ویژگی جایی است که نشت داده اغلب منشا می گیرد. دو اشتباه معمولی: نشت زمان - تولید ویژگی که شامل اطلاعات آینده است (از جمله روزهای پس از روز پیشبینی هنگام محاسبه «میانگین 30 روز گذشته»). نشت آمار - محاسبه یک ویژگی (میانگین مقیاس، مقدار رمزگذاری هدف) از تمام دادهها قبل از تقسیم آموزش/آزمون. قانون: هر تبدیل را پس از انجام تقسیم قطار/آزمون ابتدا و فقط از داده های آموزشی یاد بگیرید. The safest way to do this regularly is to use pipeline — a structure that collects all transformations in a single chain and applies them after splitting.
روش
برای چی
خطر نشت
توجه داشته باشید
رمزگذاری تک داغ
متغیر با چند دسته
پایین
منفجر شدن اندازه در دسته های مختلف
کدگذاری برچسب
دسته بندی مرتب شده
پایین
از کار افتادن نظم اشتباه را آموزش می دهد
رمزگذاری هدف
چند دسته، سیگنال قوی
بسیار بالا
فقط از تحصیل، در CV
استانداردسازی
مدل های خطی/فاصله ای
متوسط
پارامتر فقط به آموزش بستگی دارد
ویژگی پنجره زمانی
سری زمانی
بالا
آینده را اضافه کنید
سه کیف کوچک
مورد 1 - اموال با ارزش. یک تیم اعتباری ویژگی «نسبت بدهی به درآمد» را از ستونهای خام «درآمد ماهانه» و «پرداخت ماهانه بدهی» ایجاد کرد. این ویژگی منفرد، دقت مدل را از 71% به 79% افزایش داد. زیرا این نرخ بود، نه درآمد مطلق، که واقعاً ریسک را تعیین می کرد. درس: نسبت های تولید شده توسط دانش دامنه سیگنال های قوی هستند.
مورد 2 - نشت رمزگذاری هدف. یک تیم "کد پستی" را به عددی با رمزگذاری هدف (متوسط نرخ ریزش در آن منطقه) تبدیل کرد، اما این کار را از تمام داده ها قبل از تقسیم انجام داد. این مدل در مجموعه آزمایشی 94 درصد را به دست آورد و در تولید به 68 درصد کاهش یافت. 6 هفته تلاش هدر رفت. درس: کدگذاری هدف با دقت انجام می شود، فقط در داخل آموزش.
مورد 3 - فراموشی مقیاس. یک تحلیلگر درآمد (0-400000) و سن مشتری (18-75) را به یک مدل مبتنی بر فاصله بدون مقیاس گذاری تغذیه کرد. این مدل تقریباً به طور انحصاری به درآمد نگاه می کرد و تأثیر سن را از بین می برد. وقتی مقیاس بندی اضافه شد، تقسیم بندی معنادار شد. درس: مقیاس گذاری در مدل های فاصله ای/خطی نادیده گرفته نمی شود.
چهار قالب قابل کپی
1) تولید ایده ویژه (حذف به عهده شماست):
نقش شما: دستیار مهندسی ویژه. ستونهای df من: تاریخ_تاریخ_تاریخ_تاریخ_تاریخ_سفارش_زمان(مهر_زمان)،درآمد_tl، بدهی_tl، شهر، دسته_ محصول. هدف: "آیا وام بازپرداخت خواهد شد" (0/1). Suggest 15 features that can be generated from these columns; خطر نشت (کم / متوسط / زیاد) را برای هر کدام مشخص کنید. مواردی که حاوی اطلاعات آینده هستند را به وضوح علامت گذاری کنید.
2) کدگذاری ایمن (پس از تقسیم):
کدی را بنویسید که یک داغ «شهر» و «دسته_دسته» را رمزگذاری کند. مهم: رمزگذاری را فقط با دادههای آموزشی تنظیم کنید، سپس دادههای آزمایشی را تغییر دهید (با sklearn OneHotEncoder). نحوه برخورد با مقوله نادیده (handle_unknown) را در آموزش توضیح دهید.
3) تبدیل بدون نشت با Pipeline:
راهاندازی sklearn Pipeline: StandardScaler را روی ستونهای عددی اعمال کنید، OneHotEncoder را در ستونهای دستهبندیشده اعمال کنید، در پایان یک طبقهبندی کننده اضافه کنید. تضمین می کند که همه تغییرات پس از تقسیم قطار/آزمون و فقط از طریق آموزش آموخته می شوند. کد را توضیح دهید و دلیل عدم نشت آن را توضیح دهید.
4) ویژگی پنجره زمانی (کنترل نشت):
ویژگی "تعداد سفارشات در 30 روز گذشته" را برای هر مشتری ایجاد کنید، اما هرگز داده های بعد از روز پیش بینی را درج نکنید. خط به خط توضیح دهید که کد به آینده نگاه نمی کند. من ستون تاریخ مرجع را ارائه خواهم کرد.
اعلان ضعیف / اعلان قوی
اعلان ضعیف:
ویژگی های خوبی را به این داده ها اضافه کنید.
"خوب" تعریف نشده است، هدف نامشخص است، کنترل نشت وجود ندارد. هوش مصنوعی ویژگی های تصادفی و شاید نشتی ایجاد می کند.
اعلان قدرتمند:
نقش شما: مهندس ویژگی. هدف: "چرخش در 30 روز" (0/1)، تاریخ مرجع تخمینی: save_date. تاریخچه تراکنش در df.Task وجود دارد: 8 ویژگی ایجاد کنید، به سوال "آیا این اطلاعات را در زمان پیش بینی دارم" برای EACH پاسخ دهید. اضافه کردن تاریخ بعد از تاریخ مرجع در ویژگی های پنجره زمانی. کد را به روشی سازگار با خط لوله بنویسید تا بعد از بخش قطار/آزمایش اجرا شود.
در اینجا هدف، زمان مرجع و کنترل نشتی از ابتدا تعریف می شود.
اشتباهات رایج
- یادگیری تبدیل از تمام داده ها قبل از تقسیم. اگر پارامتر مقیاس بندی/رمزگذاری داده های تست را ببیند، نشت رخ می دهد.
- استفاده بی دقت از کدگذاری هدف. این قوی ترین اما نشتی ترین روش است. فقط از آموزش، در اعتبار سنجی متقابل.
- افزودن آینده با ویژگی پنجره زمانی. اگر محاسبه "30 روز گذشته" بعد از روز پیش بینی وارد شود، مدل آینده را می بیند.
- مقیاس بندی غیر ضروری در مدل درختی و مقیاس بندی ناقص در مدل خطی. تصمیمات مقیاس بندی با توجه به نوع مدل گرفته می شود.
- اضافه کردن همه پیشنهادات ویژگی هوش مصنوعی بدون سوال. پیشنهادات ممکن است شامل ویژگی های بی فایده و نشتی باشد.
نکته: برای هر ویژگی که ایجاد میکنید یک سؤال بنویسید: «آیا میتوانم این مقدار را با اطلاعاتی که در زمان پیشبینی دارم محاسبه کنم؟» اگر پاسخ «بله» واضح نیست، از این ویژگی استفاده نکنید. این رشته واحد بیشتر نشت های مربوط به ویژگی ها را از بین می برد.
به طور خلاصه
مهندسی ویژگی هنر تولید سیگنال های معنی دار از داده های خام است و اغلب موفقیت مدل را بیشتر از الگوریتم تعیین می کند. رمزگذاری دسته بندی ها (یک داغ، برچسب، هدف)، مقیاس بندی اعداد (استانداردسازی، عادی سازی) و تولید ویژگی های مشتق با دانش دامنه ابزارهای اساسی هستند. اما این مرحله همچنین قلب نشت است: تمام تحولات باید پس از تقسیم آموزش/آزمون و فقط از داده های آموزشی آموخته شوند. هوش مصنوعی ایده های زیادی تولید می کند. این قضاوت انسان است که ارزش را از خطرناک متمایز می کند.
وظیفه کاربردی
یک متغیر هدف انتخاب کنید و حداقل پنج ویژگی مشتق را از ستون هایی که دارید طراحی کنید. برای هر یک از آنها به سوال "آیا در زمان پیش بینی در دسترس هستم" به صورت کتبی پاسخ دهید و حداقل یکی را به عنوان "خطر بالای نشت" حذف کنید. سپس ویژگی های امن را در یک خط لوله کدگذاری کنید تا پس از پارتیشن پیاده سازی شوند.
چک لیست
- [ ] آیا من همه تبدیل ها را بعد از تقسیم قطار/آزمایش اعمال کردم؟
- [ ] آیا من فقط پارامترهای مقیاس بندی/رمزگذاری را از آموزش یاد گرفتم؟
- [ ] آیا برای هر ویژگی به سوال "آیا در زمان پیش بینی آن را دارم" پاسخ داده ام؟
- [ ] Have I taken extra care with high-risk methods such as target coding?
- [ ] آیا تصمیم گرفته ام برای نوع مدل (درختی/خطی) مقیاس مناسبی داشته باشم؟