৭.৩. দ্বিতীয় প্রেডিকশন

দ্বিতীয় প্রেডিকশন

মন ভালো তো আজকে? আমরা শুরুতেই কিছু “আর” এর ট্রেনিং নিলাম, ধারণা করছি সামনে আসবে অল্প অল্প করে। না বুঝলে একটা কড়া ব্রেক দিবেন। পেছনে আসবেন কিছুটা। তারপর আস্তে ধীরে সামনে। ব্যাপারগুলো বেশ সোজা, খালি ভাববেন আমার মতো অলস লোক পারলে আপনিও পারবেন।
প্রথম প্রেডিকশনের পর থেকে আমরা যোগসুত্র খুজবো নতুন ভ্যারিয়েবলগুলোর ভেতরে। একটা একটা করে। এর ফলে আসতে থাকবে আমাদের মডেলের "অ্যাক্যুরেসি"। আস্তে আস্তে। মনে আছে তো গল্পটা? টাইটানিক জাহাজডুবিতে যে ব্যাপারটা সবচেয়ে বেশি মানুষকে ভাবিয়েছে সেটা হচ্ছে তাদের মৃত্যুর আগে ‘ভীতসন্ত্রস্ত’ মানুষ ম্যানেজমেন্টের মন্ত্রটা। মহিলা এবং বাচ্চা আগে, এই মটোটা কাজ করেছে পুরো জাহাজডুবি সময়। চলুন, আমরা শুরু করি ‘সেক্স’ এবং ‘বয়স’ ভ্যারিয়েবলটা নিয়ে। এগুলোর মধ্যে যোগসূত্রটা বের করতে হবে টার্গেট ভ্যারিয়েবলের সাথে। আগের মতো ডাটাগুলোকে লোড করে চলে আসি আমাদের আজকের নতুন কমান্ডে।
>summary (train$Sex)
female male
314 577
কী বোঝা গেল ডাটা থেকে? টাইটানিক জাহাজের বেশিরভাগই যাত্রী ছিল পুরুষ। সেটাই স্বাভাবিক যদি আপনি ধরেন ওই ১৯১২ সালের কথা। যারা আসলে ভাগ্য গড়তে যাচ্ছেন মার্কিন যুক্তরাস্ট্রে। তো - মহিলা যাত্রীদের সংখ্যা পেলেন, তাদের অনুপাত কোথায়? আগের মতো তাদের অনুপাত বের করতে ব্যবহার করছি আগের কমান্ডটাই।
>prop.table (table(train$Sex, train$Survived))
0 1
female 0.09090909 0.26150393
male 0.52525253 0.12233446
"আর" এর মজা এটাই। পুরানো কমান্ডই আসবে ঘুরেফিরে। কমান্ডের আউটপুট দেখে আপনি বললেন - কিছু হলো এটা? আসলেই তাই। আপনি ঠিক বলেছেন। আমরা চাই প্রতিটা সারি ধরে অনুপাত। সারি ধরে অনুপাত মানে প্রতিটা গ্রূপ - পুরুষ এবং মহিলা ধরে আলাদা আলাদা অনুপাত। এছাড়াও এই দুটি অনুপাত এর পাশাপাশি পুরুষ এবং মহিলা - এবং তাদের মধ্যে থেকে কারা কারা বেঁচেছেন অথবা কে কে মারা গেছেন - দরকার সেই সব মিলে অনুপাত, সেটা কি সম্ভব? হ্যাঁ, সেটাও সম্ভব। আপনাকে বলতে হবে আপনি কোন ডাইমেনশনে আপনার আউটপুটটা চান। অনুপাতটা তখন আসবে একেকটা সারি ধরে।
>prop.table (table(train$Sex, train$Survived),1) * 100
0 1
female 0.2579618 0.7420382
male 0.8110919 0.1889081
আমার ধারণা এটা বেশ ভালো একটা আউটপুট নিয়ে এসেছে এখন। আগের মতো এটার সাথে গুন দিয়ে নেই ১০০ দিয়ে। শতকরা হিসেবে। এখন বলুন ব্যাপারটা কিন্তু দিনের আলোর মত পরিষ্কার। ঠিক বলেছেন। মহিলারাই বেঁচেছেন বেশি। মহিলারা কমসংখ্যক থেকেও বেঁচেছেন অনেক অনেক বেশি। তার মানে হচ্ছে জাহাজডুবির সময়ে মহিলা আর বাচ্চাদের নিয়ে যে নিয়মটা তারা ‘ফলো’ করছিল সেটা ঠিকমতো এগিয়েছে। বারপ্লট না দেখলে তো ভাত হজম হবে না আমার। দুটো নেগেটিভ একটা বাক্যে!
>barplot (table(train$Sex), xlab="Passenger", ylab="People", main="Train Data Passenger")
আগের প্রেডিকশনে আপনাদের হাত পাকানোর জন্য আমরা আপডেট করি আগের রুলসেটটার। কি হতে পারে ব্যাপারটা? বলুন আপনি। মনে আছে - আমরা আগের Survived কলামটা পূর্ণ করেছিলাম শূন্য দিয়ে। যারা আগের প্রেডিকশনটা করেননি, তাদের জন্য একটু ডাবল চেক।
ছবি: একটা রুলসেট তৈরি
>test$Survived <- 0
>test$Survived [test$Sex == 'female'] <- 1
“০”কে নতুন করে অ্যাসাইন করি আমাদের Survived কলামে। পরের লাইনে একটা ইকুয়ালিটি অপারেটর দিয়ে সব মহিলাকে “এক” করে দিলাম। মানে - সব মহিলা যে বেঁচে গিয়েছে সেটা দেখানোর চেষ্টা করলাম। যেহেতু বেশিরভাগ মহিলাই বেঁচে গিয়েছেন, সেখানে আমরা প্রোবাবিলিটির হাতটাকে আরো একটু ভালো করলাম। আমাদের এখনকার প্রেডিকশন হচ্ছে সব মহিলারা বেঁচে গিয়েছেন। আমাদের টার্গেট ভ্যারিয়েবল কলামটাতে (Survived) উত্তর ভরা শেষ। মানে এই কলামটা ভর্তি হয়েছে উত্তর দিয়ে। এখন আমাদের উত্তরপত্র বানানোর পালা। আমি ধারণা করছি এখানে থেকে এমনিতেই পারবেন আপনারা। আমার কোন সাহায্যের প্রয়োজন নেই এখানে। আগের কমান্ডটাকে কপি করে নিয়ে এলেন এখানে। এই কমান্ডগুলো নিয়ে বিশদ আলাপ হয়েছে আগে। এখন তো আপনারা বোঝাবেন আমাকে।
ব্যাপারটা না বুঝলে ফিরে যেতে পারেন আমাদের আগের প্রেডিকশনে। মানে প্রথম প্রেডিকশনে।
> 2ndprediction <- data.frame(PassengerId = test$PassengerId, Survived = test$Survived)
> write.csv (2ndprediction, file = "2ndprediction.csv", row.names = FALSE)
তৈরি হলো ফাইল। এখন সাবমিশনের পালা। আমাদের 2ndprediction.csv ফাইলটাকে আপলোড করে দেই প্রথম প্রেডিকশনের মতো। কোন সমস্যা?
দেখে নিতে পারেন আগের প্রথম প্রেডিকশনের সাবমিশন ফাইল তৈরি আর ক্যাগলে সাবমিশন অংশটুকু। কতো হলো "অ্যাক্যুরেসি" প্রেডিকশন? বলবেন কি? ৭৬.৫৫%! লাফ দিয়েছি ১৩৪৪ ধাপ। লিডারবোর্ডে। ঠিক তাই। অনেক অনেক এগিয়েছি আমরা।
ছবি: দ্বিতীয় প্রেডিকশনের "অ্যাক্যুরেসি"

ব্যবহৃত গিটহাব স্ক্রিপ্ট (অনলাইন)