নরমাল ডিস্ট্রিবিউশন

যখন আমরা কোন রিয়েল লাইফ ডাটা কালেকশনকে রিপ্রেসেন্ট/ডিস্ট্রিবিউট (স্প্রেড আউট) করি তখন সেটার চেহারা বিভিন্ন রকম হতে পারে। যেমন নিচের ডাটাসেটের হিস্টোগ্রাম শো করলে দেখা যাচ্ছে বাম দিকে লম্বা বার বেশি,

x = np.array([20, 30, 30, 30, 20, 20, 50, 20, 20, 30, 40, 40, 40, 50, 60, 60, 90])
plt.hist(x, 15)
plt.show()

অথবা কিছু ডাটার হিস্টোগ্রাম বার গুলো হতে পারে নিচের মত অগোছালো,

x = np.array([40, 30, 80, 30, 20, 80, 50, 20, 20, 60, 40, 40, 40, 50, 60, 60, 90, 80, 70])
plt.hist(x, 15)
plt.show()

কিন্তু অনেক সময় বাস্তবের কিছু ডাটাকে (কিছু ছাত্রের উচ্চতার মান, তাদের পরীক্ষায় প্রাপ্ত নম্বর, একটি মেশিন দারা তৈরি কোন প্রোডাক্টের সাইজ, জনগণের আয় ইত্যাদি) ডিস্ট্রিবিউট করলে নিচের মত চেহারা পাওয়া যায়,

sizes = np.array([9, 8, 8, 9, 9, 1, 4, 5, 6, 7, 8, 9, 10, 10, 11, 11, 11, 11, 11, 13, 12, 12, 12, 12, 13, 13, 14, 14, 14, 15, 15, 15, 16, 17, 18, 20])
plt.hist(sizes)
plt.show()

যেটা অনেকটা বেল (ঘণ্টি) কার্ভের মত অর্থাৎ মাঝখানের বার গুলো লম্বা এবং তার দুপাশের বার গুলো ক্রমান্বয়ে ছোট। এরকম কোন ডাটার ডিস্ট্রিবিউশনকে বলা হয় নরমালি ডিস্ট্রিবিউটেড।

bell

সব ডাটা এমনি এমনি এমন চেহারা নাও পেতে পারে। সেক্ষেত্রে ডাটা গুলোর গড় বা মধ্যক বের করে সেটাকে মাঝখানে রেখে ওই মধ্যম মানের চেয়ে ছোট ও বড় মান গুলোকে যথাক্রমে বাম পাশে এবং ডানপাশে রেখে একটি ডিস্ট্রিবিউশন তৈরি করাকে নরমাল ডিস্ট্রিবিউশন বলা হয়। ডাটাকে এভাবে ডিস্ট্রিবিউট করলে পরবর্তীতে অনেক রকম হিসাব, পর্যবেক্ষণ বা সম্ভাব্যতা বের করা সহজ হয়ে যায়।

নরমালি ডিস্ট্রিবিউটেড কোন ডাটাসেটের mean, median এবং mode মোটামুটি একই হয়। নিচে প্রমাণ করে দেখা যেতে পারে,

np.mean(sizes)
11.194444444444445
np.median(sizes)
11.0
stats.mode(sizes)
ModeResult(mode=array([11]), count=array([5]))