У меня есть два массива.
Я хочу процентное значение, которое описывает, насколько их значения различны.Я пытаюсь использовать MSE и RMSE:
/**
* Mean Squared Error
* MSE = (1/n) * Ʃ[(r - p)^2]}
*/
export function computeMse(a, b) {
const size = a.length
let error = 0
for (let i = 0; i < size; i++) {
error += Math.pow(b[i] - a[i], 2)
}
return (1 / size) * error
}
/**
* Root Mean Squared Error
* RMSE = √MSE
*/
export function computeRmse(a, b) {
return Math.sqrt(computeMse(a, b))
}
и:
const a = [2354493, 2615706, 1594281, 1570894, 1930709, 2086681]
const b = [2354493, 2224360.55, 1906806.9, 1408769.93, 1609053.96, 2200698.72]
const mse = computeMse(a, b)
const rmse = computeRmse(a, b)
Результат:
mse: 65594986451.87959
rmse: 256115.18200192583
Не думаю, что этот результат верный,Прежде всего, mse и rmse не находятся в диапазоне [0, 100], а затем имеют очень большие значения, даже если два массива не так уж отличаются.
В чем я не прав?
Я также пытаюсь:
export function computeMape(actual, forecast) {
const size = actual.length
let error = 0
for (let i = 0; i < size; i++) {
error += Math.abs((actual[i] - forecast[i]) / actual[i])
}
return (100 * error) / size
}
с:
const a = [77, 50, 38, 30, 26, 18]
const b = [77, 81.13, 92.77, 101.98, 119.76, 121.26]
И я получаю mape: 230.10116059379217
...
Другой пример:
const a = [1.15, 1.09, 1.08, 0.78, 0.51, 0.44]
const b = [1.15, 1.61, 1.88, 2.13, 2.3, 2.47]
const mape = computeMape(a, b) // result: 184.53357461497413
Предположим, у вас есть три набора данных:
Красная линия представляет реальные данные, пунктирная зеленая линия представляетданные прогноза, созданные пользователем (тест 1) и пунктирная серая линия представляют данные прогноза, созданные пользователем (тест 2).Фактически пользователь может пытаться использовать разные моменты времени для получения реальных данных (это похоже на игру).
Теперь я хотел бы вернуть пользователю обратную связь, сообщающую пользователю, насколько он ошибался, чтобы угадать динамику данных.в процентах.
Пользователь может делать многочисленные прогнозы.Я хотел бы, чтобы процентное значение сообщало мне, насколько пользователь ошибся, чтобы сравнить каждую попытку.
Возможно ли что-то подобное?
Также в этом случае яполучить NaN результат:
const a = [132.6, 114.1, 134.5, 124.5, 144.4, 162.4]
const b = [132.6, 134.15, 134.15, 134.15, 139.19]
Почему?