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

סט্যাটিস্টিক্যাল মিন এবং পারসেন্টাইল বোঝা: একটি প্র্যাক্টিক্যাল গাইড

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

মিন (গড়)

একটি কালেকশন ভ্যালুর মিন বা গড় একটি ভালো শুরু কীভাবে ভালো বা খারাপ কিছু বर्तমান করছে সেটা দেখতে। এটি ক্যালকুলেট করা হয় সব ভ্যালু সম করুন যেগুলো বিবেচনায় এবং তারপর ঘটনার সংখ্যা দিয়ে ভাগ করে।

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

def mean(array) (array.sum.to_f / array.length).round(2) end durations = [1,2,3,4,5,6,7,8,9,0] mean(durations) #=> 4.5

নোট: উদাহরণে, ভাগ করার সময় আরও সঠিক ফলাফলের জন্য, আমরা টোটাল ডিউরেশন ভ্যালুকে ফ্লোটে কাস্ট করেছি। অন্যথায়, রুবি নিকটস্থ ইন্টিজারের দিকে রাউন্ড ডাউন করত, 4 রিটার্ন করত 4.5-এর বদলে।

মেডিয়ান

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

মেডিয়ান হলো ভ্যালু যেটি একটি সেটের উপরের হাফকে নিচের হাফ থেকে আলাদা করে।

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

def median(array) sorted_array = array.sort length = sorted_array.length if length.odd? # Middle number for odd arrays sorted_array[length / 2] else # Mean of two middle numbers first_value = sorted_array[length / 2] second_value = sorted_array[length / 2 - 1] (first_value + second_value) / 2.to_f end end # Even array durations = [1,2,3,4,5,6,7,8,9,0] median(durations) #=> 4.5 # Odd array durations = [1,1,2,3,4,5,6,7,8,9,0] median(durations) #=> 4

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

durations = [1,2,3,4,5,2000] median(durations) #=> 3.5 mean(durations) #=> 335.83

উপরোক্ত ডিউরেশনগুলোতে মিন হবে 335.83 কারণ ২০০০мс-এর একক আউটলায়ারের কারণে। মেডিয়ান, যেটি শুধু 3.5, ইন্ডিকেট করে যে একটি স্কিউ আছে।

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

মিন-এর সমস্যা

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

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

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

[100,100,100,100,100,100,100,100,100,1_000]

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

উপরের উদাহরণটি শুধু ১০ রিকোয়েস্টের জন্য, কিন্তু কল্পনা করুন আপনার হাজার রিকোয়েস্ট রোজ হয়, তাহলে সোটি ইউজারের ভয়ঙ্কর এক্সপেরিয়েন্স হবে।

পারসেন্টাইল

ভ্যালুগুলোর ডিস্ট্রিবিউশন সম্পর্কে আরও ভালো ধারণা দিতে, আমরা পারসেন্টাইল ব্যবহার করি। পারসেন্টাইল মেডিয়ান-এর সিমিলার - একটি নম্বর যা ডেটাসেটে একটি পয়েন্ট ইন্ডিকেট করে যেখানে হাফ সেট নিচে এবং হাফ উপরে। পারসেন্টাইল সিমিলার অর্থাৎ ২০তম পারসেন্টাইল মানে ডেটাসেটের ২০% নম্বর সেই নম্বরের নিচে।

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

[100,100,200,200,300,300,400,400,500,5_000]

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

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

def percentile(array, wanted_percentile) sorted_array = array.sort index = (wanted_percentile.to_f / 100) * sorted_array.length - 1 # Check if index is not a round number if index != index.to_i sorted_array.at(index.ceil) elsif sorted_array.length.even? first_value = sorted_array.at(index) second_value = sorted_array.at(index + 1) (first_value + second_value) / 2 else sorted_array.at(index) end end # An array with an odd amount of numbers durations = [100,200,200,300,300,400,400,500,5_000] percentile(durations, 20) #=> 100 percentile(durations, 90) #=> 500 percentile(durations, 95) #=> 5000, index is a fraction, 9.5 the rounded index is 10 # An array with an even amount of numbers durations = [100,100,200,200,300,300,400,400,500,5_000] percentile(durations, 20) #=> 150, average of index 1 & 2 `(100 + 200) / 2` percentile(durations, 90) #=> 2750, average of index 8 & 9 `(500 + 5000) / 2 percentile(durations, 95) #=> 500, index is a fraction, 8.55 the index is 9

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

durations = [1,2,3] percentile(durations, 50) == median(durations) #=> true

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

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

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

durations = [1,1,1,1,1,1,1,1,1,1,2000] percentile(durations, 90) #=> 1 mean(durations) #=> 182.73

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

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

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

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

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

  1. XInput এবং DirectInput বলতে কী বোঝায়?

  2. আমার আইফোনে Cydia কী এবং এটি আমার নিরাপত্তার জন্য কী মানে?

  3. পাইথনে BST-এর মেডিয়ান O(n) সময় এবং O(1) স্পেসে বের করা

  4. কেন কম্পিউটার 'হুইং' শব্দ করে এবং এর মানে কী