معیار صحت (Precision)، پوشش (Recall) و معیار F

مدرس: مسعود کاویانی

در درس گذشته با ماتریس اغتشاش (Confusion Matrix) و معیار دقت (Accuracy) آشنا شدیم. دیدیم که با استفاده از یک مجموعه‌ی آزمون، می‌توانیم دقتِ الگوریتم را از روی ماتریس اغتشاش، به سادگی محاسبه کنیم. اما آیا این دقت، معیاری خوبی برای ارزیابی یک الگوریتم بود؟

ماتریس اغتشاش و مثال درس قبل را به یاد بیاورید:

در این مثال مشاهده کردید که ما از میان ۱۰۰ نفر که در مجموعه‌ی آزمون داشتیم، ۸۶ نفر را به درستی بیمار تشخیص دادیم و ۱۴ نفر را به اشتباه سالم تشخیص دادیم. در واقع معیار دقت (Accuracy) برابر با ۸۶ درصد شد. اما معیار دقت (Accuracy) یک نقطه‌ی ضعف دارد، و آن این است که این معیار، نمی‌تواند تفاوتی بین خطای False Negative و خطای False Positive داشته باشد. در واقع این معیار، تمامی خطاها را یکسان در نظر می‌گیرد. فرض کنید در همین مثال بالا که از درس قبل آوردیم، تعداد خطاهای FN برابر با ۱۰ و تعداد خطاهای FP برابر با ۴ بود (برعکس تصویر بالا). احتمالاً متوجه شدید که معیار دقت (Accuracy) باز هم همان ۸۶ درصد باقی می‌ماند و تفاوتی با حالت قبل نمی‌کرد.

برای غلبه بر این مشکل دو معیار دیگر معرفی شده است که یکی از آن‌ها معیار صحت (Precision) بوده که فرمول آن به صورت زیر است:

اگر با دقت به فرمول نگاه کرده باشید، متوجه می‌شوید که تمرکز اصلی این معیار، بر روی درستیِ تشخیص‌های «بلی» توسط الگوریتم است. در واقع معیار صحت (Precision) معیاری است که به ما می‌گوید الگوریتم چند درصدِ «بلی»هایش درست بوده. برای فهم بیشتر، ماتریس اغتشاش بالاتر را نگاه کنید. در این مثال که از درس قبلی آوردیم، الگوریتم، تعداد ۸۱ نفر را بیمار تشخیص داده است (۷۱ + ۱۰). که از این تعداد فقط ۷۱ نفرِ آن‌ها واقعاً بیمار بوده‌اند. پس در واقع معیار صحت برای مثال بالا برابر ۷۱/۸۱ یا ۸۷درصد است. به این معنا که اگر الگوریتم، شخصی را بیمار تشخیص داد، این تشخیص به احتمال ۸۷ درصد درست است.

اما معیارِ کاربردیِ دیگری به نام پوشش (Recall) نیز وجود دارد و همان‌طور که از نامش پیداست، به دنبال محاسبه‌ی پوشش بر روی کل داده‌هاست. فرمول این معیار به صورت زیر است:

همان‌طور که مشاهده می‌کنید، تمرکز اصلی معیار پوشش (Recall) بر خلاف معیار صحت (Precision) بر روی داده‌هایی است که واقعاً «بلی» بوده‌اند. برای مثال در این‌جا معیار پوشش به دنبال تعیین دقت الگوریتم، برای نمونه‌هایی است که واقعاً بیمار بوده‌اند. اگر به ماتریس اغتشاش بالا نگاه کنید، تعداد ۷۵ نفر، واقعاً بیمار بوده‌اند که از این تعداد، ۷۱ نفر به درستی بیمار تشخیص داده شده‌اند و ۴ نفر به اشتباه، سالم تشخیص داده شده‌اند. پس معیار پوشش به دنبال یافتن پوششِ بلی در میان داده‌هاست. در همین مثال بالا، معیار پوشش، به دنبال پوششِ حداکثری بیماران است به گونه‌ای که هیچ بیماری (که واقعاً بیماری دارد) به اشتباه سالم تشخیص داده نشود.

در برخی از مسائل، معیار پوشش (Recall) مهم‌تر از معیار صحت (Precision) می‌شود. فرض کنید در همین مثال بالا، بیماران ما دارای بیماری کوید-۱۹ باشند. اگر الگوریتم یک شخصی را که واقعا بیمار نیست، به اشتباه بیمار تشخیص دهد، می‌توان به صورت محتاطانه، این شخص را قرنطینه کرد. با این‌که می‌دانیم معیار صحت (Precision) خیلی بالایی نداشته‌ایم و ممکن است تشخیص ما در بیمار دانستنِ این شخص اشتباه باشد. اما حالا فرض کنید شخص واقعا بیمار باشد و ما به اشتباه او را سالم تشخیص دهیم (پوشش پایین). در این‌جا این شخص می‌تواند صدمه‌ی زیادی به جامعه برساند. پس در همچین مثالی، ما به دنبال بالا بردنِ هر چه بیشترِ معیار پوشش (Recall) هستیم و می‌توانیم در مورد معیار صحت کمی اغماض نشان دهیم. جالب است بدانید به معیار پوشش (Recall)، معیار حساسیت (Sensitivity) نیز گفته می‌شود.

معیار سومی به اسم معیار F1 هم وجود دارد که در واقع ترکیبی از معیارهای دقت و صحت است و به صورت زیر فرموله می‌شود:

معیار F1 که در واقع ترکیب متعادلی بین معیارهای دقت و صحت است، می‌تواند در مواردی که هزینه‌ی False Positive و False Negative متفاوت است به کار رود. اگر هزینه‌ی False Positive و False Negative تقریباً برابر بود، می‌توان از همان معیار دقت (Accuracy) که در درس قبل در مورد آن صحبت شد، استفاده کرد. همچنین اگر داده‌های شما در کلاس‌ها به صورت نامتوازن پخش شده بود (برای مثال اگر ۹۰ درصد بیمار و ۱۰ درصد شخص سالم داشتیم) بهتر است که از معیارهای صحت، پوشش و یا F1 استفاده کنیم.

ترتیب پیشنهادی خواندن درس‌های این مجموعه به صورت زیر است:

21 دیدگاه دربارهٔ «معیار صحت (Precision)، پوشش (Recall) و معیار F»

  1. با سلام و ممنون از توضیحاتتون.
    ببخشید یه سوال داشتم خدمتتون در مورد مقیاس این معیارها هم میشه توضیح دهید؟
    جایی در مورد مقیاس این معیارها به چشمم خورد و الان برام سوال شده است که مقیاس این معیار چه چیزی است

  2. با سلام. ممنون از توضیحات خوبتون ..اما در انتهای مقاله ذکر شده معیار f1 ترکیبی از معیارهای دقت و صحت است درحالیکه فرمول بیانگر این هست که معیار f1 ترکیبی از معیارهای پوشش و صحت است.

  3. با سلام و عرض ادب
    مطالب عالی و خیلی مورد نیاز بنده بود و همچنین خیلی عالی، ساده و قابل فهم بیان شد.
    خداخیرتان بدهد. با تشکر

  4. سلام
    ببخشید من فکر میکنم Accuracy به معنای صحت می باشد که میشود مجموع قطر اصلی ماتریس تقسیم بر کل درایه های ماتریس و Precision به معنای دقت است. باتشکر

  5. می‌تواند در مواردی که هزینه‌ی False Positive و False Negative متفاوت است به کار رود.
    منظورتون از هزینه چه چیزی است؟

  6. خیلی عالی بود.
    معیار فراخوان کدام معیار است؟ چون گفتید معیار پوشش را معیار حساسیت نیز میگویند. معیار فراخوان کدوم معیار است؟

  7. سلام جناب کاویانی عزیز
    معیارهای معرفی شده مانند: precision, accuracy, recall زمانی قابل محاسبه هستند که یک الگوریتم در کاربرد دسته بندی استفاده شده باشد؟؟
    درواقع سوال من این است که این معیار ها فقط مربوط به مطالعات الگوریتم ها در کاربرد خوشه بندی است؟
    مثلا فرض کنید، یک الگوریتم بهینه سازی مثل الگوریتم ژنتیک در بهینه سازی یک مسأله طراحی استفاده شده است و راه حل بهینه بدست آمده است. چگونه میتوان معیارهای فوق را برای این کاربرد محاسبه کرد؟

    با تشکر از شما.

  8. با سلام
    جسارتاً استاد
    در تعاریف و بررسی ها اکثراً معیار Precision بعنوان دقت و معیار Accuracy بعنوان صحت مورد استفاده قرار میگیرد که اینجا بر عکس عنوان فرمودین

    با تشکر

  9. سلام ممنون برای مطالب عالی و واقعا روان.

    جسارتا دو تا اشکال به چشمم خورد در بخش recall:
    یک جا نوشته شده “به دنبال محاسبه‌ی پوشش بر روی کل داده‌هاست” که به نظرم ابهام داره و صحیح تر این هست که نوشته بشه “کل داده های مثبت”.

    یک جا هم برای FN نوشته شده: ” ۴ نفر به اشتباه، سالم تشخیص داده شده‌اند” که فکر میکنم اشتباهی تایپ شده و باید نوشته بشه “به اشتباه بیمار تشخیص داده شده اند” یعنی سالم بودند.

  10. ببخشید ایراد مورد دومم در پیام قبلی صحیح نیست، و نوشته شما صحیح هست. ممنون میشم تصحیح بفرمایید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *