<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Model-Evaluation on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/model-evaluation/</link><description>Recent content in Model-Evaluation on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 03 Aug 2026 03:36:08 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/model-evaluation/index.xml" rel="self" type="application/rss+xml"/><item><title>Precision vs Recall: Predicted-Positive Accuracy vs Actual-Positive Coverage</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-precision-vs-recall-predicted-positive-accuracy-vs-actual-po/</link><pubDate>Mon, 03 Aug 2026 03:36:08 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-precision-vs-recall-predicted-positive-accuracy-vs-actual-po/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Precision and recall are two classification metrics computed from the same confusion matrix but answering different questions about a model&amp;rsquo;s positive predictions. &lt;strong class="kw"&gt;Precision&lt;/strong&gt; asks how many predicted positives were correct, while &lt;strong class="kw"&gt;recall&lt;/strong&gt; asks how many actual positives were found. Optimizing one in isolation almost always trades off against the other.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;text x="180" y="40" text-anchor="middle" font-size="16" style="fill:var(--compare-a)"&gt;Predicted Positive&lt;/text&gt;&lt;text x="460" y="40" text-anchor="middle" font-size="16" style="fill:var(--compare-b)"&gt;Actual Positive&lt;/text&gt;&lt;circle cx="270" cy="165" r="95" fill-opacity="0.55" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="2"/&gt;&lt;circle cx="390" cy="165" r="95" fill-opacity="0.55" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="2"/&gt;&lt;text x="215" y="170" text-anchor="middle" font-size="20" style="fill:var(--compare-a)"&gt;FP&lt;/text&gt;&lt;text x="330" y="170" text-anchor="middle" font-size="22" style="fill:var(--primary)"&gt;TP&lt;/text&gt;&lt;text x="445" y="170" text-anchor="middle" font-size="20" style="fill:var(--compare-b)"&gt;FN&lt;/text&gt;&lt;text x="215" y="195" text-anchor="middle" font-size="11" style="fill:var(--secondary)"&gt;wrong alarms&lt;/text&gt;&lt;text x="445" y="195" text-anchor="middle" font-size="11" style="fill:var(--secondary)"&gt;missed cases&lt;/text&gt;&lt;line x1="270" y1="270" x2="270" y2="300" style="stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="270" y="320" text-anchor="middle" font-size="15" style="fill:var(--compare-a)"&gt;Precision = TP / (TP + FP)&lt;/text&gt;&lt;line x1="390" y1="270" x2="390" y2="300" style="stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="390" y="345" text-anchor="middle" font-size="15" style="fill:var(--compare-b)"&gt;Recall = TP / (TP + FN)&lt;/text&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Precision&lt;/th&gt;
&lt;th&gt;Recall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Question answered&lt;/td&gt;
&lt;td&gt;Of items predicted positive, how many actually are positive?&lt;/td&gt;
&lt;td&gt;Of items that are actually positive, how many did the model find?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formula&lt;/td&gt;
&lt;td&gt;TP / (TP + FP)&lt;/td&gt;
&lt;td&gt;TP / (TP + FN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Denominator basis&lt;/td&gt;
&lt;td&gt;Total predicted positive (TP + FP)&lt;/td&gt;
&lt;td&gt;Total actual positive (TP + FN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Error type penalized&lt;/td&gt;
&lt;td&gt;False positives (false alarms)&lt;/td&gt;
&lt;td&gt;False negatives (missed detections)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Increases when&lt;/td&gt;
&lt;td&gt;Model makes fewer incorrect positive calls&lt;/td&gt;
&lt;td&gt;Model catches more of the true positive cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Threshold trade-off&lt;/td&gt;
&lt;td&gt;Raising the decision threshold typically raises precision&lt;/td&gt;
&lt;td&gt;Lowering the decision threshold typically raises recall&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure mode at extreme&lt;/td&gt;
&lt;td&gt;High precision, low recall: model is overly conservative and misses real cases&lt;/td&gt;
&lt;td&gt;High recall, low precision: model is overly liberal and floods results with false alarms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Precision&amp;rsquo;s denominator is predicted positives; recall&amp;rsquo;s denominator is actual positives, so they measure against different totals&lt;/li&gt;
&lt;li&gt;Precision is hurt by &lt;strong class="kw"&gt;false positives&lt;/strong&gt;; recall is hurt by &lt;strong class="kw"&gt;false negatives&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Adjusting the classification &lt;strong class="kw"&gt;threshold&lt;/strong&gt; pushes precision and recall in opposite directions&lt;/li&gt;
&lt;li&gt;Neither metric alone summarizes model quality, which is why the &lt;strong class="kw"&gt;F1 score&lt;/strong&gt; combines them&lt;/li&gt;
&lt;li&gt;A model with 100% recall can trivially predict everyone positive, and a model with 100% precision can trivially predict almost no one positive&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Precision&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>