Breakout Detection de Twitter

385c140081aadec8036ee8072a141f73?s=47 Valery Briz
September 24, 2017

Breakout Detection de Twitter

Detección de breakouts en series de datos respecto al tiempo

385c140081aadec8036ee8072a141f73?s=128

Valery Briz

September 24, 2017
Tweet

Transcript

  1. 2.

    $ whoami Valery Calderón Briz @valerybriz guatebot.com/blog Ingeniera en Telecomunicaciones

    Systems Development Specialist en Skyguard GPS Co-fundadora de @PythonGuatemala
  2. 4.
  3. 5.

    Breakout Detection Este paquete desarrollado en el Lenguaje R por

    Twitter sirve para detectar cambios o anomalías en una serie de datos respecto al tiempo. Pueden encontrar más información del paquete en: http://bit.ly/bkoutinthewild
  4. 6.

    ¿Cómo funciona el Breakout Detection? Usualmente las anomalías o breakouts

    están caracterizadas por dos estados que se mantienen y un período de transición intermedia. Para detectar esto el paquete utiliza una técnica de estadísticas llamada E-Divisive with Medians (EDM) que es utilizada ampliamente para detectar cambios de nivel o saltos. Documentación en: http://bit.ly/edmBreakingBad
  5. 7.

    ¿Cómo funciona el EDM? • Detección de Divergencia • Mean

    Shift • Ramp Up • Detección de cambios en la distribución
  6. 10.
  7. 12.

    Ventajas • Es robusto en presencia de anomalías. • EDM

    no es paramétrico. • Es más rapido que otros algorítmos.
  8. 13.
  9. 17.

    Data Points E-Divisive EDM 6,000 29 Min. 24 Seg. 600

    7 Seg. 1 Seg. 3.5x más rápido que otros algoritmos Fuente: https://anomaly.io/anomaly-detection-using-twitter-breakout/ De detección de Breakouts
  10. 18.

    Desventajas • Se debe combinar con otros algorítmos si se

    necesita descartar breakouts específicos. • Es necesario encontrar la combinación correcta de parametros dependiendo de la serie de datos.
  11. 19.
  12. 20.

    Escalar datos de 0 a 1 zi = xi -

    min(x) max(x) - min(x) Valor = ( x - ValorMinX ) / ( ValorMaxX - ValorMinX ) )
  13. 21.

    1 Data: Serie de datos que serán analizados. 2 Min.size:

    El valor minimo de observaciones entre puntos de cambio. 3 Method: "amoc" (al menos un cambio) o "multi" (multiples cambios). 4 Degree: El grado de regresión polinomial. 5 Beta: Constante paraun futuro control en la penalización. 6 Plot: Este indica si se generará un Ploteo luego de la ejecución. Las variables del algoritmo
  14. 22.

    Instalación de R # sudo apt-key adv --keyserver keyserver.ubuntu.com --

    recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9 # sudo add-apt-repository 'deb [arch=amd64,i386] https://cran.rstudio.com/bin/linux/ubuntu xenial/‘ # sudo apt-get update # sudo apt-get install r-base # sudo apt-get install libssl-dev
  15. 23.

    Instalación del paquete # sudo -i R > install.packages("devtools") >

    devtools::install_github("twitter/BreakoutDetection") > library(BreakoutDetection)
  16. 24.

    Código en R library(BreakoutDetection) Detect <- function(tsdata, min, met, deg

    ) { res = breakout(tsdata, min.size=min, method=met, beta=.001, degree=deg, plot=FALSE) return(res) }
  17. 25.

    Requerimientos en Python # sudo pip rpy2 # sudo pip

    install pandas # sudo pip install numpy
  18. 26.

    Importando desde R from rpy2.robjects.packages import SignatureTranslatedAnonymousPackage from rpy2.robjects.packages import

    importr from rpy2.robjects.vectors import IntVector, FloatVector import rpy2.robjects as ro
  19. 27.

    Obteniendo los datos mydata = [] with open('datos.csv', 'r') as

    csvfile: dat = csv.reader(csvfile) for line in dat: mydata.append(float(line[0]))
  20. 28.

    Importando desde R minsize = 30 method = 'multi' degree

    = 0 with open('Codigo.R') as code: rcode = os.linesep.join(code.readlines()) wrapper = SignatureTranslatedAnonymousPackage(rcode, "Codigo")
  21. 29.

    Ejecutando la función result = wrapper.Detect( FloatVector(mydata), minsize, method, degree)

    print (result) >>>>>> $loc [1] 74 116 147 177 209 $time [1] 0.013 $pval [1] NA
  22. 30.

    Obteniendo los datos relevantes if len(result) > 0 : for

    val in result[0]: print (val) >>>>>> 74 116 147 177 209
  23. 38.