লাভ:
- ডেটা ফাঁসের ধরন (লক্ষ্য, সময়, প্রিপ্রসেসিং, গোষ্ঠীবদ্ধ সারি) সনাক্ত করার ক্ষমতা এবং একটি অ্যালার্ম হিসাবে 'সত্য হতে খুব ভাল' স্কোর জিজ্ঞাসা করার ক্ষমতা
- পরীক্ষার সেট, পাইপলাইন এবং সঠিক বিভাজন (কালানুক্রমিক/গ্রুপযুক্ত) প্রাথমিকভাবে আলাদা করার সাথে ফুটো প্রতিরোধ করার ক্ষমতা
- স্থির বীজ, সংস্করণ নিয়ন্ত্রণ এবং ম্যানুয়াল পদক্ষেপগুলি অপসারণের সাথে বিশ্লেষণকে পুনরুত্পাদনযোগ্য করার ক্ষমতা
দুটি ভুল আছে যা ডেটা সায়েন্সে সবচেয়ে বেশি প্রচেষ্টা নষ্ট করে, এবং সেগুলি উভয়ই প্রতারক কারণ তারা যখন "সবকিছু ঠিক আছে বলে মনে হয়" তখনই তারা বিপর্যয়ের দিকে নিয়ে যায়। প্রথমটি হ'ল ডেটা ফাঁস: মডেলটি পরীক্ষা সেটে দুর্দান্ত কাজ করে তবে উত্পাদনে ক্র্যাশ হয়৷ দ্বিতীয়টি হল অপরিবর্তনীয়তা: আপনি ছয় মাস পরে একটি বিশ্লেষণ চালান এবং সম্পূর্ণ ভিন্ন ফলাফল পান। এই ইউনিটটি গভীরভাবে এই দুটি সমস্যাকে জানা এবং এড়ানোর জন্য নিবেদিত। AI উভয় ঝুঁকিই বাড়াতে পারে (দ্রুত তৈরি করে, লুকানো লিকের পরামর্শ দেয়, আপনার জন্য ম্যানুয়াল পদক্ষেপ নেওয়া সহজ করে) কিন্তু সঠিকভাবে ব্যবহার করা হলে সেগুলিও কমাতে পারে। পার্থক্য হল শৃঙ্খলার মধ্যে।
তথ্য ফাঁস: clairvoyant মডেল
ডেটা ফাঁস হল যখন মডেল প্রশিক্ষণের সময় এমন তথ্য দেখে যা প্রকৃত ভবিষ্যদ্বাণী করার সময় এটি থাকবে না। মডেলটি এই তথ্যের সাথে "প্রতারণা করে", পরীক্ষা সেটে দুর্দান্ত দেখাচ্ছে, কিন্তু সেই তথ্য ছাড়াই উৎপাদনে বিপর্যস্ত। একটি ফুটো লক্ষণ প্রায় সবসময় একই: সত্য হতে খুব ভাল. আপনি যখন 99% নির্ভুলতা দেখেন তখন আনন্দ করার আগে, আপনার ফাঁসের সন্ধান করা উচিত।
ফুটো প্রধান ধরনের হয়:
1. লক্ষ্য ফাঁস: একটি বৈশিষ্ট্য হল লক্ষ্যের ফলাফল। "বাতিল করা হয়েছে" পূর্বাভাসে, "বাতিল তারিখ" বা "রিফান্ডের পরিমাণ" কলামগুলি লক্ষ্যের ফলাফল; ফলাফল পরিষ্কার হলেই সেগুলো পূরণ করা হবে।
2. সময় ফাঁস: অতীতের ভবিষ্যতের তথ্য নিয়ে আসা। "শেষ 30 দিনের গড়" গণনা করার সময়, পূর্বাভাসের দিনের পরের দিনগুলি অন্তর্ভুক্ত করুন, বা সময় ক্রমগুলিকে এলোমেলোভাবে ভাগ করুন৷
3. প্রি-প্রসেসিং লিকেজ: প্রশিক্ষণ/পরীক্ষা পার্টিশনের আগে সমস্ত ডেটা থেকে স্কেলিং, ফিলিং, কোডিং-এর মতো শেখার রূপান্তর। পরীক্ষার ডেটার গড় প্রশিক্ষণে হস্তক্ষেপ করে।
4. ডুপ্লিকেট/গ্রুপড সারি লিক: একই ব্যক্তির সারিগুলি প্রশিক্ষণ এবং পরীক্ষা উভয় ক্ষেত্রেই উপস্থিত থাকে (বিভিন্ন সেটে একই রোগীর দুটি দর্শন)। মডেল ব্যক্তি মুখস্থ.
লিক টাইপ
কিভাবে জন্ম হয়
কিভাবে প্রতিরোধ করা যায়
লক্ষ্য ফাঁস
কলাম যে লক্ষ্যের ফলাফল
"আমি কি ভবিষ্যদ্বাণী করার সময় এটা আছে" পরীক্ষা
সময় লিক
ভবিষ্যৎকে অতীতে নিয়ে আসা
কালানুক্রমিক বিভাগ, উইন্ডো নিয়ন্ত্রণ
প্রিপ্রসেসিং লিক
প্রাক-বিভক্ত রূপান্তর
পাইপলাইন, শুধু প্রশিক্ষণ থেকে ফিট
দলবদ্ধ সারি লিক
দুই সেটে একই ইউনিট
গ্রুপ দ্বারা বিভক্ত (GroupKFold)
ফুটো প্রতিরোধের একমাত্র শৃঙ্খলা
সব ধরনের ফাঁসের সাধারণ সমাধান একটি বাক্যে ফুটে ওঠে: প্রকৃত ভবিষ্যৎ অনুকরণ করতে যত তাড়াতাড়ি সম্ভব পরীক্ষার সেটটিকে আলাদা করুন এবং এটিকে কিছু "শিক্ষা" দেবেন না। অনুশীলনে, এর অর্থ হল: প্রথমে ভাগ করুন, তারপরে শুধুমাত্র প্রশিক্ষণ থেকে সমস্ত রূপান্তর শিখুন এবং সেগুলিকে একটি পাইপলাইনে প্রয়োগ করুন (একটি কাঠামো যা একটি একক চেইনে সমস্ত পদক্ষেপ সংগ্রহ করে)। প্রতিটি বৈশিষ্ট্যের জন্য, প্রশ্ন জিজ্ঞাসা করুন "আমার কাছে কি ভবিষ্যদ্বাণী করার সময় এই তথ্য আছে?" যদি সময় থাকে, কালানুক্রমিকভাবে ভাগ করুন; যদি একই ইউনিট পুনরাবৃত্তি হয়, গ্রুপ দ্বারা বিভক্ত.
সতর্কতা: একটি ফাঁসের সবচেয়ে বিপজ্জনক দিক হল এটি নিজেকে একটি সাফল্য হিসাবে উপস্থাপন করে। একটি খারাপ মডেল স্পষ্টতই খারাপ ফলাফল দেবে এবং লক্ষ্য করা হবে; একটি ফাঁস হওয়া মডেলটি দুর্দান্ত কাজ করে, সকলকে খুশি করে এবং উৎপাদনে রাখা হয় — সেখান থেকেই পতন শুরু হয়। এই কারণেই একটি "খুব ভাল" ফলাফল উদ্বেগের কারণ নয়, উদযাপনের কারণ।
প্রজননযোগ্যতা: একই ফলাফল দুবার পাওয়া
প্রজননযোগ্যতা হল একই ফলাফল পাওয়ার ক্ষমতা যখন আপনি আবার অন্য সময়ে, অন্য মেশিনে বিশ্লেষণ চালান। এটি ছাড়া, আপনার বিশ্লেষণ প্রাসঙ্গিক, বৈজ্ঞানিক নয়। প্রধান কারণ এবং সমাধান যা প্রজননযোগ্যতাকে ক্ষতিগ্রস্ত করে:
ম্যানুয়াল পদক্ষেপ: এক্সেলের একটি সেল ম্যানুয়ালি পরিবর্তন করা, ম্যানুয়ালি একটি চার্ট সম্পাদনা করা। সমাধান: কোডের প্রতিটি ধাপ আছে।
আনফিক্সড এলোমেলোতা: মডেল প্রশিক্ষণ, নমুনা, বিভাজন এলোমেলোতা জড়িত। সমাধান: এলোমেলো বীজ ঠিক করুন (এলোমেলো জেনারেটরের প্রাথমিক মান) (random_state=42)।
সংস্করণ পরিবর্তন: লাইব্রেরি সংস্করণ পরিবর্তন হলে ফলাফল পরিবর্তন হতে পারে। সমাধান: নির্ভরতা ঠিক করুন (requirements.txt, পরিবেশ ফাইল)।
কোন রেকর্ড রাখা নেই: কোন ডেটা, কোন কোড, কোন প্যারামিটার ব্যবহার করা হয়েছে তা পরিষ্কার নয়। সমাধান: সংস্করণ নিয়ন্ত্রণ (Git — সিস্টেম যা কোডের সমস্ত সংস্করণ সংরক্ষণ করে) এবং ডেটা সংস্করণ।
"এটি শুধুমাত্র আমার মেশিনে কাজ করে": সমাধান: পরিবেশ নথিভুক্ত করুন, সম্ভব হলে পাত্রে (ডকার) ব্যবহার করুন।
তিনটি মিনি কেস
কেস 1 — টার্গেট লিক। একটি স্বাস্থ্য বিশ্লেষণে "রোগীকে পুনরায় ভর্তি করা হবে কিনা।" রোগীকে ছাড়ার পরেই এই কলামটি পূরণ করা হয়েছিল। মডেলটি দিয়েছে 96%, উৎপাদনে 61%। 8 সপ্তাহের প্রকল্পটি আবর্জনা ছিল। পাঠ: প্রতিটি বৈশিষ্ট্যকে জিজ্ঞাসা করুন "এটি কি ভবিষ্যদ্বাণী করার সময় উপস্থিত আছে?"
কেস 2 — প্রিপ্রসেসিং লিক। একটি দল সমস্ত ডেটা স্কেল করেছে এবং তারপরে এটি বিভক্ত করেছে। পরীক্ষার ডেটার গড় স্কেলিংয়ের সাথে জড়িত ছিল। সিভি স্কোর 89%, প্রকৃত উত্পাদন 76%। আমি যখন পাইপলাইনে চলে যাই এবং শুধুমাত্র প্রশিক্ষণ থেকে রূপান্তর সম্পর্কে শিখেছিলাম তখন নকল সাফল্য অদৃশ্য হয়ে যায়। পাঠ: প্রথমে ভাগ করুন, পরে রূপান্তর করুন।
কেস 3 - পুনরুত্পাদন করতে ব্যর্থতা। একজন বিশ্লেষক তিন মাস পরে ম্যানেজমেন্টের কাছে যে চার্টটি উপস্থাপন করেছিলেন তা আপডেট করতে চেয়েছিলেন কিন্তু তিনি কীভাবে এটি তৈরি করেছিলেন তা মনে করতে পারেননি; এক্সেলে অনেকগুলো ধাপ ম্যানুয়ালি করা হয়েছে। ফলাফল কাজ করেনি এবং বিশ্বাস নড়ে গেছে। পাঠ: কোনও ম্যানুয়াল পদক্ষেপ নেই, সবকিছু কোড এবং গিটে রয়েছে।
চারটি অনুলিপিযোগ্য টেমপ্লেট
1) লিক পরিদর্শন:
আপনার ভূমিকা: ফাঁস পরিদর্শক. লক্ষ্য: "মন্থন" (0/1), পূর্বাভাসের রেফারেন্স তারিখ: রেকর্ড_তারিখ। আমি আপনাকে বৈশিষ্ট্য এই তালিকা দিতে হবে. প্রতিটি বৈশিষ্ট্যের জন্য: (ক) এটি কি লক্ষ্যের পরিণতি, (খ) এটি কি ভবিষ্যদ্বাণী করার সময় আমার কাছে উপলব্ধ, (গ) সময় উইন্ডোটি কি ভবিষ্যতে অন্তর্ভুক্ত করে? এটিকে "অনিরাপদ/সন্দেহজনক/লিক" হিসাবে চিহ্নিত করুন এবং একটি কারণ লিখুন। বৈশিষ্ট্য: [তালিকা]
2) ফুটো মুক্ত পাইপলাইন:
sklearn পাইপলাইন সেট আপ করুন: প্রথম বিভক্ত ট্রেন/পরীক্ষা (স্তরিত, বীজ=42), তারপর শুধুমাত্র প্রশিক্ষণ থেকে পাইপলাইনে সমস্ত প্রিপ্রসেসিং (অভিযোগ, স্কেল, এনকোড) ফিট করুন। কোডটি কেন ফাঁসমুক্ত তা ব্যাখ্যা করুন, কোন ধাপ কোথায় শিখেছি।
3) প্রজননযোগ্যতা চেকলিস্ট কোড:
আমি আমার বিশ্লেষণ পুনরুত্পাদনযোগ্য করতে চান. কোড/কাঠামো যোগ করার পরামর্শ দিন: (1) সমস্ত এলোমেলোতার জন্য শক্ত বীজ, (2) মুদ্রণ লাইব্রেরি সংস্করণ ব্যবহৃত, (3) ডেটা এবং আউটপুটের জন্য তারিখ/সংস্করণ ট্যাগ৷ কোন ম্যানুয়াল পদক্ষেপ আছে তা নিশ্চিত করতে আমাকে একটি চেকলিস্ট দিন।
4) দলবদ্ধ বিভাজন (একই ইউনিট লিক):
ডেটাতে একই customer_id একাধিক সারিতে বিদ্যমান। একটি বিভক্ত করুন (GroupKFold orGroupShuffleSplit, group = customer_id) যা একই গ্রাহককে প্রশিক্ষণ এবং পরীক্ষা উভয় ক্ষেত্রেই থাকতে বাধা দেয়। বিভক্ত হওয়ার পর উভয় সেটে কোনো গ্রাহক নেই তা যাচাই করতে কোড অন্তর্ভুক্ত করুন।
দুর্বল প্রম্পট / শক্তিশালী প্রম্পট
দুর্বল প্রম্পট:
আমার মডেল 98% নির্ভুলতা ফিরিয়ে দিয়েছে, এটা কি দুর্দান্ত নয়? কোডটি অপ্টিমাইজ করুন।
98% উদযাপন ফাঁস আড়াল. অপ্টিমাইজ করার আগে, এই স্কোরটি আসল কিনা তা নিয়ে প্রশ্ন করা উচিত।
শক্তিশালী প্রম্পট:
আপনার ভূমিকা: ফাঁস পরিদর্শক. আমার মডেল পরীক্ষার সেটে 98% নির্ভুলতা প্রদান করে, যা আমার কাছে "সত্য হওয়া খুব ভাল" বলে মনে হচ্ছে। চেক করুন: (1) লক্ষ্যের ফলাফল কোন বৈশিষ্ট্য, (2) বিভক্ত করার আগে করা রূপান্তরগুলি, (3) দুটি সেটে একই ইউনিট, (4) কোন সময় ফাঁস আছে কিনা৷ কোন সন্দেহজনক পয়েন্ট তালিকা; স্কোর ফিক্সিং নয়, লিক খোঁজার দিকে মনোযোগ দিন।
এখানে, একটি উচ্চ স্কোরকে প্রশ্ন করার একটি চিহ্ন হিসাবে বিবেচনা করা হয়, উদযাপনের জন্য নয়।
সাধারণ ভুল
- "খুব ভাল" ফলাফল উদযাপন। একটি খুব ভালো-থেকে-সত্য স্কোর একটি ফাঁস সতর্কতা, একটি অর্জন নয়।
- বিভাজনের আগে সমস্ত ডেটা থেকে রূপান্তর শেখা। সবচেয়ে সাধারণ ফুটো; পাইপলাইন দিয়ে প্রথমে বিভক্ত করুন।
- এলোমেলোভাবে সময় সিরিজ বিভক্ত করা. মডেল ভবিষ্যত দেখে; কালানুক্রমিক বিভাজন আবশ্যক।
- দুই সেটে একই ইউনিট ছেড়ে যাওয়া। মডেল ব্যক্তি মুখস্থ; গ্রুপে ভাগ করুন।
- ম্যানুয়ালি ধাপে ধাপে এবং কোড লিখতে না. বিশ্লেষণ অপূরণীয় হয়ে ওঠে; সবকিছু কোড এবং গিটে থাকা উচিত।
টিপ: আপনার প্রকল্পের শুরুতে একটি দুই-বাক্য "সম্মানের অঙ্গীকার" লিখুন: "আমি এটিকে উৎপাদনে দেখার আগে কোনোভাবেই পরীক্ষা সেটটিকে স্পর্শ করিনি। প্রতিটি পদক্ষেপ কোডে রয়েছে এবং বীজ স্থির করা হয়েছে।" আপনি যদি এই দুটি বাক্যে সততার সাথে স্বাক্ষর করতে না পারেন তবে আপনার ফলাফল এখনও নির্ভরযোগ্য নয়।
সংক্ষেপে
ডেটা ফাঁস এবং নন-প্রজননযোগ্যতা ডেটা বিজ্ঞানের দুটি সবচেয়ে ব্যয়বহুল নীরব ত্রুটি। ফুটো ভবিষ্যতের মডেলের দৃষ্টিভঙ্গি এবং নিজেকে মিথ্যা সাফল্য হিসাবে উপস্থাপন করে; সমাধান হল পরীক্ষার সেটটি তাড়াতাড়ি বিভক্ত করা, শুধুমাত্র প্রশিক্ষণ (পাইপলাইন) থেকে রূপান্তরগুলি শিখুন, প্রতিটি বৈশিষ্ট্যকে প্রশ্ন করুন "পূর্বাভাস দেওয়ার সময় কি এটি আমার কাছে আছে" এবং সঠিক বিভক্ত করা (কালানুক্রমিক/গোষ্ঠীবদ্ধ)। প্রজননযোগ্যতা একই ফলাফল দুইবার পেতে সক্ষম হচ্ছে; তার সমাধান হ'ল ম্যানুয়ালি পদক্ষেপগুলি সরানো, বীজ পিন করা, সংস্করণগুলি হিমায়িত করা এবং সবকিছু গিট-এ রাখা। এআই হয় এই ঝুঁকি বাড়াতে বা কমাতে পারে; এটা আপনার শৃঙ্খলা নির্ধারণ করে।
আবেদন টাস্ক
আপনার তৈরি করা একটি মডেলের বৈশিষ্ট্য তালিকা নিন (বা একটি অনুমানমূলক একটি) এবং প্রতিটি বৈশিষ্ট্যকে প্রশ্ন জিজ্ঞাসা করুন "ভবিষ্যদ্বাণী করার সময় আমার কাছে কি এই তথ্য আছে?" লিখিতভাবে; অন্তত একজন ফাঁস প্রার্থী খুঁজুন. তারপরে আপনার বিশ্লেষণকে পুনরুত্পাদনযোগ্য করার জন্য একটি চেকলিস্ট পূরণ করুন: বীজ কি ঠিক আছে, ম্যানুয়াল পদক্ষেপ আছে কি, সংস্করণগুলি নিবন্ধিত আছে, সেগুলি কি গিটে আছে। ঘাটতিগুলো ঠিক করুন।
চেকলিস্ট
- [ ] আমি কি একটি ফাঁস সতর্কতা হিসাবে "সত্য হতে খুব ভাল" স্কোরটি জিজ্ঞাসা করেছি?
- [ ] আমি কি শুধুমাত্র প্রশিক্ষণ থেকে বিভক্ত হওয়ার পরে সমস্ত রূপান্তর শিখেছি?
- [ ] আমি কি সময়/গ্রুপ কাঠামো (কালানুক্রমিক/গ্রুপ কেফোল্ড) অনুযায়ী ভাগ করেছি?
- [ ] আমি কি স্থির বীজ দিয়ে সমস্ত এলোমেলোতা পুনরাবৃত্তিযোগ্য করে তুলেছি?
- [ ] আমি কি ম্যানুয়াল পদক্ষেপগুলি সরিয়ে দিয়েছি এবং কোড এবং সংস্করণ নিয়ন্ত্রণে সবকিছু রেখেছি?