Оценка и ранжирование моделей в R

Я занимаюсь прогнозным моделированием многомерных данных временных рядов в R с использованием различных моделей, таких как Arima, H2O.Randomforest, glmnet, lm и некоторых других моделей.

Я создал функцию, чтобы выбрать модель по нашему выбору и сделать прогноз.

Model1 <- function(){
  ..
  return()
}
Model2 <- function(){
  ...
  return()
}
 Model3 <- function(){
  ...
  return()
}
main <- function(n){
  if(n == 1) {
   Model1()
  }
  else if(n == 2){
    Model2()
  }
  else if(n == 3){
    Model3()  
  }}

Теперь я должен автоматизировать эти модели, что дает RMSE и MAPE, обнаруживая точность между предсказанным и наблюдаемым значением. Я хотел бы дать оценку (например, из 5) для каждого на основе производительности. Например, если Arima дает низкую RMSE, чем другие модели, она будет оценена высоко, а вторая модель RMSE с наименьшей оценкой получит менее Arima и так далее.

И каждый раз, когда я запускаю эти модели с разными входными данными, они должны давать средний балл модели. то, что я хочу сказать,

1. for model1 it will give scores of each model, let's say *s1*.
2. for model2 run it give scores of each model, and let's call it *s2*. 

И мне нужен средний балл этой модели каждый раз, когда я запускаю ее с разными входными данными. Это больше похоже на метод подсчета очков и ранжирования.

Есть ли в R какие-либо методы или пакеты, которые могут дать представление о том, как это делается? или какие-нибудь примеры? Любые предложения были бы очень полезны. Я даже поделился своим вопросом здесь на проверке Cross.

Спасибо.


person dhinar    schedule 07.07.2017    source источник
comment
Просто чтобы уточнить: у вас есть некоторый фрейм данных / матрица с n наблюдениями для m временных рядов для j двигателей motor1, motor2, ... motorj? Вы хотите автоматизировать задачу 1) подгонки нескольких моделей к данным motor1, motor2, ... motorj 2) ранжировать модели по степени соответствия с RMSE / MAPE и 3) возвращать j списки с ранжированием моделей для j входных двигателей?   -  person Numb3rs    schedule 07.07.2017
comment
да. я могу использовать rank() для ранжирования методов. но я хочу дать оценку (например, из 5) каждой модели на основе ее значения RMSE / MAPE, например, оценочных карточек.   -  person dhinar    schedule 07.07.2017


Ответы (1)


Насколько мне известно, не существует единого пакета, который сделал бы все это за вас без некоторой работы с вашей стороны. Вам нужно будет искать пакеты, которые предоставляют способы делать то, что вам нужно.

Поскольку вы не предоставили никаких воспроизводимых данных и только озвучили общее представление о том, что вы хотели бы в качестве примера, я могу дать вам только общее представление о том, чего ожидать, как я буду делать такие вещи и какие проблемы вы, скорее всего, встретит:

1. Установка модели

Вы должны иметь хорошее представление о том, как вы хотите подогнать модели к данным. Возьмем, к примеру, ARIMA: у него три заказа (p, d, q). В каком порядке вы хотите разместить свои данные? Простая модель ARIMA (1,0,1)? Или вам нужен более высокий заказ? Опять же, есть методы наилучшего соответствия. E. грамм. подбирая различные заказы, а затем выбирая порядок с лучшим (самым низким) AIC. Эта статья с сайта Quantstart - хороший пример одномерного ряда + пример кода для оценки различных заказов и выбора наиболее подходящего.
Проверьте, в какой степени вам нужно настроить это для других ваших моделей (H2O.Randomforest, glmnet , lm и т. д.). Настройте этот процесс в functions.

2. Выбор модели

Итак, на шаге 1 вы приспособили свои различные модели к данным временных рядов и получили разные результаты. Теперь вам нужно объединить критерии согласия (RMSE / MAPE) в списке / векторе. Либо они уже являются частью объекта вывода из вашей соответствующей модели, либо вам нужно вычислить их самостоятельно. Тем лучше, если они уже участвуют в процессе оценки. В рамках функции для оценки процесса добавьте, если необходимо, вычисление, а затем добавьте результаты для модели в ранее упомянутый список / вектор.
Ранжируйте список по желаемым критериям (по возрастанию / убыванию и наивысшему / самый низкий) и дайте этот список в качестве вывода. Кроме того, вы, вероятно, захотите добавить результаты наилучшего соответствия, что вы можете сделать, добавив к выходным данным результат с самым высоким рейтингом.


Опять же, без конкретных примеров кода и проблем, с которыми вы сталкиваетесь, вам трудно помочь. Попробуйте настроить что-то конкретное, и если вы столкнетесь с конкретными проблемами, вы всегда можете попросить о помощи здесь. Предоставление фиктивных данных и кода, который вы использовали, значительно повысит ваши шансы на решение ваших проблем.

person Numb3rs    schedule 07.07.2017