ট্রেইন-টেস্ট স্প্লিট (Train-Test Split)
ধরা যাক, একজন শিক্ষক হিসেবে আপনি ফাইনাল পরীক্ষার প্রশ্ন বানাচ্ছেন। পুরো সেমিস্টার ধরে আপনি আপনার শিক্ষার্থীদের ১০০টি প্র্যাকটিস প্রবলেম বা সমস্যা সমাধান করতে দিয়েছেন। এখন পরীক্ষার দিন চলে এসেছে।
আপনি কি পরীক্ষায় সেই একই রেগুলার ১০০টি প্রশ্ন দেবেন? অবশ্যই না! কারণ সেগুলোর উত্তর যে কেউ না বুঝেই কেবল মুখস্থ করে ফেলতে পারে এবং পরীক্ষায় ভালো গ্রেড পেতে পারে। এর মাধ্যমে আপনার শিক্ষার্থীদের আসল জ্ঞান বা লার্নিং কোনোভাবেই পরীক্ষা করা হবে না।
এর বদলে, আপনি নিশ্চয়ই সম্পূর্ণ নতুন কিছু প্রশ্ন বানাবেন, যেগুলো মূলত ওই একই বিষয়ের ওপর ভিত্তি করে তৈরি হবে, কিন্তু আগের হোমওয়ার্কের মতো হুবহু এক হবে না। এতে করে যদি কোনো শিক্ষার্থী সত্যিই বিষয়টি মাথায় গেঁথে নিতে পারে (কেবল উত্তর মুখস্থ করা নয়), তবে সে নতুন প্রশ্নেও ঠিকই ভালো করতে পারবে।
আর ঠিক এ কারণেই আমরা মেশিন লার্নিংয়ে ডেটাকে ভাগ করে নিই বা স্প্লিট (split) করি। এখানকার ট্রেইনিং সেট (training set) হলো সেই হোমওয়ার্কের বা প্র্যাকটিসের মতো — মডেল যার মাধ্যমে প্র্যাকটিস করে নিজে থেকে শেখে। আর টেস্ট সেট (test set) হলো সেই ফাইনাল পরীক্ষার মতো — যার মাধ্যমে মডেল আগে কখনো দেখেনি এমন নতুন কোনো ডেটায় কতটা ভালো করতে পারে তার পরীক্ষা নেওয়া হয়।
মডেল কেন সবগুলো ডেটার ওপরে একসাথে ট্রেইন করতে পারে না?
আপনি যদি ট্রেইনিংয়ের সময় মডেলটিকে সবগুলো ডেটা দেখতে দেন, তবে মডেলটি কি সত্যিই এর ভেতরের আসল প্যাটার্নগুলো শিখছে নাকি কেবল উত্তরগুলো মুখস্থ করে নিচ্ছে, তা জানার কোনো উপায় আপনার কাছে থাকবে না। এমন ক্ষেত্রে, এটি ট্রেইনিং ডেটায় ৯৯% স্কোর করতে পারে, কিন্তু বাস্তব জীবনের নতুন কোনো ডেটায় এটি একেবারেই চরমভাবে ফেল করবে।
তাই ডেটার একটি নির্দিষ্ট পরিমাণ অংশ (টেস্ট সেট) আলাদা করে রাখার মাধ্যমে, আপনি এর ওপর মডেলটির একটি সঠিক গ্রেড বা মূল্যায়ন করতে পারেন। যেহেতু মডেলটি এই সমস্ত নতুন উদাহরণগুলো এর আগে কখনো দেখেনি, তাই এই টেস্ট সেটে সে কতটা ভালো বা খারাপ করছে, তা দেখলেই আপনি বুঝতে পারবেন যে বাস্তব জীবনে সে কেমন ফলাফল দেবে।
সাধারণ স্প্লিট বা বিভাজন (The typical split)
এটিতে মূলত সবচেয়ে বেশি ৮০/২০ স্প্লিট (80/20 split)-এর নিয়ম ব্যবহার করা হয়:
- এর ৮০% ডেটা → ট্রেইনিং সেটের (training set) জন্য রাখা হয় (অর্থাৎ হোমওয়ার্কের জন্য)
- বাকি ২০% ডেটা → টেস্ট সেটের (test set) জন্য রাখা হয় (অর্থাৎ পরীক্ষার জন্য)
অনেকেই আবার ৭০/৩০ বা ৯০/১০ স্প্লিটও ব্যবহার করে থাকেন — আসলে এর কোনো নির্দিষ্ট বা ম্যাজিক নম্বর নেই। তবে এদের সবার মূল উদ্দেশ্য বা আইডিয়া একটাই: আপনি আপনার বেশিরভাগ ডেটার ওপর মডেলকে ট্রেইন করাবেন এবং ডেটার বাকি একটি ছোট অংশ আলাদা করে রেখে তার ওপর এটিকে টেস্ট করাবেন বা পরীক্ষা করবেন।
সবচেয়ে জরুরি নিয়ম বা রুল: মডেলটিকে ট্রেইনিং করার সময় যেকোনো মূল্যে টেস্ট সেট থেকে দূরে রাখতে হবে। সে যেন কোনোভাবেই টেস্ট সেটের একটু অংশও না দেখতে পায়। যদি সে এটি দেখে ফেলে, তবে আপনার এই পুরো ট্রেইনিং বা মূল্যায়ন একেবারে জলে যাবে বা কোনো কাজেই আসবে না।
Sklearn (এসকেলার্ন) ব্যবহার করে ডেটা স্প্লিট করা (Splitting Data with sklearn)
ডেটাগুলোকে শাফল (shuffle) বা ওলটপালট করতে ভুলবেন না!
যেকোনো ডেটা স্প্লিট করার বা ভাগ করার আগে, সেগুলোকে সবসময় রেন্ডমলি (randomly) শাফল (shuffle) করে বা ওলটপালট করে নেওয়া ভালো। কিন্তু কেন? ধরা যাক, আপনার ডেটাসেটটি আগে থেকেই একটি নির্দিষ্ট নিয়মে সাজানো আছে — যার প্রথম দিকের সবগুলো ডেটা হলো "পাস (pass)" এবং শেষের দিকের সবগুলো হলো "ফেল (fail)"। এখন আপনি যদি এর প্রথম ৮০% ডেটা ট্রেইনিংয়ের জন্য এবং শেষের ২০% ডেটা টেস্টিংয়ের জন্য নেন, তবে আপনার ট্রেইনিং সেটে কেবল পাস করা ডেটাগুলোই থাকবে এবং টেস্ট সেটে কেবল ফেল করা ডেটাগুলো থাকবে। এতে করে মডেলটি পুরোটাই ভুল কিছু শিখবে।
তাই ডেটাগুলোকে শাফল করে নিলে, আপনি নিশ্চিত হতে পারবেন যে আপনার ট্রেইনিং এবং টেস্ট সেটের দুটি অংশেই আপনার পুরো ডেটাসেটেরই একটি সমান এবং সঠিক প্রতিচ্ছবি (representative) রয়েছে।
ভ্যালিডেশন সেট: এর তৃতীয় অংশ (The validation set: a third piece)
বাস্তব জীবনে কাজ করার সময়, অনেকেই ডেটাকে মূলত তিনটি (three) ভাগে ভাগ করে থাকেন:
- ট্রেইনিং সেট (Training set) (৬০-৭০%) — এটি ব্যবহার করে মূলত মডেলকে শেখানো হয় বা ট্রেইন করা হয়
- ভ্যালিডেশন সেট (Validation set) (১৫-২০%) — এটি ব্যবহার করে মডেলটির বিভিন্ন সেটিংস ঠিক করা হয় এবং অন্য মডেলের সাথে এর তুলনা করা হয়
- টেস্ট সেট (Test set) (১৫-২০%) — একে একেবারে সবার শেষের ফাইনাল পরীক্ষার জন্য ধরা ছোঁয়ার বাইরে রাখা হয়
আপনি ভ্যালিডেশনকে প্র্যাকটিস এক্সাম (practice exams) হিসেবে মনে করতে পারেন। আপনি এটিকে ব্যবহার করে আপনার নিজের পড়ার রুটিন বা কৌশল বদলাতে পারেন, কিন্তু এর আসল পরীক্ষাটি (টেস্ট সেট) সবসময়ই আপনাকে অবাক করে দেয়। এটি মূলত আপনাকে দুর্ঘটনাবশত টেস্ট সেটের ওপর মডেলটিকে ওভারফিট (overfit) করা থেকে রক্ষা করে এবং নিশ্চিত করে যে মডেলটি কেবল টেস্ট সেটে ভালো করার জন্যই বারবার পরিবর্তন করা হচ্ছে না।
সঠিক নিয়ম: আগে স্প্লিট করুন, এরপর প্রসেস করুন (The Right Way: Split THEN Preprocess)
ছোট কুইজ
পড়া চালিয়ে যান