Testing Neural Network based Anomaly Detection on simulated data

This code generates large dataframe containing multiple timeseries, randomly adds changes in both mean and variance (anomalies), tries to train neural network to distinguish measurements belonging to the timebin under investigation from measurements in a reference time period.


In [1]:
%matplotlib inline
from time import time
import numpy as np
import pandas as pd
import random

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc('xtick', labelsize=14) 
matplotlib.rc('ytick', labelsize=14)  

import tensorflow as tf

from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle

from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout

from pandas.tseries.offsets import *

import simulated_data


Using TensorFlow backend.

parameters to set


In [2]:
# parameters of simulated data generation
n_series = 6

# lenghts of subject and reference time periods
refh = 12
subh = 1

# probability to correctly classify sample based purely on luck
chance = refh/(subh+refh)
# how much better than luck we want to be to say we detected an anomaly. Default is 5%
cut = chance + (1-chance) * 0.05

print('chance:',chance, '\tcut:', cut)
ref = refh * Hour()
sub = subh * Hour()

# number of training epochs 
epochs=60


chance: 0.9230769230769231 	cut: 0.926923076923077

generate normal data


In [3]:
df =  simulated_data.get_simulated_data()
# df =  simulated_data.get_simulated_fixed_data()
df.head()


affected: [2 5] 2017-08-03 07:36:42 2017-08-03 07:58:06
affected: [2 0 1 4] 2017-08-01 06:23:52 2017-08-01 07:06:09
affected: [1 3 2 4 5] 2017-08-05 18:30:38 2017-08-05 19:24:01
affected: [5 2 3] 2017-08-02 11:27:58 2017-08-02 12:21:16
affected: [2 1 4 0 5] 2017-08-05 07:20:14 2017-08-05 10:35:35
affected: [3 1] 2017-08-03 19:20:06 2017-08-03 20:17:46
Out[3]:
link 0 link 1 link 2 link 3 link 4 link 5 flag
2017-08-01 00:00:00 0.234309 0.098391 0.546828 0.290921 0.403015 0.245851 0
2017-08-01 00:00:01 0.230034 0.134577 0.548541 0.288414 0.399936 0.238371 0
2017-08-01 00:00:02 0.225711 0.127967 0.539710 0.287345 0.393710 0.243551 0
2017-08-01 00:00:03 0.231239 0.127110 0.543637 0.283620 0.401527 0.236844 0
2017-08-01 00:00:04 0.231674 0.141980 0.546474 0.290413 0.396456 0.235442 0

plot timeseries


In [4]:
ax = df.plot(figsize=(20,7))
ax.set_xlabel("time", fontsize=14)


Out[4]:
Text(0.5,0,'time')

create NN


In [5]:
def getModel():
    model = Sequential()
    model.add(Dense(units=n_series, input_shape=(n_series,), activation='relu' ))
#         model.add(Dropout(0.5))
    model.add(Dense(units=n_series, activation='relu'))    
#         model.add(Dropout(0.5))
    model.add(Dense(units=1, activation='sigmoid') )
    
    model.compile(loss='binary_crossentropy',optimizer='rmsprop', metrics=['accuracy'])
#         model.compile(loss='hinge', optimizer='sgd', metrics=['binary_accuracy'])
#         model.compile(loss='mse',optimizer='rmsprop', metrics=['accuracy'])
#         model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['binary_accuracy'])
        
    return model

def plotHist(hist):
    es=len(hist.history['loss'])
    x = np.linspace(0,es-1,es)
    plt.plot(x, hist.history['loss'], '--', linewidth=2, label='loss')
    plt.plot(x, hist.history['acc'], '-', linewidth=2, label='acc')
    plt.legend()
    plt.show()

This function actually checks for anomaly in one time window. It receives both referent period and subject period (one under investigation). If splits in samples in training and testing parts, shuffle them and trains model. If anomaly has been detected it plots ROC. It returns both loss and accuracy.


In [6]:
def check_for_anomaly(ref, sub, count):
    
    y_ref = pd.DataFrame([0] * ref.shape[0])
    y_ref.index=ref.index
    X_ref=ref
    del X_ref['flag']
    del X_ref['score']
    
    y_sub = pd.DataFrame([1] * sub.shape[0])
    y_sub.index=sub.index
    X_sub=sub
    del X_sub['flag']
    del X_sub['score']
    
    # separate Reference and Subject into Train and Test
    X_ref_train, X_ref_test, y_ref_train, y_ref_test = train_test_split(X_ref, y_ref, test_size=0.3, random_state=42)
    X_sub_train, X_sub_test, y_sub_train, y_sub_test = train_test_split(X_sub, y_sub, test_size=0.3, random_state=42)
    
    # combine training ref and sub samples
    X_train = pd.concat([X_ref_train, X_sub_train])
    y_train = pd.concat([y_ref_train, y_sub_train])

    # combine testing ref and sub samples
    X_test = pd.concat([X_ref_test, X_sub_test])
    y_test = pd.concat([y_ref_test, y_sub_test])
    
    X_train = X_train.reset_index(drop=True)
    y_train = y_train.reset_index(drop=True)
    
    X_train_s, y_train_s = shuffle(X_train, y_train)
    
    m=getModel()
    hist = m.fit(X_train_s.values, y_train_s.values, epochs=epochs, verbose=0, shuffle=True, batch_size=256)

    
    loss_and_metrics = m.evaluate(X_test.values, y_test.values)#, batch_size=256)
    #print(loss_and_metrics)

    if loss_and_metrics[1] > cut:# or not count%5: 
        plotHist(hist)
        
    return loss_and_metrics[1]

Looping over time intervals


In [7]:
df['score']=0.5

#find min and max timestamps

start = df.index.min()
end = df.index.max()

#round start 
start.seconds=0
start.minutes=0


# loop over them
ti=start+ref+sub
count=0
while ti < end + 1 * Minute():
    print(count)
    startt = time()
    ref_start = ti-ref-sub
    ref_end = ti-sub
    ref_df = df[(df.index >= ref_start) & (df.index < ref_end)]
    sub_df = df[(df.index >= ref_end) & (df.index < ti)]
    score = check_for_anomaly(ref_df, sub_df, count)
    df.loc[(df.index>=ref_end) & (df.index<=ti),['score']] = score
    print('\n',ti,"\trefes:" , ref_df.shape[0], "\tsubjects:", sub_df.shape[0], '\tscore:', score)
    ti = ti + sub
    count=count+1
    endt=time()
    print("took:", endt-startt)
#     if count>2: break


0
14040/14040 [==============================] - 1s 44us/step

 2017-08-01 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.58830451965332
1
14040/14040 [==============================] - 1s 41us/step

 2017-08-01 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 25.619889736175537
2
14040/14040 [==============================] - 1s 42us/step

 2017-08-01 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 25.705970287322998
3
14040/14040 [==============================] - 1s 42us/step

 2017-08-01 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.575162887573242
4
14040/14040 [==============================] - 1s 43us/step

 2017-08-01 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 25.844260215759277
5
14040/14040 [==============================] - 1s 44us/step

 2017-08-01 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 25.898683547973633
6
14040/14040 [==============================] - 1s 45us/step

 2017-08-01 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 25.72806167602539
7
14040/14040 [==============================] - 1s 48us/step

 2017-08-01 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.193366527557373
8
14040/14040 [==============================] - 1s 47us/step

 2017-08-01 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.302853107452393
9
14040/14040 [==============================] - 1s 47us/step

 2017-08-01 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.041035413742065
10
14040/14040 [==============================] - 1s 52us/step

 2017-08-01 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.330671072006226
11
14040/14040 [==============================] - 1s 55us/step

 2017-08-02 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.1665141582489
12
14040/14040 [==============================] - 1s 54us/step

 2017-08-02 01:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.211099863052368
13
14040/14040 [==============================] - 1s 52us/step

 2017-08-02 02:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.148722648620605
14
14040/14040 [==============================] - 1s 52us/step

 2017-08-02 03:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.269765377044678
15
14040/14040 [==============================] - 1s 57us/step

 2017-08-02 04:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.296448469161987
16
14040/14040 [==============================] - 1s 54us/step

 2017-08-02 05:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.738964557647705
17
14040/14040 [==============================] - 1s 61us/step

 2017-08-02 06:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.683154344558716
18
14040/14040 [==============================] - 1s 56us/step

 2017-08-02 07:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.88686752319336
19
14040/14040 [==============================] - 1s 57us/step

 2017-08-02 08:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.660454750061035
20
14040/14040 [==============================] - 1s 57us/step

 2017-08-02 09:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.94356393814087
21
14040/14040 [==============================] - 1s 63us/step

 2017-08-02 10:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.123671293258667
22
14040/14040 [==============================] - 1s 60us/step

 2017-08-02 11:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 26.871401071548462
23
14040/14040 [==============================] - 1s 61us/step
 2017-08-02 12:00:00 	refes: 43200 	subjects: 3600 	score: 0.962179487163
took: 27.227049112319946
24
14040/14040 [==============================] - 1s 60us/step

 2017-08-02 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.245615243911743
25
14040/14040 [==============================] - 1s 61us/step

 2017-08-02 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.53496217727661
26
14040/14040 [==============================] - 1s 64us/step

 2017-08-02 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.068129777908325
27
14040/14040 [==============================] - 1s 65us/step

 2017-08-02 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.293315887451172
28
14040/14040 [==============================] - 1s 70us/step

 2017-08-02 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.462425231933594
29
14040/14040 [==============================] - 1s 74us/step

 2017-08-02 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.025798797607422
30
14040/14040 [==============================] - 1s 73us/step

 2017-08-02 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.46779704093933
31
14040/14040 [==============================] - 1s 70us/step

 2017-08-02 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.8397319316864
32
14040/14040 [==============================] - 1s 74us/step

 2017-08-02 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.019274711608887
33
14040/14040 [==============================] - 1s 67us/step

 2017-08-02 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.912434339523315
34
14040/14040 [==============================] - 1s 72us/step

 2017-08-02 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.82228684425354
35
14040/14040 [==============================] - 1s 76us/step

 2017-08-03 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 27.91725778579712
36
14040/14040 [==============================] - 1s 77us/step

 2017-08-03 01:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.34944176673889
37
14040/14040 [==============================] - 1s 82us/step

 2017-08-03 02:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.47802209854126
38
14040/14040 [==============================] - 1s 78us/step

 2017-08-03 03:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.291897773742676
39
14040/14040 [==============================] - 1s 88us/step

 2017-08-03 04:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.59770917892456
40
14040/14040 [==============================] - 1s 80us/step

 2017-08-03 05:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.203879594802856
41
14040/14040 [==============================] - 1s 86us/step

 2017-08-03 06:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.468393564224243
42
14040/14040 [==============================] - 1s 80us/step

 2017-08-03 07:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.4992516040802
43
14040/14040 [==============================] - 1s 86us/step
 2017-08-03 08:00:00 	refes: 43200 	subjects: 3600 	score: 0.949715099732
took: 29.11488151550293
44
14040/14040 [==============================] - 1s 82us/step

 2017-08-03 09:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.95608353614807
45
14040/14040 [==============================] - 1s 85us/step

 2017-08-03 10:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.362744331359863
46
14040/14040 [==============================] - 1s 83us/step

 2017-08-03 11:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.958582401275635
47
14040/14040 [==============================] - 1s 83us/step

 2017-08-03 12:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.27734684944153
48
14040/14040 [==============================] - 1s 84us/step

 2017-08-03 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 28.933481216430664
49
14040/14040 [==============================] - 1s 90us/step

 2017-08-03 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.239916563034058
50
14040/14040 [==============================] - 1s 90us/step

 2017-08-03 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.11092233657837
51
14040/14040 [==============================] - 1s 85us/step

 2017-08-03 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.25264000892639
52
14040/14040 [==============================] - 1s 95us/step

 2017-08-03 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.27505922317505
53
14040/14040 [==============================] - 1s 93us/step

 2017-08-03 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.49859619140625
54
14040/14040 [==============================] - 1s 94us/step

 2017-08-03 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.6204993724823
55
14040/14040 [==============================] - 1s 94us/step
 2017-08-03 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.971866096832
took: 29.71415948867798
56
14040/14040 [==============================] - 1s 96us/step

 2017-08-03 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.366875171661377
57
14040/14040 [==============================] - 1s 101us/step

 2017-08-03 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.7621431350708
58
14040/14040 [==============================] - 1s 100us/step

 2017-08-03 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.916887998580933
59
14040/14040 [==============================] - 1s 106us/step

 2017-08-04 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.679760217666626
60
14040/14040 [==============================] - 1s 102us/step

 2017-08-04 01:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 29.65987777709961
61
14040/14040 [==============================] - 1s 100us/step

 2017-08-04 02:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.011417150497437
62
14040/14040 [==============================] - 1s 100us/step

 2017-08-04 03:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.09563946723938
63
14040/14040 [==============================] - 1s 104us/step

 2017-08-04 04:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.11803150177002
64
14040/14040 [==============================] - 1s 105us/step

 2017-08-04 05:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.74131441116333
65
14040/14040 [==============================] - 1s 102us/step

 2017-08-04 06:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.08377480506897
66
14040/14040 [==============================] - 1s 106us/step

 2017-08-04 07:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.168658018112183
67
14040/14040 [==============================] - 2s 111us/step

 2017-08-04 08:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.61607027053833
68
14040/14040 [==============================] - 2s 108us/step

 2017-08-04 09:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.247281074523926
69
14040/14040 [==============================] - 2s 111us/step

 2017-08-04 10:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.53003454208374
70
14040/14040 [==============================] - 2s 110us/step

 2017-08-04 11:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.68949794769287
71
14040/14040 [==============================] - 2s 112us/step

 2017-08-04 12:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.87776827812195
72
14040/14040 [==============================] - 1s 107us/step

 2017-08-04 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.148144721984863
73
14040/14040 [==============================] - 1s 106us/step

 2017-08-04 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.060760259628296
74
14040/14040 [==============================] - 2s 117us/step

 2017-08-04 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.895716667175293
75
14040/14040 [==============================] - 2s 110us/step

 2017-08-04 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.883031368255615
76
14040/14040 [==============================] - 2s 112us/step

 2017-08-04 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 30.92884635925293
77
14040/14040 [==============================] - 2s 118us/step

 2017-08-04 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.464872121810913
78
14040/14040 [==============================] - 2s 118us/step

 2017-08-04 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.02536940574646
79
14040/14040 [==============================] - 2s 120us/step

 2017-08-04 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.02587056159973
80
14040/14040 [==============================] - 2s 122us/step

 2017-08-04 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.379826545715332
81
14040/14040 [==============================] - 2s 121us/step

 2017-08-04 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.494905471801758
82
14040/14040 [==============================] - 2s 124us/step

 2017-08-04 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.988632202148438
83
14040/14040 [==============================] - 2s 121us/step

 2017-08-05 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.1559739112854
84
14040/14040 [==============================] - 2s 122us/step

 2017-08-05 01:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.56400418281555
85
14040/14040 [==============================] - 2s 122us/step

 2017-08-05 02:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.11379885673523
86
14040/14040 [==============================] - 2s 122us/step

 2017-08-05 03:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.053680419921875
87
14040/14040 [==============================] - 2s 126us/step

 2017-08-05 04:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 31.862928867340088
88
14040/14040 [==============================] - 2s 141us/step

 2017-08-05 05:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.14103078842163
89
14040/14040 [==============================] - 2s 132us/step

 2017-08-05 06:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.45995736122131
90
14040/14040 [==============================] - 2s 118us/step

 2017-08-05 07:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.1237678527832
91
14040/14040 [==============================] - 2s 127us/step
 2017-08-05 08:00:00 	refes: 43200 	subjects: 3600 	score: 0.971581196547
took: 32.53395652770996
92
14040/14040 [==============================] - 2s 137us/step
 2017-08-05 09:00:00 	refes: 43200 	subjects: 3600 	score: 0.946082621083
took: 32.82822275161743
93
14040/14040 [==============================] - 2s 134us/step

 2017-08-05 10:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.32757258415222
94
14040/14040 [==============================] - 2s 136us/step

 2017-08-05 11:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.58227896690369
95
14040/14040 [==============================] - 2s 139us/step

 2017-08-05 12:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.654191732406616
96
14040/14040 [==============================] - 2s 135us/step

 2017-08-05 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.73017382621765
97
14040/14040 [==============================] - 2s 138us/step

 2017-08-05 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.3121497631073
98
14040/14040 [==============================] - 2s 141us/step

 2017-08-05 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.97574186325073
99
14040/14040 [==============================] - 2s 148us/step

 2017-08-05 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.42536425590515
100
14040/14040 [==============================] - 2s 136us/step

 2017-08-05 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 32.754435300827026
101
14040/14040 [==============================] - 2s 139us/step

 2017-08-05 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.02151012420654
102
14040/14040 [==============================] - 2s 132us/step
 2017-08-05 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.958689458672
took: 33.87097668647766
103
14040/14040 [==============================] - 2s 139us/step

 2017-08-05 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.923148148148
took: 33.46074318885803
104
14040/14040 [==============================] - 2s 146us/step

 2017-08-05 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.03948926925659
105
14040/14040 [==============================] - 2s 149us/step

 2017-08-05 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.66306161880493
106
14040/14040 [==============================] - 2s 144us/step

 2017-08-05 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.15161442756653
107
14040/14040 [==============================] - 2s 145us/step

 2017-08-06 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.726112842559814
108
14040/14040 [==============================] - 2s 149us/step

 2017-08-06 01:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.38268852233887
109
14040/14040 [==============================] - 2s 141us/step

 2017-08-06 02:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.22308707237244
110
14040/14040 [==============================] - 2s 146us/step

 2017-08-06 03:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.61068320274353
111
14040/14040 [==============================] - 2s 147us/step

 2017-08-06 04:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.88345670700073
112
14040/14040 [==============================] - 2s 147us/step

 2017-08-06 05:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.85148644447327
113
14040/14040 [==============================] - 2s 151us/step

 2017-08-06 06:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.217390298843384
114
14040/14040 [==============================] - 2s 150us/step

 2017-08-06 07:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.721620321273804
115
14040/14040 [==============================] - 2s 156us/step

 2017-08-06 08:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.1355037689209
116
14040/14040 [==============================] - 2s 155us/step

 2017-08-06 09:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.15137076377869
117
14040/14040 [==============================] - 2s 155us/step

 2017-08-06 10:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.0179808139801
118
14040/14040 [==============================] - 2s 162us/step

 2017-08-06 11:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.61277508735657
119
14040/14040 [==============================] - 3s 179us/step

 2017-08-06 12:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.68808436393738
120
14040/14040 [==============================] - 2s 159us/step

 2017-08-06 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.80570077896118
121
14040/14040 [==============================] - 2s 169us/step

 2017-08-06 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.811752796173096
122
14040/14040 [==============================] - 2s 167us/step

 2017-08-06 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.011759996414185
123
14040/14040 [==============================] - 2s 167us/step

 2017-08-06 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.472952127456665
124
14040/14040 [==============================] - 2s 165us/step

 2017-08-06 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.91029214859009
125
14040/14040 [==============================] - 2s 167us/step

 2017-08-06 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.7159264087677
126
14040/14040 [==============================] - 2s 171us/step

 2017-08-06 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.85546565055847
127
14040/14040 [==============================] - 2s 175us/step

 2017-08-06 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.559621810913086
128
14040/14040 [==============================] - 2s 160us/step

 2017-08-06 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 34.85857677459717
129
14040/14040 [==============================] - 2s 174us/step

 2017-08-06 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.5662841796875
130
14040/14040 [==============================] - 2s 169us/step

 2017-08-06 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.47324562072754
131
14040/14040 [==============================] - 2s 173us/step

 2017-08-07 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.84110116958618
132
14040/14040 [==============================] - 2s 171us/step

 2017-08-07 01:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.494861364364624
133
14040/14040 [==============================] - 2s 170us/step

 2017-08-07 02:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.16131949424744
134
14040/14040 [==============================] - 3s 194us/step

 2017-08-07 03:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.33468818664551
135
14040/14040 [==============================] - 2s 169us/step

 2017-08-07 04:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.7013795375824
136
14040/14040 [==============================] - 2s 173us/step

 2017-08-07 05:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.94079113006592
137
14040/14040 [==============================] - 3s 183us/step

 2017-08-07 06:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.134281873703
138
14040/14040 [==============================] - 3s 191us/step

 2017-08-07 07:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.05728602409363
139
14040/14040 [==============================] - 3s 183us/step

 2017-08-07 08:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.998774766922
140
14040/14040 [==============================] - 2s 176us/step

 2017-08-07 09:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.375377893447876
141
14040/14040 [==============================] - 3s 190us/step

 2017-08-07 10:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.52972340583801
142
14040/14040 [==============================] - 3s 184us/step

 2017-08-07 11:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.770379304885864
143
14040/14040 [==============================] - 2s 165us/step

 2017-08-07 12:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 35.17442035675049
144
14040/14040 [==============================] - 3s 189us/step

 2017-08-07 13:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 33.64184808731079
145
14040/14040 [==============================] - 3s 192us/step

 2017-08-07 14:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.892364263534546
146
14040/14040 [==============================] - 3s 182us/step

 2017-08-07 15:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.23370361328125
147
14040/14040 [==============================] - 3s 181us/step

 2017-08-07 16:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.03225231170654
148
14040/14040 [==============================] - 3s 190us/step

 2017-08-07 17:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.91160249710083
149
14040/14040 [==============================] - 3s 189us/step

 2017-08-07 18:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 37.60565996170044
150
14040/14040 [==============================] - 3s 202us/step

 2017-08-07 19:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.762449979782104
151
14040/14040 [==============================] - 3s 203us/step

 2017-08-07 20:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 37.37763333320618
152
14040/14040 [==============================] - 3s 188us/step

 2017-08-07 21:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 36.91516375541687
153
14040/14040 [==============================] - 3s 188us/step

 2017-08-07 22:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 37.316529750823975
154
14040/14040 [==============================] - 3s 197us/step

 2017-08-07 23:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 37.32574796676636
155
14040/14040 [==============================] - 3s 186us/step

 2017-08-08 00:00:00 	refes: 43200 	subjects: 3600 	score: 0.923076923077
took: 37.11053729057312

Plots all the series, now it includes AUC values


In [8]:
ax = df.plot(figsize=(20,7))
ax.set_xlabel("time", fontsize=14)
plt.savefig('ANN_simulated_score.png')


Plots auc and shades periods were anomaly has been detected


In [9]:
fig, ax = plt.subplots(figsize=(20,7))
ax.set_xlabel("time", fontsize=14)
df.loc[:,'Detected'] = 0
df.loc[df.score>cut,'Detected']=1
df.head()
ax.plot(df.flag, 'r')
ax.plot(df.score,'g')
ax.fill( df.Detected, 'b', alpha=0.3)
ax.legend(loc='upper left')
plt.show()
fig.savefig('ANN_simulated_shaded.png')