Atribuindo mais peso a observações mais recentes em regressão

9

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?

user3788557
fonte
3
Faça uma votação fechada, pois o interlocutor precisa esclarecer as questões estatísticas. Não está claro para mim que GBN ou RF são apropriados aqui. Sugerindo que isso seja migrado para o CV.com
DWin 10/10
Está bem. Vou adicionar um exemplo em breve. Eu vejo esse tipo de pergunta em toda a Internet, mas não há exemplos concretos de como aplicá-lo / resolvê-lo.
User3788557

Respostas:

5

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 como W=K*exp(-timeElapsed/T), onde Ké uma constante de escala e Té a constante de tempo para a função de decaimento. Wfunciona como peso da caixa.

De acordo com o meu conhecimento, muitas funções caretpermitem que, weightcomo parâmetro, uma coluna de pesos de caso seja fornecida para a observação correspondente (tendo, assim, o mesmo comprimento que #rows).

Ujjwal Kumar
fonte
11
A função em caret::trainé weights.
timcdlucas
Obrigado Ujjwal - mas qual é a metodologia para determinar 'K' na sua equação? quaisquer diretrizes ou melhores práticas? Além disso, o que você quer dizer com 'período de tempo' para a função decaimento?
User3788557
K é apenas uma constante de escala e não afetará muito os resultados do modelo. Você pode definir algum valor para que o intervalo de valores de peso da caixa esteja próximo do intervalo de 0 a 1. Em relação ao "período de tempo", também é chamado de constante de tempo para uma função de decaimento exponencial de 1ª ordem OU tempo médio de vida. Você pode procurar na wikipedia.
Ujjwal Kumar
Por favor, veja minha atualização no meu post. Isso funcionará corretamente durante o treinamento? O modelo de treinamento terá um viés, pois os pesos só podem ser aplicados quando usados ​​no conjunto de testes? Quando o conjunto de treinamento é aleatoriamente embaralhado, pode ser ruim se pesos mais altos forem usados ​​para prever preços no passado ou contra um período de tempo que não está próximo no tempo.
user3788557
Sem pesos de caso, o treinamento do seu modelo daria igual importância aos dados antigos e novos, mas com pesos de caso propostos, ele dará mais importância aos dados mais recentes, portanto, nesse sentido, é tendencioso para observações mais recentes, mas isso é o que você queria. Não entendo por que "pesos só podem ser permitidos para casos de teste" . Além disso, como pesos mais altos seriam usados ​​para valores mais antigos quando o conjunto de treinamento é aleatoriamente embaralhado? quando o modelTime é mantido o mesmo para todos os casos de treinamento. As ponderações de caso PS não se aplicam apenas ao usar um modelo, é aplicável apenas ao período de treinamento.
Ujjwal Kumar 23/02
0

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.

IrishStat
fonte