Saturday 23 March 2019

Média móvel exponencial oracle sql


Se você vir essa mensagem, seu navegador desativou ou não aceita JavaScript. Para usar os recursos completos deste sistema de ajuda, como pesquisa, seu navegador deve ter o suporte a JavaScript habilitado. Médias móveis ponderadas com médias móveis simples, cada valor de dados no quotwindowquot em que o cálculo é realizado tem um significado ou peso igual. É frequentemente o caso, especialmente na análise de dados de preços financeiros, que mais dados cronologicamente recentes devem ter um peso maior. Nesses casos, a média média móvel ponderada (ou o potencial móvel exponencial - veja o tópico a seguir) é muitas vezes preferida. Considere a mesma tabela de valores de dados de vendas por doze meses: para calcular uma média móvel ponderada: Calcule quantos intervalos de dados participam do cálculo da Média Mover (ou seja, o tamanho do quotwindowquot do cálculo). Se a janela de cálculo for dita n, então o valor de dados mais recente na janela é multiplicado por n, o próximo mais recente multiplicado por n-1, o valor anterior ao multiplicado por n-2 e assim por diante para todos os valores na janela. Divida a soma de todos os valores multiplicados pela soma dos pesos para dar a média móvel ponderada sobre essa janela. Coloque o valor da média móvel ponderada em uma nova coluna de acordo com o posicionamento de médias avançadas descrito acima. Para ilustrar estas etapas, considere se é necessária uma média móvel de vendas de 3 meses em dezembro (usando a tabela acima de valores de vendas). O termo quot3-monthquot implica que o quotwindowquot de cálculo é 3, portanto, o algoritmo de cálculo da média móvel ponderada para este caso deve ser: Ou, se uma Média de Movimento Ponderada de 3 meses fosse avaliada em toda a gama original de dados, os resultados seriam : 3 meses de média de movimento ponderado Esta é uma questão Evergreen Joe Celko. Ignoro qual plataforma DBMS é usada. Mas, em qualquer caso, Joe conseguiu responder há mais de 10 anos com o SQL padrão. Joe Celko SQL Puzzles and Answers citação: Essa última tentativa de atualização sugere que poderíamos usar o predicado para construir uma consulta que nos daria uma média móvel: a coluna extra ou a abordagem de consulta melhor. A consulta é tecnicamente melhor porque a abordagem UPDATE Desmoralize o banco de dados. No entanto, se os dados históricos que estão sendo registrados não mudem e o cálculo da média móvel é caro, você pode considerar usar a abordagem da coluna. Consulta SQL Puzzle: por todos os meios uniforme. Você simplesmente joga no balde de peso apropriado dependendo da distância do ponto de tempo atual. Por exemplo, quottake weight1 para datapoints dentro de 24 horas a partir do ponto de dados atual0.5 para pontos de dados dentro de 48hrsquot. Esse caso é importante quantos pontos de dados consecutivos (como 6:12 am e 11:48 pm) estão distantes um do outro Um caso de uso que eu posso pensar seria uma tentativa de alisar o histograma sempre que os pontos de dados não são suficientemente densos. 22:22 Não tenho certeza se o resultado esperado (saída) mostra uma média simples de movimentação simples (rolando) durante 3 dias. Como, por exemplo, o primeiro triplo dos números, por definição, dá: mas você espera 4.360 e é confuso. No entanto, sugiro a seguinte solução, que usa AVG de função de janela. Essa abordagem é muito mais eficiente (clara e menos intensiva em recursos) do que a SELF-JOIN introduzida em outras respostas (e estou surpreso que ninguém tenha dado uma solução melhor). Você vê que o AVG está envolvido com o caso quando rownum gt p. days, em seguida, para forçar NULL s nas primeiras linhas, onde 3 Day Moving Average não tem sentido. Respondeu 23 de fevereiro às 13:12. Podemos aplicar o método de junção externa suja esquerda de Joe Celkos (como citado acima por Diego Scaravaggi) para responder a pergunta conforme foi solicitado. Gera o resultado solicitado: respondeu Jan 9 16 às 0:33 Sua resposta 2017 Stack Exchange, IncHá uma boa pergunta sobre a OTN hoje sobre se há uma função Oracle padrão para calcular a média móvel exponencial. A resposta é que não há essa função, mas com a cláusula modelo, você pode calcular isso muito facilmente. E é um ótimo exemplo do que quero dizer com um número variável de cálculos com base em valores calculados, escrito na minha terceira parte do tutorial da cláusula modelo. Antes de hoje, nem sabia o que era uma média móvel exponencial. Você pode ler mais sobre isso aqui na Wikipedia ou aqui com um bom exemplo. Do primeiro link: uma média móvel exponencial (EMA), aplica fatores de ponderação que diminuem exponencialmente. A ponderação para cada ponto de dados mais antigo diminui exponencialmente, dando muito mais importância às observações recentes, enquanto ainda não descarta as observações antigas inteiramente. A partir do segundo link: A fórmula para o cálculo de uma média móvel exponencial (EMA) é: X EMA atual (ou seja, EMA a ser calculado) C Valor de dados original atual K Constante de suavização P EMA anterior (O primeiro EMA no intervalo a ser calculado é Arbitrária e pode ser o valor de dados original correspondente ou, muitas vezes, um valor de média móvel simples. K Smoothing Constant 2 (1 n) E esta fórmula é seguida por um exemplo que eu estendi um pouco, usando esta tabela: Os registros do produto A Combine o exemplo no link. Eu compus os números do produto B. Aqui está a consulta da cláusula do modelo que implementa a fórmula. Observe como a fórmula se traduz diretamente na única e única regra da cláusula do modelo. A constante de suavização K está configurada Para .5, com base em uma janela de valores (n) igual a 3. Desafio: tente isso sem a cláusula do modelo e veja se você pode encontrar algo mais abrangente. 5 comentários: 11.2 recursos em uso com isso como (selecione o produto 39A39 . Data 392009-01-0139 mês, 10 quantidade de união dupla, todos selecionados 39A39, data 392009-02-0139, 15 de dupla união, todos selecionam 39A39, data 392009-03-0139, 17 de união dupla, todos selecionam 39A39, data 392009-04-0139, 20 de união dupla Todos selecionam 39A39, data 392009-05-0139, 22 de dupla união, todos selecionam 39A39, data 392009-06-0139, 20 de dupla união, selecione tudo 39A39, data 392009-07-0139, 25 de dupla união, selecione tudo 39A39, data 392009-08-0139, 27 de dupla união, todos selecionam 39A39, data 392009-09-0139, 30 de união dupla, todos selecionados 39A39, data 392009-10-0139, 35 de união dupla, todos selecionados 39A39, data 392009-11-0139 , 37 de dupla união, todos selecionam 39A39, data 392009-12-0139, 40 de dupla união, todos selecionam 39B39, data 392009-01-0139, 0 de dupla união, todos selecionam 39B39, data 392009-02-0139, 50 de dupla união Todos selecionam 39B39, data 392009-03-0139, 10 da união dupla, selecione 39B39, data 392009-04-0139, 40 da união dupla, selecione 39B39, data 392009-05-0139, 15 da dupla união, selecione tudo 39B39, data 392009-06-0139, 35 de União dupla, todos selecionam 39B39, data 392009-07-0139, 30 de dupla união, todos selecionam 39B39, data 392009-08-0139, 30, de dupla união, todos selecionam 39B39, data 392009-09-0139, 20, de dupla união, todos os selecionados 39B39 , Data 392009-10-0139, 20 da união dupla, selecione 39B39, data 392009-11-0139, 20 da união dupla, selecione 39B39, data 392009-12-0139, 20 a partir de dual), rns como (selecione isso. . Rownumber () over (partição por produto ordem por mês) rn -. 2 (1count () over (partição por produto)) k. 0,5 k do dat), res (produto, mês, quantidade, rn, x) como (selecione r. product, r. month, r. amount, r. rn, r. mount x de rns r onde rn 1 union seleciona todos Ns. prodt, ns. month, ns. amount, ns. rn, ns. k (ns. amount - es. x) es. xx de rns ns, res es onde ns. rn es. rn 1 e ns. product es. produto) selecione o produto, o mês, o montante, o rn, a rodada (x, 3) EMA a partir do pedido de res por produto, mês após a computação do formulário fechado, criei o seguinte código que, se mais como uma ofuscação do que qualquer coisa abrangente. A idéia é criar múltiplos em execução usando uma concatenação de string e a funcionalidade xml-eval. As formas fechadas dos casos especiais apenas precisam de somas em execução. Há um caso geral e dois casos especiais que são muito mais fáceis: com t1 como (selecionar produto, mês, quantidade, quantidade ci, rownumber () over (partição por ordem do produto por mês) rn, --2 (1 rownumber () over (Partição por ordem de produto por mês)) ki 0,5 ki de vendas), t2 como (selecione produto, mês, quantidade, (caso quando rn 1 e 1 mais ki end ci) ai, caso quando rn 1 e mais 1 (1 - Ki) fim bi de t1), t3 como (SELECIONE o produto, MONTH, amount, ai, xmlquery (REPLACE (wmconcat (bi) over (PARTITION BY product ORDER BY MONTH filas ENTRE INCLUÍDO precedente AND ACTUAL), 39,39, 3939 ) VOLTANDO o conteúdo).getnumberval () mi FROM t2), t4 as (selecione o produto, o mês, o montante, o mi) xi do t3) SELECIONE o produto, MONTH, amount, round (mi SUM (xi) over (PARTITION POR produto ORDER BY MONTH filas ENTRE INCLINADO ANTERIOR E LIGAÇÃO ATUAL), 3) ema DE t4 Caso especial K 0,5: com t1 como (selecionar produto, mês, quantidade, rownumber () sobre (partição por ordem de produto por mês) rn, quantidade Poder (2, nvl (nullif (r (Partição por produto ordem por mês) - 1, 0), 1)) ci de vendas) selecione produto, mês, quantidade, rodada (soma (ci) sobre (partição por ordem do produto por mês linhas entre ilimitado anterior E linha atual) potência (2, rn), 3) ema de t1 Caso especial K 2 (1 i): com t1 como (selecionar produto, mês, quantidade, rownumber () sobre (partição por produto ordem por mês) rn, Quantidade de rownumber () por cima (partição por ordem de produto por mês) ci de vendas) selecione produto, mês, quantidade, rodada (soma (ci) sobre (partição por ordem de produto por mês linhas entre linha não limitada precedente e atual) 2 (rn ( Rn 1)), 3) ema de t1 I39ll publicar a prova do formulário fechado se alguém estiver interessado nela. Este é um ótimo exemplo de quotfun com SQLquot :-) Uma combinação de XMLQuery, wmconcat indocumentado e funções analíticas com a cláusula de janela. Eu gosto disso. Embora não seja tão abrangente como a variante da cláusula modelo e os Rafu39s recursivos com um, como você disse a si mesmo. E com certeza, gostaria de ver a prova da forma fechada. Abordei outra questão: como otimizar a constante de suavização SELECT k - constante de suavização. Mse - erro quadrado médio FROM (SELECIONE DE VENDAS MODELO DIMENSÃO POR (produto. ROWNUMBER () OVER (PARTITION BY product ORDER BY month ASC) rn) MEDIDAS (montante - valor das vendas mês - mês. 0 AS C. 0 AS P. 0 AS X. 0 AS SE - erro ao quadrado - - linha de trabalho e atributos - a) linha de trabalho é o produto 39X39, rn 1 - b) os atributos de trabalho são os seguintes:. 0 AS SSE - sum SE para todos os meses de produtos. 0 AS MSE - significa SSE para todos os produtos. 0 AS k - para todos os meses de produtos. 0 AS PreMSE - MSE anterior de k39s para todos os meses de produtos. 0 AS diff - entre MSE atual e anterior. 0,1 AS delta - incremento inicial. 0 AS priorpt - ponto de partida inicial -) REGRAS ITERATE (99) ATÉ (abs (diff39A39,1) lt 0.00010) (Cany, rn amountcv (), cv (). K39A39,1 priorpt39A39,1 delta39A39,1. Xany Rn ORDEM POR produto, rn ASC COALESCE (K39A39,1 Ccv (), cv () (1-K39A39,1) Xcv (), cv () - 1, Ccv (), cv ()). Pproduct, rn Xcv (), Cv () - 1. SEproduct, rn POWER (Ccv (), cv () - Xcv (), cv () - 1, 2). SSE39A39,1 SUM (SE) qualquer, qualquer. MSE39A39,1 SUM (SE) qualquer, qualquer 24. Diff39A39,1 CASE iterationnumber QUANDO 0 então NULL ELSE preMSE39A39,1 - MSE39A39,1 END. PreMSE39A39,1 MSE39A39,1. Delta39A39,1 CASO QUANDO diff39A39,1 lt 0 então - abs (delta39A39, 12) ELSE abs (delta39A39,1) END. Priorpt39A39,1 K39A39,1)) onde o produto 39A39 e rn 1 K MSE ---------- ---------- .599999237 174.016094

No comments:

Post a Comment