Módulo Python para análisis de puntos de cambio.

24

Estoy buscando un módulo de Python que realice un análisis de punto de cambio en una serie de tiempo. Hay varios algoritmos diferentes y me gustaría explorar la eficacia de algunos de ellos sin tener que manipular manualmente cada uno de los algoritmos.

Idealmente, me gustaría tener algunos módulos como el bcp (punto de cambio bayesiano) o los paquetes strucchange en R. Esperaba encontrar algunos en Scipy pero no he podido encontrar nada.

Me sorprende que no haya instalaciones en:

  • statsmodels.tsa : herramientas de análisis estadístico de series temporales
  • scikits.timeseries : herramientas de análisis de series temporales para extender scipy
  • scipy.signal : herramientas de procesamiento de señal en scipy

¿Hay algún módulo con algoritmos de detección de punto de cambio en Python?

Erik Shilts
fuente
También estoy buscando un análisis de punto de cambio en Python. ¿Encontró algo útil (por ejemplo, usando RPy?).
Jack Kelly
Use el lazo fusionado en SPAMS spams-devel.gforge.inria.fr (tiene enlaces de Python).
Vladislavs Dovgalecs
¿Alguien ha encontrado alguna buena biblioteca de análisis de punto de cambio (implementando varios algoritmos, por ejemplo, segmentación binaria, vecindad de segmento)?
Maha
Para los datos de series de tiempo en línea, ¿cómo una aplicación de detección de cambios-Point, dicen changefinder puede escalar? Esto parece ser un problema inherente para mí.
HoofarLotusX

Respuestas:

7

Puede probar la biblioteca changefinder en PyPI. La descripción dice que es una biblioteca de detección de cambios en línea basada en el algoritmo ChangeFinder

También hay algunas implementaciones de Python de las técnicas de detección de punto de cambio estadístico de Michele Basseville disponibles en formato tutorial en este repositorio de Github.

kushan_s
fuente
3
También se puede encontrar una implementación de Python de detección de punto de cambio bayesiano en este repositorio de Github.
kushan_s
1
parece que el primer enlace en la respuesta (amanahuja) está incompleto? ¡el otro que publicaste en el comentario es útil!
okkhoy
6

Todavía hay algunos vacíos en la biblioteca de Python para usar paquetes de estadísticas avanzadas. ¿Has intentado usar el módulo RPy? Cuando use RPy puede cargar módulos R.

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

sk8asd123
fuente
2
¿Sigue siendo el caso? ¿Todavía necesito terminar usando el puente R-Python?
Maha
¿Alguien ha encontrado alguna buena biblioteca de análisis de punto de cambio (implementando varios algoritmos, por ejemplo, segmentación binaria, vecindad de segmento)?
Maha
4

Esta implementación del paquete Python rpy2 funcionó para mí:

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()

Luego, puede trazar las medias posteriores y la probabilidad posterior contra el vector original. Consulte el ejemplo de la función bcp en R para obtener información más detallada sobre este ejemplo.

Además, los valores de indexación difíciles con un número (es decir, valores [5]) no son ideales, pero estaba teniendo dificultades para usar el extractor rx y rx2. Entonces, si alguien puede iluminarme con un método de extracción menos hacky, ¡me encantaría saberlo!

scottlittle
fuente
0

¿Has probado la biblioteca ChangeFinder? Puedes instalarla en Linux de la siguiente manera:

pip install changefinder

también se puede encontrar el código Bayesian_changepoint_detection GitHub aquí: Código GitHub

usuario185876
fuente