Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. Twitter Breakout Detection Para detección de anomalías en series de

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

    Systems Development Specialist en Skyguard GPS Co-fundadora de @PythonGuatemala
  3. Soy de Guatemala

  4. None
  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
  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
  7. ¿Cómo funciona el EDM? • Detección de Divergencia • Mean

    Shift • Ramp Up • Detección de cambios en la distribución
  8. Mean Shift

  9. Mean Shift

  10. Ramp Up

  11. Cambios en la distribución

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

    no es paramétrico. • Es más rapido que otros algorítmos.
  13. None
  14. Robusto en presencia de anomalías Las anomalías no son lo

    mismo que un Breakout
  15. Robusto en presencia de anomalías

  16. EDM no es paramétrico

  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
  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.
  19. None
  20. Escalar datos de 0 a 1 zi = xi -

    min(x) max(x) - min(x) Valor = ( x - ValorMinX ) / ( ValorMaxX - ValorMinX ) )
  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
  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
  23. Instalación del paquete # sudo -i R > install.packages("devtools") >

    devtools::install_github("twitter/BreakoutDetection") > library(BreakoutDetection)
  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) }
  25. Requerimientos en Python # sudo pip rpy2 # sudo pip

    install pandas # sudo pip install numpy
  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
  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]))
  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")
  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
  30. Obteniendo los datos relevantes if len(result) > 0 : for

    val in result[0]: print (val) >>>>>> 74 116 147 177 209
  31. Resultados A1 min.size=25, method='multi', beta=.001, degree=1

  32. Resultados A2 min.size=50, method='multi', beta=.001, degree=2

  33. Caso Práctico: Sensor de combustible

  34. Resultados B1 min.size=100, method='multi', beta=.001, degree=1

  35. Resultados B2 min.size=30, method='multi', beta=.001, degree=2

  36. Resultados B3 min.size=30, method='multi', beta=.001, degree=0

  37. Resultados B4 min.size=30, method='multi', beta=.001, degree=1

  38. None
  39. Preguntas / comentarios @valerybriz valerybriz@gmail.com