Розрахунок точності прогнозу


9

Ми використовуємо STL (реалізація R) для прогнозування даних часових рядів.

Щодня ми проводимо щоденні прогнози. Ми хотіли б порівняти прогнозні значення з реальними значеннями та виявити середнє відхилення. Наприклад, ми склали прогноз на завтра і отримали прогнозні бали, ми хотіли б порівняти ці точки прогнозу з реальними даними, які ми отримаємо завтра. Мені відомо, що прогнозні значення та реальні дані можуть не збігатися в більшості випадків, і це одна з причин, за якими ми хотіли б відстежувати, наскільки точними ми є щодня.

Зараз ми намагаємось визначити, який найкращий підхід для вирішення цієї проблеми? будь-які вказівки на допомогу будуть вдячні.

Я розглянув питання щодо вимірювання точності прогнозування , але, схоже, це пов’язано зі порівнянням моделей, а не обчисленням точності з реальними значеннями.

Я переглянув реалізацію функції точності в R , але переплутав два питання:

1) Чи буде працювати над реальними даними та прогнозними даними, оскільки більшість підручників говорять як "тестові дані" проти "прогнозні дані"

2) Здається, функцією точності є масив значень, а не% відхилення.


1
Для того, щоб отримати чудову відповідь, ви повинні задати правильне запитання - і це може бути неприємно. Кожен хоче керувати світом, і це вимагає передбачення. Якби я мав досконалі знання про завтрашні запаси, але мав би це сьогодні, то я міг би заробити тону грошей / сили / можливості / слави / тощо. Якби я розглядав вашу проблему, то я хотів би побачити гістограму (або eCDF) помилки прогнозування. Я, можливо, хотів би "тремтіти" вхідні дані прогнозу і переглянути його середнє значення та варіацію, а також порівняти помилку з такою. Ви повинні зрозуміти свою помилку, щоб її виправити.
EngrStudent

1
Для непосвячених, що таке STL?
shadowtalker

@EngrStudent: "Ви повинні зрозуміти свою помилку, щоб її виправити" - У цьому самому твердженні ми маємо дві частини. Я намагаюся з’ясувати можливі підходи для самого першого розділу. Вибрана нами методика допоможе мені у виборі стратегій для
другої

1
Середнє - це не те саме, що поводиться система. Стандартне відхилення - це не те саме, що поводиться система. Ці два заходи - це підсумкова статистика вимірюваної поведінки системи. Помилка - це не точність. Помилка не є невизначеністю. Ці два заходи є сумарною статистикою помилок, аналогічних середньому та стандартному відхиленням. Так само, як існує безліч нескінченностей заходів поведінки системи, існує безліч нескінченностей заходів поведінки помилок. Яка ваша рубрика? як виміряти хороший спосіб думати про помилку?
EngrStudent

1
@Nambari - ласкаво просимо у світ "мудрих". Початок знань - знати, що ти нічого не знаєш - бути студентом. Я намагаюся завжди вчитися самому і намагаюся бути коригувальним будь-хто, хто говорить правду. Якщо ви граєте з інструментом Eureqa і приміряєте відповідні вибіркові дані як у загальній формі "цільового вираження", так і в кожній "метриці помилок", ви почнете знати цю глибоку глибоку річ. Я не маю гарної відповіді. L'Hospital (він же L'Hopital) сформулював перший вираз з найменшим квадратом у 1696 році. Хорошим початком є ​​випадок вживання - де приходить розум. Що це?
EngrStudent

Відповіді:


13

Існує багато різних способів вимірювання точності прогнозу, а accuracy()функція з пакету прогнозів для R виводить декілька з них. З вашого коментаря про "% відхилення" вам здається, що ви хочете використовувати середню абсолютну помилку відсотка, що є одним із заходів, передбачених accuracy(). Тут обговорюються найпоширеніші заходи точності прогнозу . Ви можете подумати, чи MAPE є найбільш підходящим заходом для вашої проблеми, чи краще один із інших заходів.

accuracy()Функція робить роботу на реальних даних. "Тестові дані" - це ті дані, які не були використані для складання прогнозів. Іноді вони доступні, але не використовуються при обчисленні прогнозів (класичний поділ даних на навчальні та тестові набори). В інших ситуаціях всі наявні дані використовуються для обчислення прогнозів, і тоді вам доведеться почекати, поки будуть доступні деякі майбутні спостереження, які можна використовувати в якості тестових даних.

Отже, якщо fвектор прогнозів і xвектор спостережень, відповідних тим самим часом, то

accuracy(f,x)

зробить те, що ти хочеш.


"Заходи, засновані на відсоткових помилках, мають недолік бути нескінченними або невизначеними, якщо yi = 0 для будь-якого i в період, що цікавить, і мають крайні значення, коли будь-яка врожайність близька до нуля." Я думаю, що це буде проблемою в моєму випадку, оскільки багато справжніх справ може бути ZERO. Я думаю обчислити MAE і змінити кількість результатів на "відсоток". Чи є сенс?
коса

Якось моя подячна записка минула, дуже дякую за ваш час, доктор Хайдман!
коса

2

Спочатку давайте уточнимо, що існують поняття точності та точності. Точність зазвичай пов'язана з упередженістю, тобто систематичним відхиленням прогнозу від фактичного значення. Точність зазвичай пов'язана з дисперсією помилок прогнозу. Приблизно так: проти . Отже, коли ви згадуєте про "точність" у своєму дописі, знали про відмінність?Accuracy=E(f)yPrecision=Var[fy]

По-друге, є інтегровані заходи якості прогнозу, такі як , де та - прогнози та факти. Існують статистичні дані щодо цього заходу, наприклад, тест Чоу на сталість параметрів.MSFE=1ni=1n(fiyi)2fiyi


Дякую за відповідь! Так, я зараз не переживаю за точність. Просто хочу знати точність, "відхилення прогнозу від фактичних показників". Я не турбуюся про те, що кілька моделей обчислюють помилки прогнозу та вибирають найкращу модель. Моя єдина мета - виявити відхилення між фактичними та прогнозованими значеннями. Наша модель тут постійна. Незалежно від нашої моделі це добре чи погано для набору даних, нам просто потрібна кількість відхилень. Це питання не пов'язане з вибором моделі тонкої настройки (або) параметрів. Сподіваюся, зараз мені все зрозуміло. Будь ласка, дайте мені знати, якщо чогось немає.
коса

@Nambari, якщо вам потрібна "кількість відхилень", чому б вам не використати кількість відхилень? Зробіть цикл над прогнозами, порівняйте їх з реальними значеннями та підрахуйте кількість випадків, коли прогнози відрізняються від реальних.
Роман

2

Я робив це в R, ось мій код моїх даних як для вибіркових, так і для вибіркових даних:

#accuracy testing for out-of-sample sample#

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
N<-head(M,-horiz)
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)

#Run your forecasting method#
##My forecasting method is arima##

N<-#data#
N<-ts(N,deltat=deltaT,start=startY)
N<-tail(N,horiz)
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY) #where Arimab is the ARIMA model and fArimab<-forecast(Arimab, h=horiz*2, simulate= TRUE, fan=TRUE)
N<-log(N)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA out sample")

#Accuracy testing for the in sample

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)
#run your forecasting method#
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY)
N<-exp(Nu)
fitted<-exp(fitted)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA in sample")

сподіваюся, що це трохи допомагає. якщо ви хочете мій повний код, який я використовував для запуску цього, будь ласка, запитайте, як це дуже просто


1

Коротка відповідь: щоб оцінити якість своїх прогнозів, використовуйте точно той самий захід, який ви використовували при навчанні (підгонці) своєї моделі.

Довга відповідь:

Для того щоб вибрати міру для точності ваших прогнозів, спочатку потрібно знати, як ви інтерпретуєте ваші прогнози. Іншими словами, що ви насправді даєте як "прогноз"? Це середня цінність? Медіана? Найбільш вірогідне значення? Відповідь на це питання однозначно визначить міру точності прогнозу. Якщо ви прогнозуєте середнє значення, ви повинні використовувати кореневе середнє квадратне відхилення як міру точності прогнозу. Якщо ви прогнозуєте медіану, вам слід використовувати середнє абсолютне відхилення як міру точності.

Я детальніше докладу до цього питання. Припустимо, ви зробите прогноз / прогноз на завтра. Припустимо також, що для будь-якого значення, яке ви можете побачити завтра, у вас є відповідна ймовірність дотримання. Наприклад, ви знаєте, що ви можете спостерігати 1 з вірогідністю 0,03, 2 з ймовірністю 0,07, 3 з ймовірністю 0,11 і так далі. Отже, у вас є розподіл ймовірностей за різними значеннями. Маючи цей розподіл, ви можете обчислити різні властивості та дати їх як свої "прогнози". Ви можете обчислити середнє значення і дати це як прогноз на завтра. Крім того, ви можете використовувати медіану як свій прогноз. Ви також можете знайти найбільш ймовірне значення і дати це як свій прогноз на завтра.

Якщо ви використовуєте середнє значення як передбачення, то питання "як виміряти точність мого прогнозу" слід замінити на "яка міра точності для середнього", а відповідь - "середнє квадратне відхилення між значенням реальні цінності та передбачення ". Якщо ви використовуєте медіану в якості прогнозів, вам доведеться використовувати середнє абсолютне відхилення.

Можливо, ви не знаєте, чи використовуєте ви медіану, середню чи щось інше. Щоб дізнатися, що ви насправді використовуєте в якості прогнозів, ви повинні знати, яку міру ви намагаєтеся мінімізувати під час тренувань. Якщо ви спробуєте знайти параметри моделі, що мінімізують середнє квадратне відхилення між прогнозами та цільовими значеннями від тренувальних даних, то ваші прогнози повинні розглядатися як середні. Якщо ви мінімізуєте абсолютні відхилення, то ви навчаєте свою модель для надання медіанів тощо.

ДОБАВЛЕНО

Я хотів би підкреслити одне. Як я вже згадував вище, важливо зберігати однакову міру точності як у «підходящому», так і в «передбачуваному». На додаток до цього, я хочу сказати, що ви абсолютно вільні у виборі своїх заходів. Жодних «кращих» чи «гірших» заходів немає. Захід повинен визначатися тим, як ви (або ваш клієнт) використовуєте свої прогнози. Наприклад, може бути дуже важливим (для вас або вашого клієнта) мати точну відповідність, і якщо у вас її немає, вона не відіграє жодної ролі, якщо різниця між реальними і прогнозованими значеннями велика або мала. В інших випадках ця різниця відіграє певну роль. Різниця в 1 краще, ніж різниця 2. У деяких випадках різниця у 2 в 2 рази гірша, ніж різниця в 1. В інших випадках різниця, що дорівнює 2, в 100 разів гірша за різницю, рівну 1. Ви також можете уявити екзотичні випадки, в яких вам потрібно створити значення, яке відрізняється від спостережень. Отже, міряти якість створених цифр можна будь-чим, що залежно від того, що вам потрібно. Що важливо, це використовувати один і той самий захід у навчанні (придатності) та оцінці прогнозів.


(Зв'язано з вашим коментарем до іншої відповіді) У більшості випадків прогнози відрізняються від реальних значень, я не думаю, що в будь-якому випадку ми можемо отримати ідеальну форму. Отже, підхід, який ви запропонували, може бути не ідеальним, тому що ми отримаємо 100%. Але те, що я думаю, це отримати різницю між фактичним та прогнозуванням у відсотках, що є не що інше, як MAPE. У випадку, з яким ми звертаємося, є дуже високі шанси на реалізацію ZERO дуже часто через обставини, і в такому випадку MAPE може бути не найкращим варіантом, оскільки відсоток буде БЕЗПЕЧНИМ. Тут я застряг.
коса

Я знаю, що MAPE - це принцип, якого я хочу, але мій набір даних має цей нещасний випадок, коли РЕАЛЬНІ значення в серії можуть бути ZERO дуже часто.
коса
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.