Sunday 9 July 2017

Algoritmo De Média Ponderada Em Movimento


Eu tenho uma série de tempo de preços de ações e desejo calcular a média móvel em uma janela de dez minutos (veja o diagrama abaixo). Como os carrapatos de preços ocorrem esporadicamente (ou seja, não são periódicos), parece mais conveniente calcular uma média móvel ponderada no tempo. No diagrama há quatro mudanças de preço: A, B, C e D, com os três últimos ocorrendo dentro da janela. Observe que, porque B só ocorre algum tempo na janela (digamos 3 minutos), o valor de A ainda contribui para a computação. Na verdade, até onde eu posso dizer, a computação deve basear-se exclusivamente nos valores de A, B e C (não D) e as durações entre eles e o próximo ponto (ou no caso de A: a duração entre o início Da janela de tempo e B). Inicialmente D não terá qualquer efeito, já que sua pontuação será zero. Isso é correto. Assumindo que isso está correto, minha preocupação é que a média móvel ficará mais do que a computação não ponderada (o que explicaria o valor de D imediatamente), no entanto, a computação não ponderada possui suas próprias desvantagens: A Tem tanto efeito sobre o resultado como os outros preços apesar de estar fora da janela de tempo. Uma onda repentina de carrapatos de preços rápidos prejudicaria fortemente a média móvel (embora talvez isso seja desejável) Alguém pode oferecer algum conselho sobre qual abordagem parece melhor, ou se há uma abordagem alternativa (ou híbrida) que vale a pena considerar, pediu 14 de abril 12 às 21: 35 Seu raciocínio está correto. O que você quer usar a média para embora, sem saber que é difícil dar qualquer conselho. Talvez uma alternativa seja considerar sua média de corrida A, e quando um novo valor V entrar, calcule a nova A média a (1-c) AcV, onde c está entre 0 e 1. Desta forma, os tiques mais recentes têm Uma influência mais forte, e o efeito de carrapatos antigos se dissipa ao longo do tempo. Você poderia até mesmo c depender do tempo desde os tiques anteriores (c se tornando menor à medida que os tiques se aproximam). No primeiro modelo (ponderação), a média seria diferente a cada segundo (como as leituras antigas obtêm menor peso e novas leituras mais altas), então está sempre mudando o que pode não ser desejável. Com a segunda abordagem, os preços fazem saltos bruscos à medida que novos preços são introduzidos e os antigos desaparecem da janela. Respondeu 14 de abril 12 às 21:50 As duas sugestões vêm do mundo discreto, mas você pode encontrar uma inspiração para seu caso particular. Dê uma olhada no suavização exponencial. Nesta abordagem, você apresenta o fator de suavização (01) que permite que você altere a influência dos elementos recentes no valor da previsão (os elementos mais antigos recebem pesos exponencialmente decrescentes): criei uma animação simples de como o alisamento exponencial rastrearia o Uma série de tempo uniforme x1 1 1 1 3 3 2 2 2 1 com três diferentes: veja também algumas das técnicas de aprendizagem de reforço (veja os diferentes métodos de desconto), por exemplo TD-learning e Q-Learning. Sim, a média móvel será, naturalmente, atrasada. Isso ocorre porque seu valor é informação histórica: ele resume amostras do preço nos últimos 10 minutos. Esse tipo de média é inerentemente laggy. Ele tem um deslocamento construído em cinco minutos (porque uma média de caixa sem deslocamento seria baseada em - 5 minutos, centrada na amostra). Se o preço estiver em A por um longo período de tempo e, em seguida, muda uma vez para B, leva 5 minutos para a média para alcançar (AB) 2. Se você quiser uma média de uma função sem qualquer mudança no domínio, o peso tem Para ser distribuído uniformemente em torno do ponto de amostra. Mas isso é impossível para os preços que ocorrem em tempo real, uma vez que os dados futuros não estão disponíveis. Se você quer uma mudança recente, como D, para ter um impacto maior, use uma média que dê um peso maior aos dados recentes, ou um período de tempo mais curto, ou ambos. Uma maneira de suavizar os dados é simplesmente usar um único acumulador (o estimador suavizado) E e tomar amostras periódicas dos dados S. E é atualizado da seguinte forma: I. e. Uma fração K (entre 0 e 1) da diferença entre a amostra de preço atual S e o estimador E é adicionado a E. Suponha que o preço tenha sido em A há muito tempo, de modo que E esteja em A e, de repente, muda Para B. O estimador começará a se mover para B de forma exponencial (como aquecimento, arrefecimento de carga de um capacitor, etc.). No começo, ele irá dar um grande salto e, em seguida, incrementos menores e menores. O quão rápido ele se move depende de K. Se K é 0, o estimador não se move, e se K é 1, ele se move instantaneamente. Com K você pode ajustar a quantidade de peso que você dá ao estimador versus a nova amostra. Mais peso é dado a amostras mais recentes de forma implícita, e a janela de exemplo basicamente se estende ao infinito: E é baseado em cada amostra de valor que já ocorreu. Embora, obviamente, os mais antigos não tenham influência no valor atual. Um método muito simples e bonito. Respondeu 14 de abril 12 às 21:50 Isso é o mesmo que a resposta de Tom. Sua fórmula para o novo valor do estimador é (1 - K) E KS. Que é algébricamente o mesmo que E K (S-E). É uma função de mistura quotlinear entre o estimador atual E e a nova amostra S onde o valor de K 0, 1 controla a mistura. Escrevê-lo dessa maneira é agradável e útil. Se K for 0,7, tomamos 70 de S e 30 de E, o que é o mesmo que adicionar 70 da diferença entre E e S de volta para E. ndash Kaz 14 de abril 12 às 22:15 Ao expandir a resposta Toms, a fórmula Para ter em consideração o espaçamento entre carrapatos pode ser formalizado (os tiques de fechamento têm uma ponderação proporcionalmente menor): a (tn - t n-1) T que é, a é uma proporção de delta de tempo de chegada sobre o intervalo de média v 1 (uso anterior Ponto) ou v (1 - u) a (interpolação linear, ou vu (próximo ponto) Mais informações são encontradas na página 59 do livro Uma Introdução à Finança de Alta Freqüência. Média Variável Ligada O algoritmo da média móvel ponderada suaviza os dados da série temporal Ao mesmo tempo em que dá mais importância a certos períodos de tempo. Geralmente é usado para criar uma previsão de vendas para produtos maduros com números de vendas bastante estáveis. Média móvel ponderada (rodando 3 períodos) Cálculo Como com o algoritmo da média móvel simples, Dados criando um seri Es de médias para diferentes subconjuntos de valores medidos em diferentes subgrupos de períodos. No entanto, neste caso, as médias para os subconjuntos são calculadas multiplicando os valores das figuras-chave por pesos predefinidos e a soma desses valores multiplicados é dividida pela soma dos pesos. Assim, uma média ponderada é calculada como uma previsão ex-post para um número fixo de períodos. Como um passo seguinte, o algoritmo muda o cálculo de um período para o futuro, ainda considerando m períodos para o cálculo. A média ponderada dos últimos períodos históricos será a previsão para o primeiro período futuro. Cada valor histórico é ponderado com o respectivo peso desse período. A previsão resultante é um número constante ao qual alguns subconjuntos dos dados da série temporal contribuem mais do que outros. A previsão ex-post é, portanto, calculada da seguinte forma: Cálculo das variáveis ​​de previsão ex-post usadas: X1, X2. Xn série de tempo valores m do tamanho do subconjunto W1, W2. Wn pesos i m. N e 0 lt m n A previsão é calculada da seguinte forma: Cálculo das variáveis ​​de previsão utilizadas: X1, X2. Xn série de tempo valores m do tamanho do subconjunto W1, W2. Wn pesos i m. N e 0 lt mn Além de especificar os números-chave para a previsão e a previsão ex-post, você precisa fazer as seguintes configurações se quiser usar o algoritmo da média móvel ponderada em seu modelo: Fonte dos pesos O valor-chave usado para Armazenando os pesos pelos quais o sistema deve multiplicar os dados da série temporal Número de períodos O comprimento dos subconjuntos na série temporal para a qual a média móvel é calculada. Por exemplo, se você selecionar 3 para esta configuração e definir a periodicidade para o mês, o algoritmo calcula a média para os meses 1, 2 e 3, então para os meses 2, 3 e 4, e assim por diante, avançando no histórico horizonte. Estender o Cálculo para Períodos Futuros Se você selecionar esta opção, a lógica da média móvel ponderada será transferida dos últimos períodos no passado para os períodos no futuro. Para obter mais informações, consulte a descrição da mesma configuração na Média de Movimento Simples. Este repo fornece algoritmos de média móvel móvel ponderada exponencial, ou EWMAs para breve, com base em nossa conversa de comportamento quantificador anormal. Média de Movimento Ponderada Exponencialmente Uma média móvel ponderada exponencialmente é uma maneira de calcular continuamente um tipo de média para uma série de números, à medida que os números chegam. Depois que um valor na série é adicionado à média, seu peso na média diminui exponencialmente ao longo do tempo. Isso prejudica a média em relação a dados mais recentes. Os EWMAs são úteis por várias razões, principalmente o custo computacional e de memória barato, bem como o fato de representarem a recente tendência central da série de valores. O algoritmo EWMA requer um fator de decaimento, alfa. Quanto maior o alfa, mais a média é tendenciosa em relação à história recente. O alfa deve estar entre 0 e 1, e geralmente é um número bastante pequeno, como 0,04. Vamos discutir a escolha do alfa mais tarde. O algoritmo funciona assim, em pseudocódigo: multiplique o próximo número da série por alfa. Multiplique o valor atual da média em 1 menos alfa. Adicione o resultado das etapas 1 e 2 e guarde-o como o novo valor atual da média. Repita para cada número da série. Existem comportamentos de casos especiais para como inicializar o valor atual, e estes variam entre as implementações. Uma abordagem é começar com o primeiro valor na série. Outro é a média dos 10 primeiros valores da série usando uma média aritmética e, em seguida, iniciar a atualização incremental da média. Cada método tem prós e contras. Pode ajudar a vê-lo de forma ilustrada. Suponha que a série tenha cinco números, e nós escolhemos alfa para ser 0.50 por simplicidade. Heres a série, com números no bairro de 300. Agora, vamos tomar a média móvel desses números. Primeiro, estabelecemos a média para o valor do primeiro número. Em seguida, multiplicamos o próximo número por alfa, multiplique o valor atual por 1-alfa e adicione-os para gerar um novo valor. Isso continua até terminar. Observe como cada um dos valores na série decai pela metade cada vez que um novo valor é adicionado e a parte superior das barras na parte inferior da imagem representa o tamanho da média móvel. É uma média suavizada, ou baixa passagem, da série original. Considere uma média móvel de janela de deslizamento de tamanho fixo (não uma média móvel ponderada exponencialmente) que mede em relação às amostras N anteriores. Qual é a idade média de cada amostra é N2. Agora suponha que você deseja construir um EWMA cujas amostras tenham a mesma idade média. A fórmula para calcular o alfa necessário para isso é: alpha 2 (N1). Prova está no livro Produção e Análise de Operações por Steven Nahmias. Então, por exemplo, se você tiver uma série de tempo com amostras uma vez por segundo, e você deseja obter a média móvel em relação ao minuto anterior, use um alfa de .032786885. Este, por sinal, é o alfa constante usado para este repositorys SimpleEWMA. Este repositório contém duas implementações do algoritmo EWMA, com diferentes propriedades. As implementações estão em conformidade com a interface MovingAverage e o construtor retorna esse tipo. As implementações atuais assumem um intervalo de tempo implícito de 1.0 entre cada amostra adicionada. Ou seja, a passagem do tempo é tratada como se fosse o mesmo que a chegada das amostras. Se você precisar de decadência com base no tempo quando as amostras não estão chegando precisamente em intervalos estabelecidos, esse pacote não suportará suas necessidades no momento. Um SimpleEWMA foi projetado para baixo consumo de CPU e memória. Ele terá um comportamento diferente do VariableEWMA por vários motivos. Não tem período de aquecimento e usa uma decomposição constante. Essas propriedades permitem usar menos memória. Ele também se comportará de forma diferente quando for igual a zero, o que é suposto significar não inicializado, então se um valor provavelmente se tornará zero ao longo do tempo, então qualquer valor não-zero causará um salto acentuado em vez de uma pequena mudança. Ao contrário de SimpleEWMA, isso suporta uma idade personalizada que deve ser armazenada e, portanto, usa mais memória. Ele também tem um tempo de aquecimento quando você começa a adicionar valores a ele. Ele reportará um valor de 0,0 até que você tenha adicionado o número de amostras necessárias. Ele usa alguma memória para armazenar o número de amostras adicionadas a ele. Como resultado, usa um pouco mais do dobro da memória do SimpleEWMA. Veja aqui a documentação gerada pelo GoDoc. Só aceitamos pedidos de puxão para pequenas correcções ou melhorias. Isso inclui: Pequenas correções de erros Typos Documentação ou comentários Abra itens para discutir novos recursos. Os pedidos de solicitação de novos recursos serão rejeitados, por isso recomendamos forjar o repositório e fazer alterações em seu garfo para o seu caso de uso. Este repositório é Copyright (c) 2013 VividCortex, Inc. Todos os direitos reservados. É licenciado sob a licença MIT. Consulte o arquivo LICENSE para obter os termos de licença aplicáveis.

No comments:

Post a Comment