এখন পর্যন্ত আমরা ম্যানুয়ালি একদম অল্প কিছু ডাটা নিয়ে শুধুমাত্র ম্যাথেমিটিক্যাল টার্ম গুলো বোঝার চেষ্টা করেছি। এখন থেকে আমরা একটু বেশি সংখ্যক ডাটার উপর কাজ করবো যাতে করে ফ্যাক্টর গুলোর সঠিকটা আরও ভালভাবে যাচাই করা যায়। এ জন্য আমরা numpy এর রেন্ডমাইজেশন ফাংশন এর সাহায্য নিয়ে চাহিদা মোতাবেক বিভিন্ন ডাটাসেট বানিয়ে সেগুলোর উপর পরীক্ষা চালাবো।
incomes = np.random.normal(27000, 15000, 10000)
np.mean(incomes)
27012.587884334778
উপরে আমরা একটা নরমাল ডিস্ট্রিবিউশন তৈরি করেছি যার ডাটাসেট হচ্ছে কিছু লোকের মাসিক ইনকাম। এর সেন্টার মান ঠিক করে দিয়েছি 27000, স্ট্যান্ডার্ড ডেভিয়েশন বলে দিয়েছি 15000 এবং মোট 10000 -টি ডাটা পয়েন্ট তৈরি করতে বলেছি। এই রেন্ডোম ডাটা সেটের mean তথা গড় মান বের করতে আমরা numpy এর mean ফাংশন কল করেছি এবং এর ভ্যালু এসেছে ঠিক 27000 এর মতই।
আর নিচে আমরা উক্ত ডাটা গুলোকে 50 টি সেগমেন্টে ভাগ করে একটা হিস্টোগ্রাম দেখার চেষ্টা করেছি।
plt.hist(incomes, 50)
plt.show()
np.median(incomes)
26976.888137643109
অর্থাৎ আবারও প্রমাণ হয় যে - নরমালি ডিস্ট্রিবিউটেড ডাটার ক্ষেত্রে mean, median এবং mode মোটামুটি একই।
**Outlier **হচ্ছে এমন ভ্যালু যেটা আলোচ্য সাধারণ ভ্যালু থেকে যথেষ্ট দুরে বা বাইরে অবস্থান করে। অর্থাৎ উপরের ইনকাম এমাউন্ট গুলোর মধ্যে যদি এমন কোন লোকের ইনকাম যুক্ত করা যায় যার মাসিক আয় 1000000000 তাহলে এটাকে আউটলায়ার বলা হয় এবং এটা অবাঞ্ছিতভাবে mean ভ্যালু বদলে দেয়।
incomes = np.append(incomes, [1000000000])
np.mean(incomes)
126999.88789554522
কিন্তু এক্ষেত্রেও median সাহায্য করে সঠিক গড় ভিউ পেতে,
np.median(incomes)
26977.609357910656
আর হ্যাঁ, স্ট্যান্ডার্ড ডেভিয়েশন জানা থাকলে কিন্তু আমরা সহজেই এরকম আউটলায়ার গুলোকে চিহ্নিত করে বাতিল করে দিতে পারি। কারন আমরা জানি সেন্টার ভ্যালু থেকে ২/৩ একক স্ট্যান্ডার্ড ডেভিয়েশনেরও বাইরে পরবে এরকম আউটলারায় গুলো। তাই এগুলোকে আনইউজুয়াল হিসেবে চিহ্নিত করা যায়। z-score এর কথা নিশ্চয়ই মনে আছে এতক্ষণেও।