लाभ:
- डेटा लीक के प्रकारों (लक्ष्य, समय, प्रीप्रोसेसिंग, समूहीकृत पंक्ति) को पहचानने और अलार्म के रूप में 'टू गुड टू बी ट्रू गुड' स्कोर को क्वेरी करने की क्षमता
- परीक्षण सेट, पाइपलाइन और सही विभाजन (कालानुक्रमिक/समूहीकृत) के शीघ्र पृथक्करण के साथ रिसाव को रोकने की क्षमता
- निश्चित बीजों, संस्करण नियंत्रण और मैन्युअल चरणों को हटाने के साथ विश्लेषण को पुनरुत्पादित करने की क्षमता
दो गलतियाँ हैं जो डेटा विज्ञान में सबसे अधिक प्रयास बर्बाद करती हैं, और वे दोनों कपटपूर्ण हैं क्योंकि वे तब आपदा का कारण बनती हैं जब सब कुछ "ठीक लगता है।" पहला है डेटा लीक: मॉडल परीक्षण सेट पर बढ़िया काम करता है लेकिन उत्पादन में क्रैश हो जाता है। दूसरा है अपरिवर्तनीयता: आप छह महीने बाद एक विश्लेषण चलाते हैं और एक पूरी तरह से अलग परिणाम प्राप्त करते हैं। यह इकाई इन दो खतरों को गहराई से जानने और उनसे बचने के लिए समर्पित है। एआई दोनों जोखिमों को बढ़ा सकता है (तेज़ी से उत्पन्न करता है, छिपी हुई लीक का सुझाव देता है, आपके लिए मैन्युअल कदम उठाना आसान बनाता है) लेकिन अगर सही तरीके से उपयोग किया जाए तो उन्हें कम भी कर सकता है। अंतर अनुशासन में है.
डेटा लीक: क्लैरवॉयंट मॉडल
डेटा लीक तब होता है जब मॉडल प्रशिक्षण के दौरान ऐसी जानकारी देखता है जो वास्तविक भविष्यवाणी के समय उसके पास नहीं होगी। मॉडल इस जानकारी के साथ "धोखाधड़ी" करता है, परीक्षण सेट पर बहुत अच्छा दिखता है, लेकिन उस जानकारी के बिना उत्पादन में क्रैश हो जाता है। रिसाव का लक्षण लगभग हमेशा एक जैसा होता है: सच होना बहुत अच्छा है। इससे पहले कि आप 99% सटीकता देखकर खुश हों, आपको लीक की तलाश करनी चाहिए।
रिसाव के मुख्य प्रकार हैं:
1. लक्ष्य रिसाव: एक विशेषता लक्ष्य का परिणाम है। "रद्द किया गया" पूर्वानुमान में, "रद्दीकरण तिथि" या "धनवापसी राशि" कॉलम लक्ष्य का परिणाम हैं; परिणाम स्पष्ट होने पर ही इन्हें भरा जाएगा।
2. समय रिसाव: भविष्य की जानकारी को अतीत में लाना। "पिछले 30 दिनों के औसत" की गणना करते समय, पूर्वानुमानित दिन के बाद के दिनों को शामिल करें, या समय श्रृंखला को यादृच्छिक रूप से विभाजित करें।
3. प्री-प्रोसेसिंग लीकेज: प्रशिक्षण/परीक्षण विभाजन से पहले सभी डेटा से स्केलिंग, फिलिंग, कोडिंग जैसे सीखना परिवर्तन। परीक्षण डेटा का औसत प्रशिक्षण में हस्तक्षेप करता है।
4. डुप्लिकेट/समूहीकृत पंक्ति रिसाव: एक ही व्यक्ति से संबंधित पंक्तियाँ प्रशिक्षण और परीक्षण दोनों में मौजूद होती हैं (अलग-अलग सेटों में एक ही रोगी की दो यात्राएँ)। मॉडल व्यक्ति को याद रखता है.
रिसाव प्रकार
कैसे पैदा होता है
कैसे रोकें
लक्ष्य रिसाव
कॉलम जो लक्ष्य का परिणाम है
"क्या भविष्यवाणी के समय यह मेरे पास था" परीक्षण
समय रिसाव
भविष्य को अतीत में लाना
कालानुक्रमिक विभाजन, विंडो नियंत्रण
प्रीप्रोसेसिंग रिसाव
पूर्व-विभाजित रूपांतरण
पाइपलाइन, प्रशिक्षण से ही फिट
समूहीकृत पंक्ति रिसाव
दो सेटों में एक ही इकाई
समूह द्वारा विभाजित (GroupKFold)
रिसाव को रोकने का एकमात्र अनुशासन
सभी प्रकार की लीक के लिए सामान्य समाधान एक वाक्य में सिमट कर रह जाता है: वास्तविक भविष्य की नकल करने के लिए जितनी जल्दी हो सके परीक्षण सेट को अलग कर दें, और इसे कुछ भी "सिखाएँ" न। व्यवहार में, इसका मतलब है: पहले विभाजित करें, फिर केवल प्रशिक्षण से सभी परिवर्तनों को सीखें और उन्हें एक पाइपलाइन (एक संरचना जो सभी चरणों को एक श्रृंखला में एकत्रित करती है) में लागू करें। प्रत्येक सुविधा के लिए, प्रश्न पूछें "क्या भविष्यवाणी के समय मेरे पास यह जानकारी थी?" यदि समय हो तो इसे कालानुक्रमिक रूप से विभाजित करें; यदि एक ही इकाई दोहराव वाली है, तो समूह द्वारा विभाजित करें।
सावधानी: किसी लीक का सबसे खतरनाक पहलू यह है कि वह खुद को एक सफलता के रूप में प्रस्तुत करता है। एक ख़राब मॉडल स्पष्ट रूप से ख़राब परिणाम देगा और उस पर ध्यान दिया जाएगा; एक लीक हुआ मॉडल बढ़िया काम करता है, हर किसी को खुश करता है, और उसे उत्पादन में डाल दिया जाता है - यहीं से पतन शुरू होता है। इसीलिए एक "बहुत अच्छा" परिणाम चिंता का कारण है, जश्न का नहीं।
प्रतिलिपि प्रस्तुत करने योग्यता: एक ही परिणाम दो बार प्राप्त करना
जब आप किसी अन्य समय, किसी अन्य मशीन पर दोबारा विश्लेषण चलाते हैं तो पुनरुत्पादन वही परिणाम प्राप्त करने की क्षमता है। इसके बिना आपका विश्लेषण आकस्मिक है, वैज्ञानिक नहीं। मुख्य कारण और समाधान जो प्रतिलिपि प्रस्तुत करने योग्यता को ख़राब करते हैं:
मैन्युअल चरण: एक्सेल में सेल को मैन्युअल रूप से बदलना, चार्ट को मैन्युअल रूप से संपादित करना। समाधान: प्रत्येक चरण को कोड में रखें।
अनिर्धारित यादृच्छिकता: मॉडल प्रशिक्षण, नमूनाकरण, विभाजन में यादृच्छिकता शामिल है। समाधान: यादृच्छिक बीज (यादृच्छिक जनरेटर का प्रारंभिक मान) (random_state=42) को ठीक करें।
संस्करण परिवर्तन: लाइब्रेरी संस्करण बदलने पर परिणाम बदल सकता है। समाधान: निर्भरताएँ ठीक करें (requirements.txt, पर्यावरण फ़ाइल)।
कोई रिकॉर्ड नहीं रखना: यह स्पष्ट नहीं है कि कौन सा डेटा, कौन सा कोड, कौन सा पैरामीटर इस्तेमाल किया गया था। समाधान: संस्करण नियंत्रण (Git - वह सिस्टम जो कोड के सभी संस्करणों को सहेजता है) और डेटा वर्जनिंग।
"यह केवल मेरी मशीन पर काम करता है": समाधान: पर्यावरण का दस्तावेजीकरण करें, यदि संभव हो तो कंटेनर (डॉकर) का उपयोग करें।
तीन मिनी मामले
केस 1 - लक्ष्य रिसाव। एक स्वास्थ्य विश्लेषण में "डिस्चार्ज के बाद दवा" कॉलम में भविष्यवाणी की गई थी कि "क्या मरीज को दोबारा भर्ती किया जाएगा।" यह कॉलम मरीज के डिस्चार्ज होने के बाद ही भरा जाता था। मॉडल ने 96%, उत्पादन में 61% दिया। 8 सप्ताह का प्रोजेक्ट बेकार था। पाठ: प्रत्येक विशेषता से पूछें "क्या यह भविष्यवाणी के समय मौजूद है?"
केस 2 - प्रीप्रोसेसिंग लीक। एक टीम ने सभी डेटा को स्केल किया और फिर उसे विभाजित कर दिया। परीक्षण डेटा का माध्य स्केलिंग में शामिल था। सीवी स्कोर 89%, वास्तविक उत्पादन 76%। नकली सफलता तब गायब हो गई जब मैं पाइपलाइन में चला गया और केवल प्रशिक्षण से परिवर्तनों के बारे में सीखा। सबक: पहले बांटो, बाद में बदलो।
केस 3 - पुनरुत्पादन में विफलता। एक विश्लेषक तीन महीने बाद प्रबंधन को प्रस्तुत किए गए चार्ट को अपडेट करना चाहता था, लेकिन उसे याद नहीं आया कि उसने इसे कैसे तैयार किया; एक्सेल में कई चरण मैन्युअल रूप से किए गए। नतीजा नहीं निकला और भरोसा हिल गया. पाठ: कोई मैन्युअल कदम नहीं, सब कुछ कोड और Git में है।
चार प्रतिलिपि योग्य टेम्पलेट
1) रिसाव निरीक्षण:
आपकी भूमिका: लीक इंस्पेक्टर. लक्ष्य: "मंथन" (0/1), पूर्वानुमान संदर्भ तिथि: रिकॉर्ड_दिनांक। मैं आपको सुविधाओं की यह सूची दूंगा. प्रत्येक सुविधा के लिए: (ए) क्या यह लक्ष्य का परिणाम है, (बी) क्या यह भविष्यवाणी के समय मेरे लिए उपलब्ध है, (सी) क्या समय विंडो में भविष्य शामिल है? इसे "असुरक्षित/संदिग्ध/लीक" के रूप में चिह्नित करें और कारण लिखें। विशेषताएं: [सूची]
2) रिसाव मुक्त पाइपलाइन:
स्केलेरन पाइपलाइन सेट करें: पहले स्प्लिट ट्रेन/टेस्ट (स्तरीकृत, बीज = 42), फिर सभी प्रीप्रोसेसिंग (इंप्यूट, स्केल, एनकोड) को केवल प्रशिक्षण से पाइपलाइन में फिट करें। बताएं कि कोड लीक-मुक्त क्यों है, कौन सा चरण कहां सीखा गया।
3) प्रतिलिपि प्रस्तुत करने योग्यता चेकलिस्ट कोड:
मैं अपने विश्लेषण को पुन: प्रस्तुत करने योग्य बनाना चाहता हूं। कोड/संरचना का सुझाव दें जो जोड़ता है: (1) सभी यादृच्छिकता के लिए हार्ड सीड, (2) उपयोग किए गए प्रिंटिंग लाइब्रेरी संस्करण, (3) डेटा और आउटपुट के लिए दिनांक/संस्करण टैग। यह सुनिश्चित करने के लिए मुझे एक चेकलिस्ट भी दें कि कोई मैन्युअल चरण नहीं हैं।
4) समूहीकृत विभाजन (समान इकाई रिसाव):
डेटा में एक ही customer_id कई पंक्तियों में मौजूद है। एक विभाजन बनाएं (ग्रुपकेफोल्ड या ग्रुपशफलस्प्लिट, ग्रुप = ग्राहक_आईडी) जो एक ही ग्राहक को प्रशिक्षण और परीक्षण दोनों में होने से रोकता है। यह सत्यापित करने के लिए कोड शामिल करें कि विभाजन के बाद दोनों सेटों में कोई ग्राहक नहीं है।
कमजोर संकेत/मजबूत संकेत
कमजोर संकेत:
मेरे मॉडल ने 98% सटीकता लौटाई, क्या यह बढ़िया नहीं है? कोड को अनुकूलित करें.
98% जश्न मनाने से लीक छिप जाता है। अनुकूलन से पहले यह प्रश्न किया जाना चाहिए कि यह स्कोर वास्तविक है या नहीं।
शक्तिशाली संकेत:
आपकी भूमिका: लीक इंस्पेक्टर. मेरा मॉडल परीक्षण सेट पर 98% सटीकता देता है, जो मुझे "बहुत अच्छा" लगता है। जांचें: (1) क्या कोई विशेषताएं लक्ष्य का परिणाम हैं, (2) क्या विभाजन से पहले किए गए रूपांतरण हैं, (3) क्या दो सेटों में एक ही इकाई है, (4) क्या कोई समय लीक है। किसी भी संदिग्ध बिंदु की सूची बनाएं; लीक ढूंढने पर ध्यान दें, स्कोर ठीक करने पर नहीं।
यहां, उच्च अंक को सवाल उठाए जाने के संकेत के रूप में माना जाता है, जश्न मनाने के लिए नहीं।
सामान्य गलतियाँ
- "बहुत अच्छे" परिणाम का जश्न मना रहा हूँ। बहुत अच्छा-से-वास्तविक स्कोर एक लीक अलर्ट है, कोई उपलब्धि नहीं।
- विभाजन से पहले सभी डेटा से परिवर्तन सीखना। सबसे आम रिसाव; पहले पाइपलाइन से विभाजित करें।
- समय श्रृंखला को बेतरतीब ढंग से विभाजित करना। मॉडल भविष्य देखता है; कालानुक्रमिक विभाजन आवश्यक है।
- एक ही इकाई को दो सेटों में छोड़ना। मॉडल व्यक्ति को याद रखता है; समूह द्वारा विभाजित करें.
- मैन्युअल रूप से आगे बढ़ना और कोड लिखना नहीं। विश्लेषण अप्राप्य हो जाता है; सब कुछ कोड और Git में होना चाहिए।
युक्ति: अपने प्रोजेक्ट की शुरुआत में दो-वाक्य "सम्मान की प्रतिज्ञा" लिखें: "उत्पादन में देखने से पहले मैंने परीक्षण सेट को किसी भी तरह से नहीं छुआ है। प्रत्येक चरण कोड में है और बीज तय है।" यदि आप इन दो वाक्यों पर ईमानदारी से हस्ताक्षर नहीं कर सकते, तो आपका परिणाम अभी विश्वसनीय नहीं है।
संक्षेप में
डेटा लीक और गैर-पुनरुत्पादकता डेटा विज्ञान में दो सबसे महंगी मूक त्रुटियां हैं। रिसाव मॉडल का भविष्य का दृष्टिकोण है और खुद को झूठी सफलता के रूप में प्रस्तुत करता है; समाधान यह है कि परीक्षण सेट को जल्दी विभाजित किया जाए, केवल प्रशिक्षण (पाइपलाइन) से परिवर्तनों को सीखा जाए, प्रत्येक सुविधा से प्रश्न पूछा जाए "क्या भविष्यवाणी के समय मेरे पास यह था" और सही विभाजन (कालानुक्रमिक/समूहीकृत) करें। पुनरुत्पादन का तात्पर्य एक ही परिणाम को दो बार प्राप्त करने में सक्षम होना है; उसका समाधान चरणों को मैन्युअल रूप से हटाना, बीज को पिन करना, संस्करणों को फ़्रीज़ करना और सब कुछ Git में रखना है। एआई इन जोखिमों को या तो बढ़ा सकता है या कम कर सकता है; यह आपका अनुशासन है जो निर्धारित करता है।
आवेदन कार्य
आपके द्वारा बनाए गए मॉडल (या एक काल्पनिक) की फीचर सूची लें और प्रत्येक फीचर से प्रश्न पूछें "क्या भविष्यवाणी के समय मेरे पास यह जानकारी थी?" लेखन में; कम से कम एक लीक उम्मीदवार खोजें। फिर अपने विश्लेषण को प्रतिलिपि प्रस्तुत करने योग्य बनाने के लिए एक चेकलिस्ट भरें: क्या बीज तय है, क्या मैन्युअल चरण हैं, क्या संस्करण पंजीकृत हैं, क्या वे Git में हैं। कमियों को सुधारें.
चेकलिस्ट
- [ ] क्या मैंने लीक अलर्ट के रूप में "सच्चा होने के लिए बहुत अच्छा" स्कोर पर सवाल उठाया था?
- [ ] क्या मैंने विभाजन के बाद के सभी बदलाव सिर्फ प्रशिक्षण से सीखे?
- [ ] क्या मैंने समय/समूह संरचना (कालानुक्रमिक/ग्रुपकेफ़ोल्ड) के अनुसार विभाजित किया है?
- [ ] क्या मैंने सभी यादृच्छिकता को निश्चित बीज के साथ दोहराने योग्य बना दिया है?
- [ ] क्या मैंने मैन्युअल चरणों को हटा दिया और सब कुछ कोड और संस्करण नियंत्रण में रख दिया?