लाभ:
- डोमेन ज्ञान के साथ सार्थक व्युत्पन्न सुविधाओं का उत्पादन करने और उचित तरीकों (एक-हॉट, लेबल, लक्ष्य) के साथ श्रेणीबद्ध श्रेणियों को एन्कोड करने की क्षमता
- मॉडल प्रकार (मानकीकरण, सामान्यीकरण) के अनुसार संख्यात्मक चर को स्केल करने और अनावश्यक या अपूर्ण स्केलिंग से बचने की क्षमता
- प्रशिक्षण/परीक्षण विभाजन के बाद और केवल प्रशिक्षण से सभी परिवर्तनों को सीखकर सुविधा रिसाव से बचने की क्षमता
मशीन लर्निंग में एक पुरानी कहावत है: "एप्लाइड मशीन लर्निंग अनिवार्य रूप से फीचर इंजीनियरिंग है।" क्योंकि किसी मॉडल की सफलता अक्सर इस बात से आती है कि आप मॉडल को क्या इनपुट देते हैं, न कि आप कौन सा एल्गोरिदम चुनते हैं। फ़ीचर इंजीनियरिंग कच्चे डेटा से सार्थक संकेत उत्पन्न करने की कला है जिसे मॉडल सीख सकता है। इस स्तर पर कृत्रिम बुद्धिमत्ता विचारों का एक समृद्ध स्रोत है: जब आप पूछते हैं कि "इस डेटा से कौन सी सुविधाएँ उत्पन्न की जा सकती हैं", तो यह दर्जनों सुझावों को सूचीबद्ध करता है। लेकिन इनमें से कुछ सुझाव मूल्यवान हो सकते हैं, कुछ बेकार हो सकते हैं, और कुछ खतरनाक (लीक) हो सकते हैं। इसे सुलझाना आपका काम है।
फ़ीचर इंजीनियरिंग क्यों
कच्चा डेटा शायद ही कभी मॉडल में अपने सर्वोत्तम रूप में आता है। जबकि अकेले "जन्मतिथि" कॉलम अर्थहीन है, इससे उत्पन्न "आयु" मान एक मजबूत संकेत है। आप "ऑर्डर टाइमस्टैम्प" से "सप्ताह का दिन", "दिन/रात", "क्या यह छुट्टी है" जैसी विशेषताएं निकाल सकते हैं। आप एक अनुपात ("ऋण/आय अनुपात") बनाने के लिए दो स्तंभों को जोड़ सकते हैं। यहां, फीचर इंजीनियरिंग डोमेन ज्ञान को गणितीय सिग्नल में अनुवाद कर रही है; और यही कारण है कि यह वह चरण है जिसके लिए सबसे अधिक मानवीय बुद्धि की आवश्यकता होती है।
श्रेणीबद्ध चर को संख्याओं में परिवर्तित करना: कोडिंग
मॉडल आम तौर पर संख्याओं के साथ काम करते हैं, टेक्स्ट के साथ नहीं। श्रेणीबद्ध चर (जैसे शहर, रंग, उत्पाद प्रकार) को संख्याओं में परिवर्तित करना एन्कोडिंग कहलाता है। तीन सामान्य विधियाँ:
वन-हॉट एन्कोडिंग: प्रत्येक श्रेणी के लिए 0/1 के मान के साथ एक अलग कॉलम खोलता है। "शहर" के लिए इस्तांबुल, अंकारा, इज़मिर कॉलम बनते हैं; यदि कोई ग्राहक इस्तांबुल से है, तो केवल वह कॉलम 1 होगा। श्रेणियों की संख्या कम होने पर आदर्श; यदि बहुत अधिक श्रेणियां हैं तो यह सैकड़ों कॉलम उत्पन्न करता है (इसे "आकार विस्फोट" कहा जाता है)।
लेबल एन्कोडिंग: प्रत्येक श्रेणी को एक नंबर देता है (इस्तांबुल=0, अंकारा=1)। यह सरल है, लेकिन यह गलती से मॉडल को एक अनुक्रम सिखा सकता है (जैसे अंकारा > इस्तांबुल); इसलिए इसका उपयोग अव्यवस्थित श्रेणियों में सावधानी के साथ किया जाता है।
लक्ष्य एन्कोडिंग: प्रत्येक श्रेणी को उस श्रेणी में लक्ष्य चर के औसत से बदल देता है। यह बहुत शक्तिशाली है, लेकिन रिसाव का सबसे खतरनाक स्रोत है: यदि आप परीक्षण डेटा के लक्ष्य को ध्यान में रखते हैं, तो मॉडल भविष्य देखता है। इसकी गणना केवल प्रशिक्षण डेटा से और सावधानीपूर्वक (क्रॉस-वैलिडेशन के भीतर) की जानी चाहिए।
स्केलिंग: बड़ी संख्याएँ मॉडल पर हावी नहीं होतीं
कुछ मॉडल (दूरी-आधारित, रैखिक मॉडल, तंत्रिका नेटवर्क) चर के पैमाने के प्रति संवेदनशील होते हैं। यदि "आय" (0-500,000) और "आयु" (0-100) एक ही पैटर्न में आते हैं, तो आय केवल इसलिए हावी हो सकती है क्योंकि यह बड़ी है। स्केलिंग इसे ठीक करती है. दो सामान्य विधियाँ: मानकीकरण (प्रत्येक मान को "माध्य से कितने मानक विचलन दूर" में परिवर्तित करता है) और सामान्यीकरण (न्यूनतम-अधिकतम सामान्यीकरण - मानों को 0-1 की सीमा में संपीड़ित करता है)। वृक्ष-आधारित मॉडल (निर्णय वृक्ष, यादृच्छिक वन) पैमाने के प्रति असंवेदनशील हैं, उन्हें स्केलिंग की आवश्यकता नहीं है।
सावधानी: स्केलिंग और कोडिंग पैरामीटर (माध्य, मानक विचलन, श्रेणी-माध्य मैपिंग) की गणना केवल प्रशिक्षण डेटा से की जानी चाहिए, फिर इसे परीक्षण डेटा पर लागू किया जाना चाहिए। परीक्षण डेटा शामिल करना लीकेज है और इससे आपका मॉडल वास्तव में उससे बेहतर दिखता है।
फ़ीचर इंजीनियरिंग में रिसाव का मूल
फ़ीचर जेनरेशन वह जगह है जहां डेटा रिसाव सबसे अधिक बार उत्पन्न होता है। दो सामान्य गलतियाँ: समय रिसाव - एक ऐसी सुविधा का निर्माण जिसमें भविष्य की जानकारी शामिल है ("पिछले 30 दिन के औसत" की गणना करते समय पूर्वानुमान दिवस के बाद के दिन भी शामिल हैं)। सांख्यिकी रिसाव - प्रशिक्षण/परीक्षण विभाजन से पहले सभी डेटा से एक सुविधा (स्केलिंग औसत, लक्ष्य एन्कोडिंग मान) की गणना करना। नियम: ट्रेन/टेस्ट स्प्लिट करने के बाद प्रत्येक परिवर्तन को पहले और केवल प्रशिक्षण डेटा से सीखें। इसे नियमित रूप से करने का सबसे सुरक्षित तरीका पाइपलाइन का उपयोग करना है - एक संरचना जो सभी परिवर्तनों को एक श्रृंखला में एकत्र करती है और विभाजन के बाद उन्हें लागू करती है।
विधि
किस लिए
रिसाव का खतरा
नोट
एक-हॉट एन्कोडिंग
कुछ श्रेणियों के साथ परिवर्तनशील
कम
कई श्रेणियों में आकार का विस्फोट
लेबल कोडिंग
क्रमबद्ध श्रेणी
कम
आउट ऑफ ऑर्डर गलत ऑर्डर सिखाता है
लक्ष्य एन्कोडिंग
बहु-श्रेणी, मजबूत संकेत
बहुत ऊँचा
सिर्फ शिक्षा से, सीवी में
मानकीकरण
रैखिक/दूरी मॉडल
मध्यम
पैरामीटर केवल शिक्षा पर निर्भर करता है
समय विंडो सुविधा
समय श्रृंखला
उच्च
भविष्य जोड़ें
तीन मिनी मामले
केस 1 - मूल्यवान संपत्ति। एक क्रेडिट टीम ने कच्चे "मासिक आय" और "मासिक ऋण भुगतान" कॉलम से "ऋण-से-आय अनुपात" सुविधा तैयार की। इस एकल व्युत्पन्न सुविधा ने मॉडल सटीकता को 71% से बढ़ाकर 79% कर दिया; क्योंकि यह दर थी, न कि पूर्ण आय, जो वास्तव में जोखिम को निर्धारित करती थी। पाठ: डोमेन ज्ञान से उत्पन्न अनुपात मजबूत संकेत हैं।
केस 2 - लक्ष्य एन्कोडिंग रिसाव। एक टीम ने "ज़िप कोड" को लक्ष्य एन्कोडिंग (उस क्षेत्र में औसत मंथन दर) के साथ एक संख्या में परिवर्तित कर दिया, लेकिन विभाजन से पहले सभी डेटा से ऐसा किया। मॉडल ने परीक्षण सेट पर 94% का प्रदर्शन किया, जो उत्पादन में 68% तक गिर गया। 6 सप्ताह की मेहनत बर्बाद हो गई. पाठ: लक्ष्य कोडिंग सावधानी से की जाती है, केवल प्रशिक्षण के भीतर।
केस 3 - स्केलिंग भूल जाना। एक विश्लेषक ने राजस्व (0-400,000) और ग्राहक की उम्र (18-75) को बिना स्केलिंग के दूरी-आधारित मॉडल में फीड किया। मॉडल ने उम्र के प्रभाव को कुचलते हुए लगभग विशेष रूप से आय पर ध्यान दिया। जब स्केलिंग जोड़ी गई, तो विभाजन सार्थक हो गया। पाठ: दूरी/रैखिक मॉडल में स्केलिंग की उपेक्षा नहीं की जाती है।
चार प्रतिलिपि योग्य टेम्पलेट
1) फीचर विचार निर्माण (उन्मूलन आप पर निर्भर है):
आपकी भूमिका: फ़ीचर इंजीनियरिंग सहायक। मेरे डीएफ कॉलम: जन्म_तिथि, ऑर्डर_समय (टाइमस्टैम्प), आय_टीएल, ऋण_टीएल, शहर, उत्पाद_श्रेणी। लक्ष्य: "क्या ऋण चुकाया जाएगा" (0/1)। उन 15 विशेषताओं का सुझाव दें जो इन स्तंभों से उत्पन्न की जा सकती हैं; प्रत्येक के लिए रिसाव का जोखिम (कम/मध्यम/उच्च) निर्दिष्ट करें। उन्हें स्पष्ट रूप से चिह्नित करें जिनमें भविष्य की जानकारी हो।
2) सुरक्षित कोडिंग (विभाजन के बाद):
वह कोड लिखें जो वन-हॉट "शहर" और "उत्पाद_श्रेणी" को एनकोड करता है। महत्वपूर्ण: एन्कोडिंग को केवल प्रशिक्षण डेटा में फिट करें, फिर परीक्षण डेटा को बदलें (sklearn OneHotEncoder के साथ)। बताएं कि आप शिक्षा में अनदेखी श्रेणी (हैंडल_अज्ञात) को कैसे संभालते हैं।
3) पाइपलाइन के साथ रिसाव-मुक्त रूपांतरण:
स्केलेर पाइपलाइन सेट करें: संख्यात्मक कॉलम में स्टैंडर्डस्केलर लागू करें, श्रेणीगत कॉलम में वनहॉटएनकोडर लागू करें, अंत में एक क्लासिफायरियर जोड़ें। गारंटी दें कि सभी परिवर्तन ट्रेन/परीक्षण विभाजन के बाद और केवल प्रशिक्षण से सीखे जाते हैं। कोड समझाएं और यह रिसाव मुक्त क्यों है।
4) समय विंडो सुविधा (रिसाव नियंत्रण):
प्रत्येक ग्राहक के लिए "पिछले 30 दिनों में ऑर्डर की संख्या" विशेषता उत्पन्न करें, लेकिन पूर्वानुमानित दिन के बाद का डेटा कभी भी शामिल न करें। पंक्ति दर पंक्ति समझाएं कि कोड भविष्य पर ध्यान नहीं देता है। मैं संदर्भ दिनांक कॉलम प्रदान करूंगा।
कमजोर संकेत/मजबूत संकेत
कमजोर संकेत:
इस डेटा में अच्छे गुण जोड़ें.
"अच्छा" अपरिभाषित है, लक्ष्य अस्पष्ट है, कोई रिसाव नियंत्रण नहीं है। एआई यादृच्छिक, शायद लीक से हटकर, सुविधाएँ उत्पन्न करता है।
शक्तिशाली संकेत:
आपकी भूमिका: फीचर इंजीनियर. लक्ष्य: "30 दिनों में मंथन" (0/1), अनुमानित संदर्भ तिथि: save_date. df.Task में लेन-देन का इतिहास है: 8 सुविधाएँ उत्पन्न करें, प्रत्येक के लिए "क्या मेरे पास भविष्यवाणी के समय यह जानकारी है" प्रश्न का उत्तर दें। समय विंडो सुविधाओं में संदर्भ दिनांक के बाद दिनांक जोड़ना। ट्रेन/परीक्षण अनुभाग के बाद निष्पादित करने के लिए पाइपलाइन-संगत तरीके से कोड लिखें।
यहां, लक्ष्य, संदर्भ समय और रिसाव नियंत्रण को शुरुआत से ही परिभाषित किया गया है।
सामान्य गलतियाँ
- विभाजन से पहले सभी डेटा से परिवर्तन सीखना। यदि स्केलिंग/एन्कोडिंग पैरामीटर परीक्षण डेटा देखता है, तो रिसाव होता है।
- लक्ष्य कोडिंग का लापरवाही से उपयोग. यह सबसे शक्तिशाली लेकिन सबसे लीक तरीका है; सिर्फ प्रशिक्षण से, क्रॉस सत्यापन में।
- टाइम विंडो सुविधा के साथ भविष्य जोड़ना। यदि पूर्वानुमान वाले दिन के बाद "अंतिम 30 दिन" की गणना दर्ज की जाती है, तो मॉडल भविष्य देखता है।
- ट्री मॉडल में अनावश्यक स्केलिंग और रैखिक मॉडल में अधूरी स्केलिंग। स्केलिंग के निर्णय मॉडल प्रकार के अनुसार लिए जाते हैं।
- एआई के हर फीचर सुझाव को बिना किसी सवाल के जोड़ना। सुझावों में बेकार और लीक वाली विशेषताएं शामिल हो सकती हैं।
युक्ति: आपके द्वारा उत्पन्न प्रत्येक सुविधा के लिए एक प्रश्न लिखें: "क्या मैं भविष्यवाणी करते समय मेरे पास मौजूद जानकारी के साथ इस मूल्य की गणना कर सकता हूं?" यदि उत्तर स्पष्ट "हाँ" नहीं है, तो सुविधा का उपयोग न करें। यह एकल अनुशासन अधिकांश फीचर-संबंधित लीक को समाप्त कर देता है।
सारांश
फ़ीचर इंजीनियरिंग कच्चे डेटा से सार्थक संकेत उत्पन्न करने की कला है और अक्सर एल्गोरिदम से अधिक मॉडल की सफलता निर्धारित करती है। श्रेणीबद्ध एन्कोडिंग (एक-हॉट, लेबल, लक्ष्य), संख्यात्मक स्केलिंग (मानकीकरण, सामान्यीकरण) और डोमेन ज्ञान के साथ व्युत्पन्न विशेषताएं तैयार करना बुनियादी उपकरण हैं। लेकिन यह चरण रिसाव का केंद्र भी है: सभी परिवर्तनों को प्रशिक्षण/परीक्षण विभाजन के बाद और केवल प्रशिक्षण डेटा से सीखा जाना चाहिए। एआई बहुत सारे विचार उत्पन्न करता है; यह मानवीय विवेक ही है जो मूल्यवान को खतरनाक से अलग करता है।
आवेदन कार्य
एक लक्ष्य चर चुनें और आपके पास मौजूद कॉलम से कम से कम पांच व्युत्पन्न विशेषताएं डिज़ाइन करें। उनमें से प्रत्येक के लिए, "क्या मैं भविष्यवाणी के समय उपलब्ध हूं" प्रश्न का उत्तर लिखित रूप में दें और कम से कम एक को "रिसाव के उच्च जोखिम" के रूप में समाप्त करें। फिर विभाजन के बाद लागू करने के लिए एक पाइपलाइन में सुरक्षित सुविधाओं को कोड करें।
चेकलिस्ट
- [ ] क्या मैंने ट्रेन/परीक्षण विभाजन के बाद सभी परिवर्तन लागू किए?
- [ ] क्या मैंने प्रशिक्षण से केवल स्केलिंग/एन्कोडिंग पैरामीटर सीखे?
- [ ] क्या मैंने प्रत्येक सुविधा के लिए "क्या भविष्यवाणी के समय यह मेरे पास था" प्रश्न का उत्तर दिया है?
- [ ] क्या मैंने लक्ष्य कोडिंग जैसे उच्च जोखिम वाले तरीकों में अतिरिक्त सावधानी बरती है?
- [ ] क्या मैंने मॉडल प्रकार (वृक्ष/रैखिक) के लिए उचित पैमाने पर निर्णय लिया है?