Como atribuo mais peso a observações mais recentes em R?
Eu assumo isso como uma pergunta ou desejo comumente solicitado, mas tenho dificuldade em descobrir exatamente como implementar isso. Eu tentei procurar muito por isso, mas não consigo encontrar um bom exemplo prático.
No meu exemplo, eu teria um grande conjunto de dados ao longo do tempo. Quero dizer aplicar algum tipo de ponderação exponencial das linhas de dados mais recentes. Então, eu teria algum tipo de função exponencial dizendo que as observações em 2015 são ___ mais importantes para treinar o modelo do que as observações em 2012.
Minhas variáveis de conjunto de dados contêm uma mistura de valores categóricos e numéricos e meu destino é um valor numérico - se isso importa.
Gostaria de testar / experimentar isso usando modelos como GBM / Random Forest, idealmente no pacote CARET.
update-question
Agradeço a resposta dada abaixo sobre como diminuir exponencialmente o peso pela distância da data entre dois pontos.
No entanto, quando se trata de treinar esse modelo em sinal de intercalação, como exatamente os pesos são considerados? O valor do peso em cada uma das linhas de treinamento é a distância entre algum ponto no futuro e quando esse ponto ocorreu historicamente.
Os pesos entram em jogo apenas durante a previsão? Porque se eles entrarem em jogo durante o treinamento, isso não causaria todo tipo de problemas, já que várias dobras cruzadas teriam pesos variados, tentando prever algo que possa ter realmente em algum momento antes dele?
fonte
Respostas:
Como atribuo mais peso a observações mais recentes em R?
Eu acho que você tem um timestamp associado a cada observação. Você pode calcular uma variável
timeElapsed = modelingTime - observationTime
. Agora você aplica uma função exponencial simples comoW=K*exp(-timeElapsed/T)
, ondeK
é uma constante de escala eT
é a constante de tempo para a função de decaimento.W
funciona como peso da caixa.De acordo com o meu conhecimento, muitas funções
caret
permitem que,weight
como parâmetro, uma coluna de pesos de caso seja fornecida para a observação correspondente (tendo, assim, o mesmo comprimento que #rows).fonte
caret::train
éweights
.Os dados (não o analista que faz suposições - suposições) geralmente podem sugerir a forma do esquema de ponderação. Isso é feito via GLS, onde os pesos apropriados para o modelo de mínimos quadrados ponderados são obtidos a partir das diferenças estatisticamente significativas encontradas na variação de erro. Dê uma olhada na alteração e detecção de outliers por meio do ARIMA (procedimento Tsay) e aqui http://docplayer.net/12080848-Outliers-level-shifts-and-variance-changes-in-time-series.html . Se você deseja publicar dados, faça-o aqui e tentarei ajudar mais, pois tenho acesso rotineiro ao software que pode esclarecê-lo.
Existe uma versão R do software que estou usando.
Você pode ver Como incluir variáveis de controle em uma análise de intervenção com o ARIMA? como ele tem um exemplo de como os pesos são identificados e usados para estabilizar a variação do erro, acreditando efetivamente / desacreditando / descontando / ponderando / confiando em certos valores anteriores.
fonte