Confusion Matrix Metrics Calculator

ANALife Services AuthorityNational 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

#### Assumptions & References

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References