ROC-кривая (Receiver Operating Characteristic) — графическое представление зависимости долю истинно положительных срабатываний (TPR) от доли ложноположительных срабатываний (FPR) при различных порогах классификации. Она используется для оценки качества бинарного классификатора независимо от выбранного порога.
AUC (Area Under Curve) — площадь под ROC-кривой. Значение AUC лежит в диапазоне от 0 до 1:
Для ручного построения ROC-кривой необходимы два массива:
const predictions = [0.1, 0.4, 0.35, 0.8];
const labels = [0, 0, 1, 1];
ROC строится по порогам, заданным на основе предсказанных вероятностей. Сначала массивы сортируются по убыванию вероятностей:
const combined = predictions.map((p, i) => ({ p, label: labels[i] }));
combined.sort((a, b) => b.p - a.p);
const sortedLabels = combined.map(x => x.label);
const sortedPredictions = combined.map(x => x.p);
TPR (True Positive Rate) и FPR (False Positive Rate) рассчитываются на каждом пороге:
const P = labels.filter(l => l === 1).length; // всего положительных
const N = labels.filter(l => l === 0).length; // всего отрицательных
let TP = 0;
let FP = 0;
const tpr = [];
const fpr = [];
for (let i = 0; i < sortedLabels.length; i++) {
if (sortedLabels[i] === 1) TP++;
else FP++;
tpr.push(TP / P);
fpr.push(FP / N);
}
Для визуализации ROC-кривой можно использовать любую графическую библиотеку, например, Chart.js:
const ctx = document.getElementById('rocChart').getContext('2d');
new Chart(ctx, {
type: 'line',
data: {
labels: fpr,
datasets: [{
label: 'ROC-кривая',
data: tpr,
borderColor: 'blue',
fill: false
}]
},
options: {
scales: {
x: { title: { display: true, text: 'FPR' } },
y: { title: { display: true, text: 'TPR' } }
}
}
});
AUC вычисляется как площадь под кривой, что удобно делать методом трапеций:
let auc = 0;
for (let i = 1; i < fpr.length; i++) {
const width = fpr[i] - fpr[i - 1];
const height = (tpr[i] + tpr[i - 1]) / 2;
auc += width * height;
}
console.log('AUC:', auc);
Keras.js позволяет загружать модели, экспортированные из Keras в
формате model.json, и выполнять предсказания прямо в
браузере:
const KerasJS = require('keras-js');
const model = new KerasJS.Model({
filepath: 'model.json',
gpu: true
});
await model.ready();
const inputData = new Float32Array([/* признаки */]);
const output = await model.predict({ input: inputData });
const predictionsFromModel = output.output;
После получения массива предсказанных вероятностей можно использовать описанные выше шаги для построения ROC и расчета AUC.