Monday 14 August 2017

Exponencial Móvel Média Numpy


Este é um wrapper Python para TA-LIB baseado em Cython em vez de SWIG. A partir da homepage: TA-Lib é amplamente utilizado pelos desenvolvedores de software de negociação que exigem a realização de análise técnica de dados do mercado financeiro. Inclui 150 indicadores como ADX, MACD, RSI, estocástico, Bollinger Bands, etc. Reconhecimento de padrão de candlestick API de código aberto para CC, Java, Perl, Python e 100 gerenciados As ligações Python originais usam SWIG que infelizmente são difíceis de instalar e não Tão eficientes quanto poderiam ser. Portanto, este projeto usa Cython e Numpy para se ligar de forma eficiente e limpa a TA-Lib - produzindo resultados 2-4 vezes mais rápido do que a interface SWIG. Instalar o TA-Lib ou Ler os Docs Similar à TA-Lib, a interface de função fornece um invólucro leve dos indicadores TA-Lib expostos. Cada função retorna uma matriz de saída e tem valores padrão para seus parâmetros, a menos que especificado como argumentos de palavra-chave. Normalmente, essas funções terão um período inicial de retorno (um número necessário de observações antes que uma saída seja gerada) definida para NaN. Todos os exemplos a seguir usam a função API: Calcula uma média móvel simples dos preços de fechamento: Cálculo de bandas de bollinger, com média móvel exponencial tripla: Momento de cálculo dos preços de fechamento, com um período de tempo de 5: Já familiarizado com o uso da função API, você deve se sentir em casa usando a API abstrata. Cada função tem a mesma entrada, passada como um dicionário de arrays Numpy: As funções podem ser importadas diretamente ou instanciadas por nome: A partir daí, chamar funções é basicamente o mesmo que a função API: Saiba mais sobre o uso mais avançado de TA-Lib aqui . Indicadores Suportados Podemos mostrar todas as funções de TA suportadas pelo TA-Lib, quer como uma lista ou como um dict classificado por grupo (por exemplo, Estudos de Sobreposição, Indicadores Momentum, etc): Blog bem analisar algumas técnicas comuns utilizadas na análise de séries de tempo, aplicando-os a um conjunto de dados contendo valores de fechamento diário para o índice de mercado de ações SampP 500 de 1950 até hoje. O objetivo é explorar algumas das idéias e conceitos básicos da análise de séries temporais e observar seus efeitos quando aplicados a um conjunto de dados do mundo real. Embora não seja possível prever realmente mudanças no índice usando estas técnicas, as idéias aqui apresentadas poderiam teoricamente ser usadas como parte de uma estratégia maior envolvendo muitas variáveis ​​adicionais para conduzir uma regressão ou esforço de aprendizagem de máquina. Análise de séries temporais é um ramo da estatística que envolve o raciocínio sobre seqüências ordenadas de valores relacionados a fim de extrair estatísticas significativas e outras características dos dados. Seu usado em uma ampla gama de disciplinas, incluindo econometria, processamento de sinal, previsão do tempo, e basicamente qualquer outro campo que envolve dados de séries temporais. Essas técnicas são freqüentemente usadas para desenvolver modelos que podem ser usados ​​para tentar prever os valores futuros de uma série, por conta própria ou em conjunto com outras variáveis. Para começar, vamos primeiro baixar os dados. Eu tenho o conjunto de dados historial do Yahoo Finance. Que inclui um link para baixar todo o arquivo como um arquivo. csv. Agora podemos carregar o conjunto de dados e dar uma olhada. Eu vou usar várias bibliotecas Python populares para a análise, então todo o código está em Python. Os dados estão em ordem cronológica inversa para que eu classificá-lo por data e, em seguida, definir o índice do quadro de dados para a coluna de data. Se você olhar para os dados existem vários campos, mas também estar se concentrando no preço de fechamento apenas. Vamos plotar os dados primeiro e ver o que parece. A primeira coisa óbvia a se notar, além dos dois mergulhos gigantes no final da cauda correspondente às quedas do mercado em 2002 e 2008, é que os dados são claramente não-estacionários. Isso faz sentido para os dados do mercado, uma vez que tende a subir a longo prazo mais do que vai para baixo. Este é um problema para a análise de séries de tempo embora como dados não-estacionários é difícil de raciocinar. A primeira coisa que podemos tentar é uma primeira diferença da série. Em outras palavras, subtraia o valor anterior t-1 do valor atual t para obter a diferença d (t). Os dados já não parece estar tendendo para cima ao longo do tempo e é em vez centrada em torno de 0. Theres outro problema embora. Olhe para a variação. Sua muito pequena no início e constantemente aumenta ao longo do tempo. Este é um sinal de que os dados não são apenas não-estacionários, mas também exponencialmente crescente. A magnitude das variações do dia-a-dia no dia atual completamente anão a magnitude das mudanças em 1950. Para lidar com isso, bem aplicar uma log transformar para a série original. Então isso nos dá o preço de fechamento original com uma transformada de log aplicada para aplainar os dados de uma curva exponencial para uma curva linear. Uma maneira de ver visualmente o efeito que a transformada de log tinha era analisar a variância ao longo do tempo. Podemos usar uma estatística de variância de rolamento e comparar tanto a série original quanto a série registrada. Observe que no gráfico superior, não podemos nem ver qualquer uma das variações até o final dos anos 80. No gráfico inferior contudo é uma história diferente, as alterações no valor são claramente visíveis ao longo de todo o conjunto de dados. Desta visão, é claro que nossa transformação fez a variância relativamente constante. Agora podemos ver as variações anteriores no conjunto de dados um pouco melhor do que antes. Nós ainda precisamos ter a primeira diferença embora assim permite calcular que a partir da série registrada. Muito melhor Temos agora um modelo de série de tempo estacionário de mudanças diárias para o índice SampP 500. Agora vamos criar algumas variáveis ​​de atraso y (t-1), y (t-2) etc. e examinar sua relação com y (t). Olhe bem em 1 e 2 dias de atraso, juntamente com atrasos semanais e mensais para procurar efeitos sazonais. Uma maneira visual interessante de avaliar a relação entre variáveis ​​retardadas é fazer um gráfico de dispersão da variável original versus a variável defasada e ver onde a distribuição está. Podemos fazer isso com um enredo comum usando o pacote seaborn. Observe como a massa está em torno de 0. Ela também parece estar bem distribuída - as distribuições marginais em ambos os eixos são praticamente normais. Isso parece indicar que saber o valor do índice um dia não nos diz muito sobre o que vai fazer no dia seguinte. Provavelmente não é nenhuma surpresa que há muito pouca correlação entre a mudança de valor de um dia para o outro. Embora eu não os tratei para fora aqui, as outras variáveis ​​defasadas que eu criei acima mostram resultados similares. Poderia haver uma relação com outras etapas de atraso que não tentamos, mas é impraticável testar manualmente todos os valores de latência possíveis. Felizmente, há uma classe de funções que pode sistematicamente fazer isso para nós. A função de auto-correlação calcula a correlação entre uma variável e ela própria em cada passo de atraso até algum limite (neste caso 40). A função de auto-correlação parcial calcula a correlação em cada etapa de atraso que NÃO é já explicada por passos de atraso de ordem inferior anteriores. Podemos traçar os resultados para ver se existem correlações significativas. Os resultados de autocorrelação e autocorrelação parcial estão muito próximos uns dos outros (I apenas traçou os resultados de auto-correlação acima). O que isto mostra é que não há correlação significativa (0,2) entre o valor no tempo t e em qualquer momento antes de t até 40 passos atrás. Em palavras de ordem, a série é uma caminhada aleatória. Outra técnica interessante que podemos tentar é uma decomposição. Esta é uma técnica que tenta dividir uma série de tempo em fatores tendência, sazonais e residuais. Statsmodels vem com uma função de decompor fora da caixa. Como não vemos nenhum ciclo real nos dados, a visualização não é tão efetiva neste caso. Para dados onde este é um forte padrão sazonal embora possa ser muito útil. A instância seguinte, por exemplo, é uma amostra da documentação de statsmodels mostrando dados de emissões de CO2 ao longo do tempo. A decomposição é muito mais útil neste caso. Há três componentes claramente distintos para a série de tempo - uma linha de tendência, um ajuste sazonal e valores residuais. Cada um deles precisaria ser contabilizado e modelado adequadamente. Voltando aos nossos dados de estoque, já foram observados que é uma caminhada aleatória e que nossas variáveis ​​defasadas parecem ter muito impacto, mas ainda podemos tentar ajustar alguns modelos ARIMA e ver o que temos. Vamos começar com um modelo de média móvel simples. Então, à primeira vista parece que este modelo está indo muito bem. Mas, embora pareça que as previsões são muito próximas (as linhas são quase indistinguíveis afinal), lembre-se que usamos as séries não diferenciadas. O índice flutua apenas uma pequena porcentagem do dia-a-dia em relação ao valor absoluto total. O que realmente queremos é prever a primeira diferença, ou os movimentos do dia-a-dia. Podemos re-executar o modelo usando a série diferenciada, ou adicionar um termo I para o modelo ARIMA (resultando em um modelo (1, 1, 0) que deve realizar a mesma coisa. Vamos tentar usar a série diferenciada. É um pouco difícil de dizer, mas parece que nossas mudanças previstas são geralmente muito menores do que as mudanças reais. Pode valer a pena dar uma olhada em um subconjunto dos dados para ver o que realmente está acontecendo. Portanto, agora é bastante óbvio que a previsão está longe. Estavam prevendo minúsculas pequenas variações em relação ao que realmente está acontecendo no dia-a-dia. Novamente, isso é mais menos esperado com um modelo de média móvel simples de uma série de tempo de caminhada aleatória. Theres não bastante informação dos dias precedentes para forcast exatamente o que está indo acontecer no dia seguinte. Um modelo de média móvel não parece fazer tão bem. E quanto a um modelo de suavização exponencial A suavização exponencial difunde o impacto de valores anteriores usando uma ponderação exponencial, então as coisas que aconteceram mais recentemente são mais impactantes do que as coisas que aconteceram há muito tempo. Talvez esta forma mais inteligente de calcular a média seja mais precisa Você provavelmente pode adivinhar a resposta. Se a previsão do mercado de ações fosse fácil, todo mundo estaria fazendo isso. Como mencionei no topo, o ponto dessa análise não era reivindicar que você pode prever o mercado com essas técnicas, mas sim demonstrar os tipos de análise que um Usar quando quebrar dados da série de tempo. Análise de séries de tempo é um campo muito rico com muito mais análise técnica do que eu fui para aqui (muito do que eu ainda estou aprendendo). Se você está interessado em fazer um mergulho mais profundo, eu recomendo estas notas de um professor em Duke. Um monte do que eu aprendi sobre o campo que eu peguei de leitura de recursos on-line como este. Finalmente, o código fonte original deste post é hospedado no GitHub aqui. Juntamente com uma variedade de outros notebooks. Normalização de lotes em Tensorflow Ter 29 março 2016 A normalização de lotes, como descrito no artigo de março de 2015 (o BN2015 papel) por Sergey Ioffe e Christian Szegedy, é um simples E eficaz para melhorar o desempenho de uma rede neural. No documento BN2015, Ioffe e Szegedy mostram que a normalização de lotes permite o uso de taxas de aprendizado mais altas, atua como um regularizador e pode acelerar o treinamento em 14 vezes. Neste post, eu mostro como implementar a normalização de lotes em Tensorflow. Editar 071216. Ive atualizado este post para cobrir o cálculo da média populacional e variância no tempo de teste em mais detalhes. Editar 020816. No caso de você estar procurando a normalização de lote recorrente (isto é, a partir de Cooijmans et al. (2016)), eu enviei uma implementação Tensorflow de trabalho aqui. A única parte complicada da implementação, em comparação com a normalização de lote feedforward apresentado neste post, é armazenar variáveis ​​de população separada para timesteps diferentes. O problema Batch normalização destina-se a resolver o seguinte problema: Alterações nos parâmetros do modelo durante a aprendizagem alterar as distribuições das saídas de cada camada escondida. Isso significa que as camadas posteriores precisam se adaptar a essas mudanças (muitas vezes barulhentas) durante o treinamento. Para resolver este problema, o papel BN2015 projeta a normalização do lote da entrada para a função de activação de cada nuron (por exemplo, cada função sigmoide ou ReLU) durante o treino, de modo que a entrada para a função de activação através de cada lote de treino tenha Uma média de 0 e uma variância de 1. Por exemplo, a aplicação de normalização de lote para a ativação (sigma (Wx b)) resultaria em (sigma (BN (Wx b))) onde (BN) é a transformada de normalização de lote. A transformada de normalização em lote Para normalizar um valor através de um lote (isto é para normalizar o lote), subtraímos a média do lote, (muB). E dividir o resultado pelo desvio padrão do lote, (sqrt). Observe que uma pequena constante (epsilon) é adicionada à variância para evitar a divisão por zero. Assim, a transformada de normalização inicial de um dado valor, (xi). É: BN (xi) frac Como a transformada de normalização de lote dada acima restringe as entradas para a função de ativação para uma distribuição normal prescrita, isso pode limitar o poder de representação da camada. Portanto, permitimos que a rede desfaz a transformada de normalização de lotes multiplicando por um novo parâmetro de escala (gama) e adicionando um novo parâmetro de mudança (beta). (Gama) e (beta) são parâmetros aprendizes. Adicionando em (gama) e (beta) produzindo a seguinte transformação de normalização de lote final: BN (xi) gama (frac) beta Implementando a normalização de lote em Tensorflow Vamos adicionar a normalização de lote a uma rede neural totalmente conectada que tem duas camadas escondidas de 100 neurônios cada um e mostram um resultado semelhante ao da Figura 1 (b) e (c) do papel BN2015. Observe que esta rede ainda não é geralmente adequada para uso no momento do teste. Veja a seção Fazendo previsões com o modelo belwo para a razão pela qual, bem como uma versão fixa. Imports, config

No comments:

Post a Comment