Suporte à regressão vetorial para previsão de séries temporais multivariadas

22

Alguém tentou a previsão de séries temporais usando a regressão de vetores de suporte?

Entendo máquinas de vetores de suporte e entendo parcialmente a regressão de vetores de suporte, mas não entendo como elas podem ser usadas para modelar séries temporais, especialmente séries temporais multivariadas.

Eu tentei ler alguns papéis, mas eles são de nível muito alto. Alguém pode explicar em termos leigos como eles funcionariam, especialmente em relação a séries temporais multivariadas?

Edição: Para elaborar um pouco, deixe-me tentar explicar com um exemplo de preço das ações.

Digamos que temos preços de ações por N dias. Então, para cada dia, poderíamos construir um vetor de característica, que, em um caso simples, poderia ser o preço do dia anterior e o preço do dia atual. A resposta para cada vetor de recurso seria o preço do dia seguinte. Assim, dado o preço de ontem e o preço de hoje, o objetivo seria prever o preço dos próximos dias. O que não entendo é que, digamos que temos seis meses de dados de treinamento, como você daria maior ênfase aos vetores de recursos mais recentes?

contador de histórias
fonte
Você pode postar os artigos que você está se referindo?
Ahluwalia Ram 18/08
1
Previsão de séries temporais com uma máquina de regressão vetorial de suporte local, Rodrigo Fernandez, svms.org/regression/Fern.pdf Suporte à regressão vetorial para previsões financeiras de séries temporais, Wei Hao e Songnian Yu, springerlink.com/index/946802600u4552m8.pdf
raconteur

Respostas:

18

No contexto da regressão do vetor de suporte, o fato de seus dados serem uma série temporal é principalmente relevante do ponto de vista metodológico - por exemplo, você não pode fazer uma validação cruzada k-fold e precisa tomar precauções ao executar backtests / simulações.

Basicamente, a regressão do vetor de suporte é uma técnica de regressão discriminativa, semelhante a qualquer outra técnica de regressão discriminativa. Você fornece a ele um conjunto de vetores de entrada e respostas associadas e ele se encaixa em um modelo para tentar prever a resposta, considerando um novo vetor de entrada. O SVR do kernel, por outro lado, aplica uma das muitas transformações ao seu conjunto de dados antes da etapa de aprendizado. Isso permite captar tendências não lineares no conjunto de dados, diferentemente, por exemplo, da regressão linear. Um bom núcleo para começar provavelmente seria o RBF Gaussiano - ele terá um hiperparâmetro que você pode ajustar, portanto, experimente alguns valores. E então, quando sentir o que está acontecendo, poderá experimentar outros kernels.

Com uma série temporal, uma etapa de importação é determinar qual será o seu "vetor de recursos" ; cada é chamado de "recurso" e pode ser calculado a partir de dados presentes ou passados, e cada , a resposta, será a mudança futura ao longo de algum período do que você estiver tentando prever. Faça um estoque, por exemplo. Você tem preços ao longo do tempo. Talvez seus recursos sejam a.) O spread de 200MA a 30MA eb.) Volatilidade de 20 dias, para que você calcule cada em cada ponto no tempo, juntamente comxxiyixtyt, o (digamos) retorno da semana seguinte sobre esse estoque. Assim, seu SVR aprende como prever o retorno da semana seguinte com base no atual spread de MA e no volume de 20 dias. (Essa estratégia não funcionará, então não fique muito animado;)).

Se os artigos que você leu foram muito difíceis, provavelmente não deseja implementar você mesmo um SVM, pois isso pode ser complicado. No IIRC, existe um pacote "kernlab" para R que possui uma implementação do Kernel SVM com vários kernels incluídos, de forma que seria uma maneira rápida de começar a funcionar.

William
fonte
@ Jason, obrigado pela resposta. Estou confuso sobre como tornar os dados mais antigos menos importantes durante o treinamento, ou seja, como dar importantes aos últimos digamos 100 exemplos, em vez dos últimos 10.000 exemplos. Além disso, tenho alguma experiência trabalhando com SVMs em Python, então estou procurando usá-lo.
19411 raconteur
Você não pode realmente usar todos os dados anteriores como seu vetor de recurso; você precisa transformá-lo de alguma forma em um recurso significativo. Por exemplo, considere calcular a média dos 20 valores passados ​​da série temporal ou o valor atual da série dividido pela média móvel. Esses são os recursos que indicam em um número simples uma característica de importação do conjunto de dados. Crie (digamos) 10 ou mais recursos que você acha que serão o mais preditivo possível. Portanto, para tornar os dados mais antigos menos importantes, você os tornaria menos importantes ao definir seus recursos (por exemplo, use médias móveis mais curtas).
William
@ Jason, deixe-me tentar explicar com um exemplo de preço das ações. Digamos que temos preços de ações por N dias. Então, para cada dia, poderíamos construir um vetor de característica, que, em um caso simples, poderia ser o preço do dia anterior e o preço do dia atual. A resposta para cada vetor de recurso seria o preço do dia seguinte. Assim, dado o preço de ontem e o preço de hoje, o objetivo seria prever o preço dos próximos dias. O que não entendo é que, digamos que temos seis meses de dados de treinamento, como você daria maior ênfase aos vetores de recursos mais recentes?
raconteur
2
Oh, entendo o que você quer dizer agora. A resposta curta é: você não pode, pelo menos não, sem reestruturar o SVM para entender a noção de recência. Um SVM é definido em termos de pares xy, não pares ordenados xy e, portanto, a função objetivo que minimiza é uma função dos referidos pares. OTOH, você pode executar vários SVMs separados, um no mês passado, um no ano passado e outro nos últimos dois anos - e, em seguida, faça uma média ponderada das respostas recebidas com base na sua preferência pessoal por vs recentes. dados antigos (por exemplo, 0,7 * mês passado + 0,2 * ano passado + 0,1 * últimos 2 anos).
William
@William .. você tem alguma recomendação sobre quais algoritmos de aprendizado de máquina seriam melhores para a previsão de séries temporais (o mesmo problema que o contador perguntou) além do SVM? a resposta seria diferente quando aplicada em domínio diferente? por exemplo, o preço das ações vs previsão cadeia de abastecimento (previsão da demanda dos produtos que estão vendendo) ..
Lam
1

Minha resposta pessoal à pergunta feita é "sim". Você pode vê-lo como um profissional ou um trapaceiro de que há um número infinito de opções de recursos para descrever o passado.Tente escolher recursos que correspondam a como você pode descrever concisamente a alguém o que o mercado acabou de fazer [por exemplo, "o preço está em 1,4 "não diz nada se não estiver relacionado a algum outro número]. Quanto à meta do SVM, as mais simples são a diferença de preços e a relação de preços por dois dias consecutivos. Como elas correspondem diretamente ao destino de um comércio hipotético, parecem boas escolhas.

Eu tenho que discordar pedantemente da primeira afirmação de Jason: você pode fazer a validação cruzada com dobras k em situações como a descrita por raconteur e é útil (com uma condição que explicarei). A razão pela qual é estatisticamente válida é que as instâncias do destino, neste caso, não têm relação intrínseca: são diferenças ou proporções desarticuladas. Se você optar por usar dados em resolução mais alta que a escala do destino, haveria motivos para preocupação de que instâncias correlatas possam aparecer no conjunto de treinamento e validação, o que comprometeria a validação cruzada (por outro lado, ao aplicar o método SVM, você não terá instâncias disponíveis cujos destinos se sobreponham àqueles nos quais você está interessado).

O que reduz a eficácia da validação cruzada é se o comportamento do mercado está mudando ao longo do tempo. Existem duas maneiras possíveis de lidar com isso. O primeiro é incorporar o tempo como um recurso (não achei muito útil, talvez porque os valores desse recurso no futuro sejam todos novos). Uma alternativa bem motivada é usar a validação direta (que significa testar sua metodologia em uma janela deslizante de tempo e testá-la no período imediatamente após esta janela. Se o comportamento estiver mudando ao longo do tempo, o ditado atribuído a Niels Bohr " A previsão é muito difícil, especialmente sobre o futuro "é especialmente apropriada. Há alguma evidência na literatura de que o comportamento dos mercados financeiros muda com o tempo, geralmente se tornando mais eficiente,

Boa sorte!

Elroch
fonte
Velcome ao nosso site!
b Kjetil Halvorsen
0

Há um exemplo no Quantum Financier para usar um SVM para prever séries financeiras. Pode ser facilmente convertido de um sistema de classificação (Longo / Curto) para um sistema de regressão.

Zach
fonte
1
CARO DEUS POR FAVOR, ninguém use essa estratégia! É assim que os novatos se fumados por Wall St :( O truque mais velho do livro é a adaptação de um modelo estatístico usando algum analítica técnica básica como RSI para que os newbs acham que golpeou o ouro.
William
1
@ Jason do post original "Também quero deixar claro que não acho que esse seja um bom sistema". No entanto, é um bom exemplo de como ajustar uma máquina de vetores de suporte a uma série temporal.
Zach