Как мне придать больший вес более поздним наблюдениям в R?
Я предполагаю, что это часто задаваемый вопрос или желание, но мне трудно понять, как именно это реализовать. Я пытался много искать для этого, но я не могу найти хороший практический пример.
В моем примере у меня будет большой набор данных со временем. Я хочу сказать, применить некоторый экспоненциальный вес строк данных, которые являются более свежими. Таким образом, у меня была бы какая-то экспоненциальная функция, говорящая, что наблюдения в 2015 году ___ более важны для обучения модели, чем наблюдения в 2012 году.
Мои переменные набора данных содержат сочетание категориальных и числовых значений, а моя цель - числовое значение, если это имеет значение.
Я хотел бы проверить / опробовать это, используя такие модели, как GBM / Random Forest, в идеале в пакете CARET.
обновление-вопрос
Я благодарен за приведенный ниже ответ о том, как экспоненциально уменьшить вес на расстояние между двумя точками.
Однако, когда дело доходит до обучения этой модели в карете, как именно учитывается вес? Значение веса в каждом из тренировочных рядов - это расстояние между некоторой точкой в будущем и историческим моментом, когда эта точка возникла.
Веса вступают в игру только во время предсказания? Потому что, если они вступят в игру во время тренировки, не вызовет ли это всевозможных проблем, поскольку различные перекрестные сгибы будут иметь различный вес, пытаясь предсказать что-то, что может действительно иметь место в определенный момент времени до этого?
источник
Ответы:
Как мне придать больший вес более поздним наблюдениям в R?
Я думаю, у вас есть временная метка, связанная с каждым наблюдением. Вы можете вычислить переменную
timeElapsed = modelingTime - observationTime
. Теперь вы применить простую экспоненциальную функцию , какW=K*exp(-timeElapsed/T)
, гдеK
есть постоянное масштабирование иT
является постоянная время для функции распада.W
работает как case-weight.Насколько мне известно, многие функции
caret
позволяют использоватьweight
в качестве параметра, который является столбцом весовых коэффициентов, которые должны быть предоставлены соответствующему наблюдению (таким образом, имеют такую же длину, что и #rows).источник
caret::train
томweights
.Данные (а не предположения аналитика, делающие предположения) часто могут предложить форму схемы взвешивания. Это делается с помощью GLS, где соответствующие веса для модели взвешенных наименьших квадратов получены из статистически значимых различий, найденных в дисперсии ошибок. Посмотрите на Обнаружение изменений и выбросов с помощью ARIMA (процедура Цай) и здесь http://docplayer.net/12080848-Outliers-level-shifts-and-variance-changes-in-time-series.html . Если вы хотите опубликовать данные, сделайте это здесь, и я постараюсь помочь вам, поскольку у меня есть обычный доступ к программному обеспечению, которое может вас просветить.
Существует версия R программного обеспечения, которое я использую.
Вы можете посмотреть на Как включить управляющие переменные в анализ вмешательства с ARIMA? поскольку в нем есть пример того, как веса идентифицируются и используются для стабилизации дисперсии ошибок, таким образом, эффективно верят / не верят / отбрасывают / взвешивают / доверяют некоторым предшествующим значениям.
источник