পরিচিতি
মেশিন লার্নিং প্রজেক্টে ডেটা ক্লিনিংয়ের পরের ধাপ হলো ফিচার ইঞ্জিনিয়ারিং (Feature Engineering)। এর মাধ্যমে আমরা আমাদের হাতে থাকা ডেটাকে আরও কার্যকর করে তুলি যাতে মেশিন লার্নিং মডেল ভালো ফলাফল দিতে পারে। এই ভিডিওতে আমরা রিয়েল এস্টেট বা আবাসন খাতের ডেটা নিয়ে কাজ করেছি, যেখানে নতুন ফিচার তৈরি করা এবং অপ্রয়োজনীয় ডেটার সংখ্যা কমানোর (Dimensionality Reduction) কৌশল দেখানো হয়েছে।
১. নতুন ফিচার তৈরি: প্রাইস পার স্কয়ার ফিট (Price per Square Feet)
ভিডিও রেফারেন্স: [00:00] থেকে [01:44]
রিয়েল এস্টেট মার্কেটে একটি বাড়ির দাম বোঝার জন্য 'প্রতি স্কয়ার ফিট দাম' খুবই গুরুত্বপূর্ণ। আমরা এখানে Price এবং Total Square Feet কলাম দুটি ব্যবহার করে একটি নতুন কলাম তৈরি করেছি।
কোড স্নিপেট:
Python
df5['price_per_sqft'] = df5['price'] * 100000 / df5['total_sqft']
- ব্যাখ্যা: এখানে আমরা দামকে (লাখ রুপিতে থাকা) ১ লাখ দিয়ে গুণ করে টাকায় রূপান্তর করেছি এবং তাকে মোট এরিয়া (স্কয়ার ফিট) দিয়ে ভাগ করেছি। এর ফলে আমরা প্রতি স্কয়ার ফিটের দাম পেয়েছি।
সহজ ভাষায়: ধরুন, একটি বাড়ির দাম ৫০ লাখ টাকা এবং এরিয়া ১০০০ স্কয়ার ফিট। তাহলে প্রতি স্কয়ার ফিটের দাম ৫০,০০০ টাকা। এটি মেশিনকে বুঝতে সাহায্য করবে যে, বাড়িটির সাইজ অনুযায়ী দাম ঠিক আছে কি না।
২. ডাইমেনশনালিটি রিডাকশন ও লোকেশন হ্যান্ডলিং
ভিডিও রেফারেন্স: [01:52] থেকে [08:20]
আমাদের ডেটাতে ১৩০০টিরও বেশি লোকেশন আছে। যদি আমরা এই প্রতিটি লোকেশনকে আলাদা কলাম হিসেবে যোগ করি (যাকে বলা হয় One Hot Encoding), তবে আমাদের ডেটাফ্রেমে ১৩০০টি কলাম তৈরি হয়ে যাবে। একে বলা হয় 'ডাইমেনশনালিটি কার্স' (Curse of Dimensionality)—অর্থাৎ কলামের সংখ্যা এত বেশি বেড়ে যাওয়া যে মডেলের কাজ করা কঠিন হয়ে পড়ে।
সহজ ভাষায়: ধরুন, আপনার কাছে ১০০০টি ভিন্ন রঙের বক্স আছে, আপনি যদি প্রতিটি বক্সকে আলাদাভাবে গুনতে যান, তবে হিসাব করতে অনেক সময় লাগবে। এর চেয়ে যদি কম ব্যবহার হওয়া বক্সগুলোকে একটি 'অন্যান্য' বা 'Others' গ্রুপে ফেলে দেন, তবে হিসাব সহজ হবে।
কিভাবে সমাধান করা হয়েছে: ১. আমরা প্রথমে প্রতিটি লোকেশনে কতগুলো ডেটা পয়েন্ট আছে তা চেক করেছি। ২. যে লোকেশনগুলোতে ১০টির কম ডেটা পয়েন্ট আছে, সেগুলোকে আমরা একটি নতুন ক্যাটাগরি 'Other'-এর মধ্যে ঢুকিয়ে দিয়েছি।
কোড স্নিপেট:
Python
location_stats = df5.groupby('location')['location'].agg('count')
df5.location = df5.location.apply(lambda x: 'other' if x in location_stats[location_stats < 10] else x)
- ব্যাখ্যা: এখানে
groupbyদিয়ে প্রতিটি লোকেশন কয়বার এসেছে তার সংখ্যা বের করা হয়েছে। এরপরapplyওlambdaফাংশন ব্যবহার করে ১০টির কম ডেটা থাকা লোকেশনগুলোকে 'other' নামে পরিবর্তন করা হয়েছে। এর ফলে কলাম সংখ্যা ১৩০০ থেকে কমে ২৪২-এ নেমে এসেছে।
বিশ্লেষণ ও পরামর্শ
ক্রিয়েটরের লক্ষ্য: কন্টেন্ট ক্রিয়েটর এখানে মূলত দেখিয়েছেন কিভাবে ডেটা সেটকে ছোট এবং সহজ করে তোলা যায়। বেশি কলাম থাকলে মডেল স্লো হয়ে যায় এবং অনেক ক্ষেত্রে ভুল ফলাফল দিতে পারে। এই টেকনিকগুলো বড় প্রজেক্টে ডেটা প্রসেসিং দ্রুত করতে দারুণ কার্যকর।
বাস্তবতা ও পরামর্শ:
-
অ্যাপ্রোচ: ১০টির কম ডেটা পয়েন্ট থাকলে 'Other' করা একটি ভালো নিয়ম, তবে এটি প্রজেক্টের ওপর নির্ভর করে। অনেক সময় গুরুত্বপূর্ণ লোকেশন থাকলেও ডেটা কম থাকতে পারে, সেক্ষেত্রে সেগুলোকে ফিল্টার করার সময় সতর্ক থাকা উচিত।
-
বিকল্প: আপনি যদি আরও উন্নত কিছু করতে চান, তবে লোকেশনের সাথে বাড়ির দামের সম্পর্ক খুঁজতে 'Mean Encoding' বা 'Target Encoding' পদ্ধতিগুলোও দেখতে পারেন।
-
পরবর্তী ধাপ: ডেটা ক্লিনিং এবং ফিচার ইঞ্জিনিয়ারিংয়ের পর আসল কাজ হলো আউটলায়ার (অস্বাভাবিক ডেটা) খুঁজে বের করে তা মুছে ফেলা, যা পরবর্তী ভিডিওতে আলোচনা করা হবে।
এটি একটি চমৎকার প্র্যাকটিক্যাল উদাহরণ যা একজন বিগিনারকে ডেটা সায়েন্সের প্রসেস বুঝতে সাহায্য করবে।
[
Machine Learning & Data Science Project - 3 : Feature Engineering (Real Estate Price Prediction)
codebasics · 206K views
](http://www.youtube.com/watch?v=gMoJIH0prL4)

মন্তব্যসমূহ
একটি মন্তব্য পোস্ট করুন
আপনার সমস্যাটি কমেন্ট করে আমাদের জানান :-d