عدد خلاصه جای تعریف شاخص را نمیگیرد
یک کارت امتیاز چند شاخص را به خلاصهای خوانا تبدیل میکند، اما کیفیت آن به معنای شاخصها وابسته است. در این تمرین همهٔ مقدارها بین صفر و صد و همجهتاند؛ عدد بیشتر بهتر است و وزن همه برابر است. میانگین زمان پاسخ بر حسب ثانیه با درصد کیفیت بدون تبدیل مقیاس معنا ندارد. پیش از کدنویسی، همین فرضهای اندازهگیری را روی کاغذ مشخص کنید.
میانگین حسابی چه اطلاعاتی را حفظ میکند؟
برای n شاخص، مجموع مقدارها را بر n تقسیم میکنیم. این خلاصه ساده است ولی تفاوت ترکیبها را پنهان میکند؛ دو مجموعه با میانگین یکسان میتوانند نقاط ضعف کاملاً متفاوتی داشته باشند. بنابراین در گزارش واقعی، مقدارهای اصلی یا دستکم شاخصهای بحرانی را نیز در دسترس نگه دارید. میانگین خوب لزوماً به معنی مناسببودن همهٔ جنبههای عملکرد نیست.
آستانهها را همپوشان و مبهم ننویسید
در قرارداد پروژه، میانگین از نود به بالا excellent، از هفتاد تا کمتر از نود good و پایینتر needs_review است. ترتیب بررسی از آستانهٔ بالاتر شروع میشود تا محدودهها روشن باشند. مرز دقیق نود و هفتاد باید تست شود. این نامها فقط برچسب آموزشیاند؛ انتخاب آستانهٔ واقعی باید با هدف محصول و هزینهٔ تصمیم توجیه شود، نه با زیبایی عددهای رند.
بهترین شاخص در حالت تساوی
اگر چند شاخص بیشترین مقدار را داشته باشند، قرارداد نام کوچکتر طبق Unicode را انتخاب میکند. استفاده از max روی نگاشت بدون کلید مناسب، نام را مقایسه میکند نه مقدار را. از طرف دیگر، max با مقدار بهتنهایی ممکن است تساوی را بر اساس ترتیب درج بشکند. برای خروجی قابلتکرار، مقدار نزولی و نام صعودی را در یک کلید ترکیبی قرار میدهیم.
دادهٔ خالی را با امتیاز صفر یکی نکنید
نگاشت خالی یعنی هیچ شاخصی برای محاسبه نداریم، نه اینکه عملکرد صفر بوده است. به همین دلیل خروجی error=empty_metrics میدهد. تبدیل خودکار آن به میانگین صفر میتواند سامانهای بدون داده را بهاشتباه ضعیف اعلام کند. همچنین مقدار گمشده در یک شاخص باید در قرارداد واقعی سیاست جدا داشته باشد؛ حذف بیصدا ممکن است وزن ضمنی سایر شاخصها را عوض کند.
آزمون مرز و تغییر نام
تکشاخص با امتیاز نود، دو شاخص با میانگین دقیقاً هفتاد، دادهٔ خالی و تساوی بهترین مقدار را آزمایش کنید. اگر فقط ترتیب درج کلیدها عوض شد، میانگین و وضعیت نباید تغییر کنند و انتخاب بهترین شاخص نیز باید از قرارداد پیروی کند. برای مثالهای اعشاری، مقایسهٔ عددی را با تلورانس انجام دهید. نوع و نام فیلدهای خروجی نیز مانند خود عدد بخشی از تست هستند.
توسعه به امتیاز وزندار
وقتی وزن شاخصها یکسان نیست، مجموع حاصلضرب وزن و امتیاز را بر مجموع وزن تقسیم کنید. میانگینگرفتن ساده از میانگین چند گروه، بدون تعداد یا وزن گروهها معمولاً درست نیست. وزن صفر، مجموع وزن صفر و شاخصهای با جهت معکوس نیاز به تعریف جدا دارند. پیش از انتشار گزارش تصمیمساز، تحلیل حساسیت انجام دهید تا معلوم شود تغییر یک وزن چقدر رتبه یا وضعیت را عوض میکند.
نمونهکد و قرارداد پروژه
metrics: نگاشت نام شاخص به عدد متناهی بین صفر و صد با وزن برابر. فهرست تهی مجاز است.
average: میانگین حسابی؛ status: از ۹۰ excellent، از ۷۰ good و کمتر needs_review؛ best_metric: نام بیشترین مقدار، در تساوی کوچکترین نام Unicode. خالی: فقط error=empty_metrics.
def solve(data):
metrics = data['metrics']
if not metrics:
return {'error': 'empty_metrics'}
average = sum(metrics.values()) / len(metrics)
best = min(metrics, key=lambda name: (-metrics[name], name))
return {'average': average,
'status': 'excellent' if average >= 90 else 'good' if average >= 70 else 'needs_review',
'best_metric': best}
print(solve({'metrics': {'speed': 80, 'quality': 90, 'reliability': 70}}))خروجی مورد انتظار
{
"average": 80,
"status": "good",
"best_metric": "quality"
}پرسشهای متداول
آیا میانگین خوب برای پذیرش کافی است؟
نه همیشه. یک شاخص بحرانی ممکن است ضعیف باشد و در میانگین پنهان شود؛ قواعد پذیرش باید هدف و محدودیتهای واقعی را منعکس کنند.
آیا میتوان شاخص با واحد متفاوت را مستقیم میانگین گرفت؟
معمولاً نه. ابتدا مقیاس، جهت بهتر بودن و روش تبدیل باید تعریف شود؛ سپس وزن و تفسیر نتیجه بررسی شود.
تمرین عملی و قدم بعدی
پروژهٔ «ساخت گزارش عملکرد» همین قرارداد را در میزکار ارزیابی میکند. ابتدا خروجی نمونه را دستی محاسبه کنید، سپس تابع را اجرا کنید و یک ورودی مرزی متفاوت بسازید. نمونهکد راهی برای توضیح منطق است؛ برای یادگیری، علت هر شرط و انتخاب ساختار داده را بدون نگاهکردن به کد توضیح دهید. اجرای موفق با قبولی ارزیابی متفاوت است؛ نتیجه باید برای تمام حالتهای تعریفشده درست بماند.
منابع و مطالعهٔ بیشتر
برای بررسی جزئیات و ادامهٔ مطالعه؛ متن این راهنما مستقلاً برای نوونتیکس نوشته شده است.
