Módulo Python para análise de ponto de mudança

24

Estou procurando um módulo Python que execute uma análise de ponto de mudança em uma série temporal. Existem vários algoritmos diferentes e eu gostaria de explorar a eficácia de alguns deles sem precisar rolar manualmente cada um dos algoritmos.

Idealmente, eu gostaria de alguns módulos como o bcp (Bayesian Change Point) ou pacotes strucchange na R. Eu esperava encontrar alguns no Scipy, mas não consegui encontrar nada.

Estou surpreso que não haja instalações em:

  • statsmodels.tsa : Ferramentas de análise estatística de séries temporais
  • scikits.timeseries : Ferramentas de análise de séries temporais para estender o scipy
  • scipy.signal : ferramentas de processamento de sinal no scipy

Existem módulos com algoritmos de detecção de ponto de mudança no Python?

Erik Shilts
fonte
Também estou procurando análise de ponto de mudança em Python. Você encontrou algo útil (por exemplo, usando o RPy?).
Jack Kelly
Use o laço fundido no SPAMS spams-devel.gforge.inria.fr (possui ligações do Python).
Vladislavs Dovgalecs
alguém encontrou alguma boa biblioteca de análise de ponto de mudança até agora (implementando vários algoritmos, como segmentação binária, vizinhança de segmento)?
Maha
Para dados de séries temporais online, como uma implementação de Detecção de ponto de mudança, digamos, o changefinder pode ser dimensionada? Este parece ser um problema inerente para mim.
HoofarLotusX

Respostas:

7

Você pode experimentar a biblioteca do changefinder no PyPI. A descrição diz que é uma biblioteca de detecção de alterações on-line baseada no algoritmo ChangeFinder

Existem também algumas implementações em Python das técnicas de Detecção de ponto de mudança estatística de Michele Basseville, disponíveis em formato de tutorial neste repositório do Github.

kushan_s
fonte
3
Uma implementação em Python da Detecção Bayesiana de Mudança de Pontos também pode ser encontrada neste repositório do Github.
kushan_s
1
parece que o primeiro link na resposta (amanahuja) está incompleto? o outro que você postou no comentário é útil!
Okkhoy 02/05
6

Ainda existem algumas lacunas na biblioteca Python para o uso de pacotes estatísticos avançados. Você já tentou usar o módulo RPy? Ao usar o RPy, você pode carregar os módulos R.

breve tutorial sobre RPy: http://www.sciprogblog.com/2012/08/using-r-from-within-python.html strucchange

sk8asd123
fonte
2
esse ainda é o caso? Ainda preciso acabar usando a ponte R-Python?
Maha
alguém encontrou alguma boa biblioteca de análise de ponto de mudança até agora (implementando vários algoritmos, como segmentação binária, vizinhança de segmento)?
Maha
4

Esta implementação do pacote Python rpy2 funcionou para mim:

import numpy as np
from rpy2.robjects.packages import importr
import rpy2.robjects as robjects

r = robjects.r #allows access to r object with r.

bcp = importr('bcp') #import bayesian change point package in python

values = bcp.bcp( r.c( r.rnorm(50) , r.rnorm(50,5,1), r.rnorm(50) ) ) #use bcp function on vector

posterior_means = np.array(values[5]).flatten()
posterior_probability = np.array(values[7]).flatten()

Em seguida, você pode plotar as médias posteriores e a probabilidade posterior contra o vetor original. Veja o exemplo da função bcp em R para obter informações mais detalhadas sobre este exemplo.

Além disso, valores de indexação rígidos com um número (ou seja, valores [5]) não são ideais, mas eu estava tendo dificuldades para usar o extrator rx e rx2. Portanto, se alguém puder me esclarecer sobre um método de extração menos invasivo, eu adoraria saber!

scottlittle
fonte
3

Acabei de encontrar uma biblioteca de detecção de pontos de mudança em Python chamada "rupturas": https://arxiv.org/abs/1801.00826

Talvez isso possa ser útil.

Basileios
fonte
0

Você já experimentou a biblioteca do ChangeFinder, pode instalá-lo no linux:

pip install changefinder

também o código Bayesian_changepoint_detection GitHub pode ser encontrado aqui: Código GitHub

user185876
fonte