Pergunta

Nós temos um aplicativo onde os usuários entram preços durante todo o dia. Estes preços são registrados em uma tabela com um timestamp e, em seguida, usado para a produção de gráficos de como o preço moveu-se ... De vez em quando o usuário digita um preço erroneamente (eg. Coloca em um zero a muitos ou para alguns) que de alguma forma ruínas do gráfico (você obter grandes picos). Nós até mesmo colocar em um diálogo de confirmação extra se o preço se move por mais de 20%, mas isso não os impede de entrar valores errados ...

O método estatístico que posso usar para analisar os valores antes de traçar-los para excluir quaisquer valores que são muito diferentes do resto?

EDIT: Para adicionar um pouco de carne até o osso. Dizem que os preços são os preços das ações (eles não são, mas eles se comportam da mesma forma). Você poderia ver o preço mover significativamente para cima ou para baixo durante o dia. Em um registro média dia, cerca de 150 preços e, por vezes, um ou dois são caminho errado. Outras vezes, eles são tudo de bom ...

Foi útil?

Solução

Calcular e rastrear o desvio padrão por um tempo. Depois de ter um backlog decente, você pode desconsiderar os valores atípicos por ver quantos desvios-padrão longe estão da média. Ainda melhor, se você tem o tempo, você poderia usar a informação para fazer algumas ingênuo Bayesian classificação .

Outras dicas

Essa é uma ótima pergunta, mas pode levar a um pouco de discussão, as respostas podem ser muito variadas. Depende de

  • quanto esforço você está disposto a colocar em isso?

  • poderia algumas respostas genuinamente diferem por +/- 20% ou qualquer teste que você inventar? por isso haverá sempre necessidade de alguma intervenção humana?

  • e inventar um teste relevante eu preciso saber muito mais sobre o assunto.

Dito isto o seguinte são possíveis alternativas.

  • Um teste simples em relação ao valor prévio (ou modo / média de anteriores 10 ou 20 valores) seria directamente para a frente para implementar

  • O próximo nível de complexidade que envolvem alguma medida estatística de todos os valores (ou valores x anteriores, ou valores dos últimos 3 meses), uma distribuição normal ou de Gauss iria permitir-lhe dar a cada valor de um grau de certeza como ao facto de ser um erro vs. preciso. Este grau de certeza seria tipicamente expressa como uma porcentagem.

Consulte http://en.wikipedia.org/wiki/Normal_distribution e http://en.wikipedia.org/wiki/Gaussian_function há ligações suficientes sobre estas páginas para ajudar na programação destes, também dependendo do idioma que você está usando não são susceptíveis de ser funções e / ou plugins disponíveis para ajudar com este

  • Um método mais avançado poderia ser a de ter algum tipo de aprendizado algoritmo que poderia levar outros parâmetros em conta (no topo dos últimos valores x) um algoritmo de aprendizagem pode levar o tipo de produto ou fabricante em conta, por exemplo. Ou até mesmo monitorar a hora do dia ou o usuário que entrou na figura. Esta opção parece o meio mais alto para o que você precisa no entanto, seria necessário muito trabalho para o código-lo e também para treinar o algoritmo de aprendizagem.

Eu acho que a segunda opção é a correta para você. Usando desvio padrão (um monte de línguas conter uma função para isso) pode ser uma alternativa mais simples, esta é simplesmente uma medida de quão longe o valor se desviou da média dos valores x anteriores, eu ia colocar a algum lugar opção desvio padrão entre opção 1 e 2

Você poderia medir o desvio padrão em sua população existente e excluir aqueles que são maiores do que 1 ou 2 desvios-padrão da média?

Vai depender do que sua aparência de dados gostaria de dar uma resposta mais precisa ...

ou gráfico de uma média móvel dos preços em vez dos preços reais.

aqui :

Os estatísticos desenvolveram vários métodos para a detecção de valores atípicos. Todos os métodos primeiro quantificar o quão longe o outlier é dos outros valores. Esta pode ser a diferença entre o outlier e a média de todos os pontos, a diferença entre o outlier e a média dos valores restantes, ou a diferença entre o outlier eo próximo valor mais próximo. Próximo, padronizar este valor pela divisão por alguma medida de dispersão, tal como o desvio padrão de todos os valores, o DP dos valores restantes, ou o intervalo de dados. Finalmente, calcular um valor P responder a esta pergunta: Se todos os valores foram realmente amostrados de uma população Gaussian, qual é a chance de obter aleatoriamente um outlier tão longe de outros valores? Se o valor P é pequeno, você concluir que o desvio do outlier de outros valores é estatisticamente significativa.

O Google é seu amigo, você sabe. ;)

Para a sua pergunta específica de plotagem , e seu cenário específico de uma média de 1-2 erros por dia fora de 150, a coisa mais simples poderia ser a trama médias aparadas , ou o intervalo de meio de 95% dos valores, ou algo parecido. Ela realmente depende de qual o valor que você quer fora da trama.

Se você está realmente preocupado com a verdadeira max e verdadeiro de preços de um dia, então você tem que lidar com os valores atípicos como valores atípicos, e devidamente excluí-los, provavelmente usando um dos testes outlier anteriormente propostos (ponto de dados é x% mais do que o próximo ponto, ou os últimos n pontos, ou mais de 5 desvios padrão de distância da média diária). Outra abordagem é para ver o que acontece após o outlier. Se é um outlier, então ele terá uma forte recuperação seguido por uma quebra acentuada.

Se, contudo, você se preocupa com tendência geral, traçando diária média aparada, mediana, 5% e 95% percentis vai retratar bem a história.

Escolha os seus métodos de exibição e quanto a detecção outlier que você precisa fazer com base na pergunta análise . Se você se preocupa com medianas ou percentis, eles provavelmente irrelevante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top