Confusion Matrix Metrics Calculator
ANA›Life Services Authority›National Calculator Authority›Confusion Matrix Metrics Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Confusion Matrix Metrics Calculator
Enter the four values of a binary confusion matrix to calculate classification performance metrics including Accuracy, Precision, Recall (Sensitivity), Specificity, F1 Score, MCC, and more.
True Positives (TP)
False Positives (FP)
False Negatives (FN)
True Negatives (TN)
Calculate
Fill in the confusion matrix values above and click Calculate.
function conCalc() { var tpRaw = document.getElementById('con-tp').value.trim(); var fpRaw = document.getElementById('con-fp').value.trim(); var fnRaw = document.getElementById('con-fn').value.trim(); var tnRaw = document.getElementById('con-tn').value.trim(); var resultDiv = document.getElementById('con-result');
// Validation: all fields required if (tpRaw === '' || fpRaw === '' || fnRaw === '' || tnRaw === '') { resultDiv.innerHTML = 'Please fill in all four confusion matrix values.'; return; }
var tp = parseFloat(tpRaw); var fp = parseFloat(fpRaw); var fn = parseFloat(fnRaw); var tn = parseFloat(tnRaw);
// Validation: non-negative integers if (!Number.isInteger(tp) || !Number.isInteger(fp) || !Number.isInteger(fn) || !Number.isInteger(tn)) { resultDiv.innerHTML = 'All values must be whole numbers (integers).'; return; } if (tp All values must be non-negative.'; return; }
var total = tp + fp + fn + tn; if (total === 0) { resultDiv.innerHTML = 'Total count (TP+FP+FN+TN) must be greater than zero.'; return; }
// ── Core Metrics ──────────────────────────────────────────────────────────
// Accuracy = (TP + TN) / (TP + FP + FN + TN) var accuracy = (tp + tn) / total;
// Precision (Positive Predictive Value) = TP / (TP + FP) var precision = (tp + fp) > 0 ? tp / (tp + fp) : null;
// Recall / Sensitivity / TPR = TP / (TP + FN) var recall = (tp + fn) > 0 ? tp / (tp + fn) : null;
// Specificity / TNR = TN / (TN + FP) var specificity = (tn + fp) > 0 ? tn / (tn + fp) : null;
- // F1 Score = 2 * (Precision * Recall) / (Precision + Recall)
- var f1 = (precision !== null && recall !== null && (precision + recall) > 0)
- ? 2 * (precision * recall) / (precision + recall)
- null;
// False Positive Rate (FPR) = FP / (FP + TN) var fpr = (fp + tn) > 0 ? fp / (fp + tn) : null;
// False Negative Rate (FNR) = FN / (FN + TP) var fnr = (fn + tp) > 0 ? fn / (fn + tp) : null;
// Negative Predictive Value (NPV) = TN / (TN + FN) var npv = (tn + fn) > 0 ? tn / (tn + fn) : null;
// False Discovery Rate (FDR) = FP / (FP + TP) var fdr = (fp + tp) > 0 ? fp / (fp + tp) : null;
// Matthews Correlation Coefficient (MCC) // MCC = (TPTN - FPFN) / sqrt((TP+FP)(TP+FN)(TN+FP)(TN+FN)) var mccDenom = Math.sqrt((tp + fp) * (tp + fn) * (tn + fp) * (tn + fn)); var mcc = mccDenom > 0 ? (tp * tn - fp * fn) / mccDenom : null;
- // Balanced Accuracy = (Sensitivity + Specificity) / 2
- var balancedAcc = (recall !== null && specificity !== null)
- ? (recall + specificity) / 2
- null;
- // Informedness (Youden's J) = Sensitivity + Specificity - 1
- var informedness = (recall !== null && specificity !== null)
- ? recall + specificity - 1
- null;
- // Markedness = Precision + NPV - 1
- var markedness = (precision !== null && npv !== null)
- ? precision + npv - 1
- null;
// ── Helpers ─────────────────────────────────────────────────────────────── function fmt(val, decimals) { if (val === null) return 'N/A (division by zero)'; return val.toFixed(decimals !== undefined ? decimals : 4); } function pct(val) { if (val === null) return 'N/A'; return (val * 100).toFixed(2) + '%'; }
// ── Confusion Matrix Visual ─────────────────────────────────────────────── var matrixHtml = '' + '' + '' + 'Predicted Positive' + 'Predicted Negative' + '' + '' + 'Actual Positive' + 'TP = ' + tp + '' + 'FN = ' + fn + '' + '' + 'Actual Negative' + 'FP = ' + fp + '' + 'TN = ' + tn + '' + '';
// ── Results Table ───────────────────────────────────────────────────────── var rows = [ ['Accuracy', pct(accuracy), fmt(accuracy)], ['Precision (PPV)', pct(precision), fmt(precision)], ['Recall / Sensitivity', pct(recall), fmt(recall)], ['Specificity (TNR)', pct(specificity), fmt(specificity)], ['F1 Score', pct(f1), fmt(f1)], ['Balanced Accuracy', pct(balancedAcc), fmt(balancedAcc)], ['MCC', fmt(mcc), ''], ['False Positive Rate', pct(fpr), fmt(fpr)], ['False Negative Rate', pct(fnr), fmt(fnr)], ['Neg. Predictive Value', pct(npv), fmt(npv)], ['False Discovery Rate', pct(fdr), fmt(fdr)], ["Informedness (Youden's J)", fmt(informedness), ''], ['Markedness', fmt(markedness), ''], ];
var tableHtml = '' + '' + 'Metric' + 'Value (%)' + 'Decimal' + '';
for (var i = 0; i ' + '' + rows[i][0] + '' + '' + rows[i][1] + '' + '' + rows[i][2] + '' + ''; } tableHtml += '';
resultDiv.innerHTML = 'Total Samples: ' + total + '' + matrixHtml + tableHtml; }
#### Formulas
Given: TP (True Positives), FP (False Positives), FN (False Negatives), TN (True Negatives), N = TP + FP + FN + TN
- Accuracy = (TP + TN) / N
- Precision (PPV) = TP / (TP + FP)
- Recall / Sensitivity (TPR) = TP / (TP + FN)
- Specificity (TNR) = TN / (TN + FP)
- F1 Score = 2 × (Precision × Recall) / (Precision + Recall)
- Balanced Accuracy = (Sensitivity + Specificity) / 2
- MCC = (TP×TN − FP×FN) / √[(TP+FP)(TP+FN)(TN+FP)(TN+FN)]
- False Positive Rate (FPR) = FP / (FP + TN)
- False Negative Rate (FNR) = FN / (FN + TP)
- Negative Predictive Value (NPV) = TN / (TN + FN)
- False Discovery Rate (FDR) = FP / (FP + TP)
- Informedness (Youden's J) = Sensitivity + Specificity − 1
- Markedness = Precision + NPV − 1
#### Assumptions & References
- Applies to binary classification problems only (positive vs. negative class).
- All four inputs (TP, FP, FN, TN) must be non-negative integers.
- Metrics that require division are reported as N/A when the denominator is zero (e.g., Precision is N/A when TP + FP = 0).
- MCC ranges from −1 (total disagreement) to +1 (perfect prediction); 0 indicates random prediction. It is considered a balanced metric even for imbalanced datasets.
- F1 Score is the harmonic mean of Precision and Recall; it is preferred over accuracy for imbalanced datasets.
- Youden's J (Informedness) measures the probability that a prediction is informed versus chance.
- References: Fawcett (2006) An introduction to ROC analysis, Pattern Recognition Letters; Powers (2011) Evaluation: From Precision, Recall and F-Measure to ROC, Informedness, Markedness & Correlation, JMLR.
More Calculators
- Illinois Climate Zone Heat Load Calculator
- Kansas Utility Cost Estimator — Heating vs Cooling Season
- HVAC Equipment Sizing Calculator (Manual J Estimator)
- Kansas Climate Zone Heat Loss Calculator
- AC Unit Sizing Calculator for LA Heat
- Indoor Air Quality Ventilation Rate Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...