これまでは、全期間のデータを対象にしてクラスター分類をしてきた。しかし、本来の興味は異常検知/変化検知である。
次の、最高血圧の時系列プロットを見ても分かるように、時間がたつにつれて分散が広がると共に平均があがっているのが見て取れる。それをAI的に捕らえたい。
そこで、最初の50点をGaussianMixtureに当てはめて、それ以降のデータをそのGaussianMixtureモデルに当てはめてどうかを見てみよう。
import pandas as pd
df = pd.read_csv('data2.csv')
import matplotlib.pyplot as plt
initialSamples = 50
gm_pred = gm.predict(df.iloc[:initialSamples,[2,3]])
// このときの、BICは、およそ 690
score = gm.score_samples(df.iloc[:,[2,3]])
gm_sc = []
for value in score:
if value < -9.5:
gm_sc.append(0)
else:
gm_sc.append(1)
それぞれのデータについて、仮にそのscore -9.5 を境に色分けして正常(当初の50サンプルと同じ) か異常 (離れた値) かで色分けしてみた。で、時系列でみたスコアが以下のとおり。時間が経つにつれて、異常値が起きることが増えていること、異常の程度も大きくなっていることが図で見てとれる。
次の、最高血圧の時系列プロットを見ても分かるように、時間がたつにつれて分散が広がると共に平均があがっているのが見て取れる。それをAI的に捕らえたい。
そこで、最初の50点をGaussianMixtureに当てはめて、それ以降のデータをそのGaussianMixtureモデルに当てはめてどうかを見てみよう。
import pandas as pd
df = pd.read_csv('data2.csv')
import matplotlib.pyplot as plt
initialSamples = 50
gm_pred = gm.predict(df.iloc[:initialSamples,[2,3]])
// このときの、BICは、およそ 690
score = gm.score_samples(df.iloc[:,[2,3]])
gm_sc = []
for value in score:
if value < -9.5:
gm_sc.append(0)
else:
gm_sc.append(1)
それぞれのデータについて、仮にそのscore -9.5 を境に色分けして正常(当初の50サンプルと同じ) か異常 (離れた値) かで色分けしてみた。で、時系列でみたスコアが以下のとおり。時間が経つにつれて、異常値が起きることが増えていること、異常の程度も大きくなっていることが図で見てとれる。