কম্পিউটার টিউটোরিয়াল

মিন (Mean) এবং পার্সেন্টাইল (Percentiles) বুঝুন: পারফরম্যান্স মেট্রিক্সের একটি বিগিনার গাইড

পারফরম্যান্স মনিটরিং একটি সফল অ্যাপ্লিকেশন চালানোর একটি গুরুত্বপূর্ণ অংশ। কিছু (something) এর পারফরম্যান্স বলতে একটি সবচেয়ে বেসিক উপায় হল প্রতিবার এর ডুরেশন (duration) মেজার করা এবং সেটি থেকে পরিসংখ্যান (statistics) বের করা।

মিন (Mean)

একটি ভ্যালু কালেকশনের মিন (mean) বা গড় (average) কিছু কীভাবে ভালো বা খারাপ বیهেভ করছে সেটি দেখার একটি ভালো শুরু। এটি ক্যালকুলেট হয় সকল ভ্যালু সম করলে যেগুলো বিবেচনায় আছে এবং তারপর ঘটনার সংখ্যা (number of occurrences) দিয়ে ভাগ করলে।

রুবিতে, মিন রেসপন্স টাইম ক্যালকুলেট করা এরকম দেখাবে:


দ্রষ্টব্য: উদাহরণে, ডিভাইড করার সময় আরও এক্যুরেট (accurate) রেজাল্টের জন্য, আমরা টোটাল ডুরেশন ভ্যালুকে Float-এ কাস্ট (cast) করেছি। অন্যথায়, রুবি নিকটতম Integer-এ রাউন্ড ডাউন (round down) করবে, 4 ফেরত দেবে বদলে।

আরেকটি উপযোগী পরিসংখ্যান হল মেডিয়ান (median)। যদিও এটি শোনায় সাদৃশ্য, একটি ভ্যালু কালেকশনের মিন এবং মেডিয়ানের মধ্যে পার্থক্য আছে।

মেডিয়ান হল वो ভ্যালু যা একটি সেটের আপার হাফ (upper half) কে লোয়ার হাফ (lower half) থেকে আলাদা করে।

একটি অড (odd) সংখ্যক ভ্যালু বিশিষ্ট ডেটাসেটের জন্য, আপনি প্রথম ভ্যালুগুলো সর্ট (sort) করে, তারপর মিডল নম্বরটি সিলেক্ট করে মেডিয়ান পায়েন। একটি ইভেন (even) সংখ্যক ভ্যালু বিশিষ্ট সেটের জন্য, সেগুলো সর্ট করার পর, মেডিয়ান হবে দুটি মিডল নম্বরের গড়।


এই পরিসংখ্যানটি ডেটায় কোনো বড় স্কিউ (skew) বা লং টেইল (long tail) আছে কিনা সেটি দেখার একটি ভালো উপায়।


উপরের ডুরেশনসের জন্য মিন (mean) হবে 335.83 ২০০০ms এর সিঙ্গেল আউটলায়ার (outlier) এর কারণে। মেডিয়ান, যেটি শুধু 3.5, ইন্ডিকেট করে যে একটি স্কিউ (skew) আছে।

একটি ডেটাসেটের মিন এবং মেডিয়ান দুটোই ক্যালকুলেট করে, আপনি বের করতে পারেন কোনো বড় আউটলায়ার বা লং টেইল আছে কিনা।

মিন (Mean)-এর সমস্যা (The Problem with Mean)

যদিও মিন এবং মেডিয়ান পারফরম্যান্সের ভালো ইন্ডিকেটর, সেগুলো পুরো গল্প বলে না। আপনি যদি একটি ওয়েবপেজ দশবার রিকোয়েস্ট করেন, মিন খুব কম হতে পারে, কিন্তু এক বা অধিক রিকোয়েস্ট খুব দীর্ঘ সময় নিতে পারে কমপ্লিট হওয়ার জন্য।

নিচের ইমেজটি AppSignal-এ একটি নির্দিষ্ট অ্যাকশনের জন্য ৯৯তম (নীল), ৯০তম (সবুজ), এবং মিন (লাল) পার্সেন্টাইলস দেখাচ্ছে। আপনি দেখতে পাচ্ছেন ৯৯তম এবং ৯০তম মিন থেকে খুব দূরে এবং কিছু স্পাইক (spikes) আছে। এর মানে হল আপনার গড় কাস্টমারের অভিজ্ঞতা ভালো হলেও, একবারের মতো একটি ইউজার আছে যাকে পৃষ্ঠা রেন্ডার হওয়ার জন্য প্রায় দুগুন সময় অপেক্ষা করতে হয়। আদর্শভাবে, আপনি এই সব ভ্যালু যতটা সম্ভব একে অপরের কাছে আনা চাবেন, সব ইউজারের জন্য একটি আরও কনসিস্টেন্ট অভিজ্ঞতা তৈরি করতে।

মিন (Mean) এবং পার্সেন্টাইল (Percentiles) বুঝুন: পারফরম্যান্স মেট্রিক্সের একটি বিগিনার গাইড

উদাহরণস্বরূপ, নিচের ডুরেশন সেট দেওয়া আছে যেখানে ১০ কাস্টমার একটি পেজ রিকোয়েস্ট করেছে ১০০ মিলিসেকেন্ড থেকে ১ সেকেন্ডের ডুরেশনের সাথে।


এটি ফলাফল দেবে মিন শুধু 190ms যখন একটি ইউজারের খুব খারাপ অভিজ্ঞতা ছিল ১ সেকেন্ড রেসপন্স টাইমের। শুধু মিন ট্র্যাক করলে, সহজে মনে হতে পারে আপনার ওয়েবসাইটের পারফরম্যান্স চমৎকার, বাস্তবে কিন্তু প্রতি মুহূর্তে একটি ইউজারের অভিজ্ঞতা ভয়ঙ্কর।

উপরের উদাহরণটি শুধু ১০ রিকোয়েস্টের জন্য, কিন্তু কল্পনা করুন আপনার হাজার রিকোয়েস্ট পার ডে (per day) থাকলে, সেটি মানে সো (hundred) ইউজারের অভিজ্ঞতা ভয়ঙ্কর হত।

পার্সেন্টাইলস (Percentiles)

ভ্যালুগুলোর ডিস্ট্রিবিউশন (distribution) সম্পর্কে একটি ভালো ধারণা দিতে, আমরা পার্সেন্টাইলস (percentiles) ব্যবহার করি। পার্সেন্টাইলস মেডিয়ানের সাথে সাদৃশ্যপূর্ণ — একটি নম্বর যা ডেটাসেটের একটি পয়েন্ট সিগনিফাই করে যেখানে সেটের হাফ নম্বরের নিচে এবং হাফ উপরে। পার্সেন্টাইলস সাদৃশ্য কারণ ২০তম পার্সেন্টাইল মানে ডেটাসেটের ২০% নম্বর সেই নম্বরের নিচে।

নিচের (সর্টেড) সেট দেওয়া আছে:


আমরা যদি ২০তম পার্সেন্টাইল জানতে চাই, আমরা নিচেরভাবে ক্যালকুলেট করতে পারি: সেটে ১০টি ভ্যালু আছে। চাওয়া ভ্যালু পজিশন ১-এ আছে (20.0 / 100 * 10 - 1) যেহেতু আমাদের অ্যারে শূন্য থেকে শুরু হয়। যেহেতু এই অ্যারে ইভেন সংখ্যক আইটেম ধারণ করে, আমাদের ইনডেক্স (2) এবং ইনডেক্স + ১ (3) এর মিন ক্যালকুলেট করতে হবে। এতে ২০তম পার্সেন্টাইলের জন্য 150 ভ্যালু ফলাফল হবে।

এক খুব নেইভ (naive) রুবি ইমপ্লিমেন্টেশন এরকম দেখাবে:


এই percentile ফাংশনটি আমাদের median ক্যালকুলেশনের সাথে খুব সাদৃশ্যপূর্ণ এবং আসলে, median একই 50th পার্সেন্টাইল।


AppSignal উপরের পরিসংখ্যানগুলো ব্যবহার করে আপনার অ্যাপ্লিকেশনের জন্য পারফরম্যান্স মেট্রিক্স জেনারেট করে। আমরা শুধু মিন/গড়ের ওপর নির্ভর করি না বরং ৯০তম এবং ৯৫তম পার্সেন্টাইল ক্যালকুলেট করি আউটলায়ারস (outliers) দেখানোর জন্য যেগুলো আপনার রিকোয়েস্টগুলোর ডিস্ট্রিবিউশন সম্পর্কে একটি ভালো ধারণা দেয়। আমাদের পারফরম্যান্স টুর পেজে আরও জানুন।

অদ্ভুত বিষয়গুলো (Oddities)

পার্সেন্টাইল এবং গড় ক্যালকুলেট করার পদ্ধতির কারণে, কখনো কখনো ৯০তম পার্সেন্টাইল মিনের নিচে ডিপ (dip) করতে পারে, উদাহরণস্বরূপ, নিচের ডেটাসেট দিয়ে:


এটি আমাদের একটি mean দেবে 182.73, এবং একটি ৯০তম পার্সেন্টাইল শুধু 1।

আপনার মেট্রিক কলেকশন সিস্টেম যদি শুধু ৯০তম পার্সেন্টাইল এবং মিন দেখায়, আপনি এখনও বুঝতে পারবেন আপনার ডেটাসেটে कहीं একটি বড় আউটলায়ার আছে যদি ৯০তম পার্সেন্টাইল গড়ের নিচে ড্রপ (drop) করে।

👋 আপনি যদি এই আর্টিকেল পছন্দ করেন, আমরা রুবি (অন রেইলস) পারফরম্যান্স সম্পর্কে আরও অনেক কিছু লিখেছি, আমাদের রুবি পারফরম্যান্স মনিটরিং চেকলিস্ট চেক আউট করুন।

আপনি এই পোস্টের প্রায় ১০০% পূরণ করেছেন

এতক্ষণই! আরেকটি পোস্টে, আমরা আলোচনা করব কীভাবে আমরা সকল কাস্টমারের রিকোয়েস্টের জন্য পার্সেন্টাইলস দক্ষতার সাথে স্টোর এবং ক্যালকুলেট করি কোয়ান্টাইলস (Quantiles) ব্যবহার করে। আপনার কোনো প্রশ্ন বা মন্তব্য থাকলে পরিসংখ্যান এবং APM, এরর ট্র্যাকিং বা পারফরম্যান্স মনিটরিং সম্পর্কে, আমাদের টুইটারে @AppSignal বা ইমেইল দিয়ে যোগাযোগ করুন।

মিন (Mean) এবং পার্সেন্টাইল (Percentiles) বুঝুন: পারফরম্যান্স মেট্রিক্সের একটি বিগিনার গাইড

রবার্ট বীকমান (Robert Beekman)

একটি কো-ফাউন্ডার (co-founder) হিসেবে, রবার্ট আমাদের ভেরি ফার্স্ট কমিট (very first commit) লিখেছেন। তিনি আমাদের সাপোর্ট রোল-মডেল (support role-model) এবং কোডের ক্ষুদ্র ডিটেইলস সব জানেন। ভ্রমণ এবং ফটোগ্রাফি (একই সময়ে)।

রবার্ট বীকমানের সব আর্টিকেল


  1. Matplotlib-এ X-অক্ষ লেবেলের জন্য স্পেস বাড়ানোর পদ্ধতি

  2. HTML ফাইল ইনস্পেক্ট এবং অ্যানালাইজ করার ধাপে ধাপ গাইড

  3. Matplotlib-এ স্ক্যাটার মাস্কড পয়েন্ট ও মাস্কড অঞ্চল চিহ্নিত করার লাইন প্লট করা

  4. Matplotlib সাবপ্লটে আসল আকারে ভিন্ন ইমেজ ডিসপ্লে করার পদ্ধতি