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

Breakout Detection de Twitter

Valery Briz
September 24, 2017

Breakout Detection de Twitter

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

Valery Briz

September 24, 2017
Tweet

More Decks by Valery Briz

Other Decks in Programming

Transcript

  1. Twitter
    Breakout Detection
    Para detección de anomalías en series de datos

    View Slide

  2. $ whoami
    Valery Calderón Briz
    @valerybriz
    guatebot.com/blog
    Ingeniera en Telecomunicaciones
    Systems Development Specialist en Skyguard GPS
    Co-fundadora de @PythonGuatemala

    View Slide

  3. Soy de Guatemala

    View Slide

  4. View Slide

  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

    View Slide

  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

    View Slide

  7. ¿Cómo funciona el EDM?
    • Detección de Divergencia
    • Mean Shift
    • Ramp Up
    • Detección de cambios en la distribución

    View Slide

  8. Mean Shift

    View Slide

  9. Mean Shift

    View Slide

  10. Ramp Up

    View Slide

  11. Cambios en la distribución

    View Slide

  12. Ventajas
    • Es robusto en presencia de anomalías.
    • EDM no es paramétrico.
    • Es más rapido que otros algorítmos.

    View Slide

  13. View Slide

  14. Robusto en presencia de anomalías
    Las anomalías no son lo mismo que un Breakout

    View Slide

  15. Robusto en presencia de anomalías

    View Slide

  16. EDM no es paramétrico

    View Slide

  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

    View Slide

  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.

    View Slide

  19. View Slide

  20. Escalar datos de 0 a 1
    zi =
    xi - min(x)
    max(x) - min(x)
    Valor = ( x - ValorMinX ) / ( ValorMaxX - ValorMinX ) )

    View Slide

  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

    View Slide

  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

    View Slide

  23. Instalación del paquete
    # sudo -i R
    > install.packages("devtools")
    > devtools::install_github("twitter/BreakoutDetection")
    > library(BreakoutDetection)

    View Slide

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

    View Slide

  25. Requerimientos en Python
    # sudo pip rpy2
    # sudo pip install pandas
    # sudo pip install numpy

    View Slide

  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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  30. Obteniendo los datos relevantes
    if len(result) > 0 :
    for val in result[0]:
    print (val)
    >>>>>>
    74
    116
    147
    177
    209

    View Slide

  31. Resultados A1
    min.size=25, method='multi', beta=.001, degree=1

    View Slide

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

    View Slide

  33. Caso Práctico: Sensor de combustible

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. View Slide

  39. Preguntas / comentarios
    @valerybriz
    [email protected]

    View Slide