시간 시퀀스 데이터 변화점 검출
■ 설치 시간 시퀀스 데이터의 변화점 검출
시간 시퀀스 데이터의 변화점 검출 방법을 배웠기 때문에 필기를 합니다.
문제 설정
임계값을 초과하면 이상을 알리는 구조가 있습니다.
단발에서 임계값을 초과한 것이 아니라 계속 임계값을 초과한 경우에만
때로는 이상을 검출하고 싶을 때도 있다.(서버 또는 사이트 응답 etc)
단순히 임계값을 설정하면 단발의 임계값 초과도 줍는다
불필요한 경보가 나타날 것이다.
따라서 변화점 검출 방법을 사용한다
임계값을 계속 초과하는 경우에만 검사하는 방법을 설치해 보십시오.
방법
변화점 검측 방법을 통해 발견한 것은 다음과 같다일
1.과거의 데이터에 근거하여 예측치를 계산하여 실측치와 예측치의 차이를 계산하는 방법
2.k근린법 사용 방법
1, SARIMA 모델에서 예측 값을 계산하는 방법
매개 변수 조정이 매우 어렵고, 설치도 상당히 번거롭기 때문이다
이번에는 멈췄어요.(설치가 번거로우면 업무가 어렵다)
이 문장에서k근접 방법을 사용해 보십시오.
우선 데이터를 준비하세요.
어떤 주식 가격의 시간 서열 데이터를 가정하다.(일시)import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#パラメータ
myu1=10 #異常発生前の平均
myu2=20 #異常発生後の平均
sd=1 #標準偏差
#時系列データ 正規分布に従う時系列データをそれぞれ100個
data1 = np.random.normal(myu1,sd,100)
data2 = np.random.normal(myu2,sd,100)
#可視化
data=np.hstack((data1,data2))
df = pd.DataFrame(data)
plt.plot(df)
plt.xlabel("time")
plt.ylabel("Stock Price")
K 부근법으로 배우기 전에 일부 시간 시퀀스 데이터를 작성한다.
제작 시간에 가까운 데이터를 종합하다.from sklearn.neighbors import KNeighborsClassifier
#時間的に近いデータをまとめる。
x = data.reshape(1,-1) #shape(1,190)
M = 10
Train_data=x[:, 0:M] #shape(1,M)
for i in range(1, x.shape[1]-M):
X = x[:, i:i+M] #shape(1,10)
Train_data=np.vstack((Train_data,X))
Train_data.shape #(190, 10)
코드에서 보듯이 x에 시간 i에서 시간 i+M까지의 시간 시퀀스 데이터를 저장합니다.
i를 0(200-M)에서 Trainu로 이동x를 데이터에 연결
Train_데이터를 만들기 때문에 Trainu데이터의 크기는 (190, 10)입니다.
이것은 데이터가 190개의 M=10비트라고 생각한다.
K 근처법으로 해봐.
clf = KNeighborsClassifier(n_neighbors=2) #近傍点(自分と自分以外)を探す
clf.fit(Train_data, np.zeros(Train_data.shape[0])) #ラベルはすべて0とする
dist, ind = clf.kneighbors(X)
distances=dist[:,1]
겸사겸사 말씀드리지만, 안에는 이런 느낌입니다.dist[:5,:]#dist:近傍点との距離 [自分, 自分の次に距離が近いデータ]
array([[0. , 1.37597833],
[0. , 1.38991142],
[0. , 1.60854258],
[0. , 1.61022187],
[0. , 1.94213876]])ind[:5,:] #ind:近傍点の時間[自分, 自分の次に距離が近いデータ]
array([[ 0, 26],
[ 1, 27],
[ 2, 67],
[ 3, 68],
[ 4, 73]])
그리고 아래와 같이 한도값을 정하고 변화점을 찾습니다.thred=8 #仮
henka=ind[distances > thred][-1,0]
plt.plot(df)
plt.axvline(x=henka, color='red', linestyle='--')
plt.xlabel("time")
plt.ylabel("Stock Price")
그래서 변화점을 측정할 수 있다.
이런 방법을 사용할 때
/임계값을 위에서 아래로 결정해야 합니다.
데이터의 경향을 고려해 결정에서 인간이 설정한다.
·변화점 전후의 데이터는 평균적으로 큰 차이가 없는 상황.
⇒ 데이터의 표준 편차가 비교적 클 때.
이런 상황에서 상술한 예처럼 변화점을 멋지게 측정할 수는 없다.
자신의 이후 가장 가까운 점을 변화점 부근으로 식별하기 어렵기 때문이다.
⇒ 데이터의 표준 편차가 적은 경우.
어느 정도인지에 따라 검출될 수 있습니까?
다른 거 있으면 알려주세요. ↩
Reference
이 문제에 관하여(시간 시퀀스 데이터 변화점 검출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/umez/items/a23f0b0a7e6028c2244b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#パラメータ
myu1=10 #異常発生前の平均
myu2=20 #異常発生後の平均
sd=1 #標準偏差
#時系列データ 正規分布に従う時系列データをそれぞれ100個
data1 = np.random.normal(myu1,sd,100)
data2 = np.random.normal(myu2,sd,100)
#可視化
data=np.hstack((data1,data2))
df = pd.DataFrame(data)
plt.plot(df)
plt.xlabel("time")
plt.ylabel("Stock Price")
from sklearn.neighbors import KNeighborsClassifier
#時間的に近いデータをまとめる。
x = data.reshape(1,-1) #shape(1,190)
M = 10
Train_data=x[:, 0:M] #shape(1,M)
for i in range(1, x.shape[1]-M):
X = x[:, i:i+M] #shape(1,10)
Train_data=np.vstack((Train_data,X))
Train_data.shape #(190, 10)
clf = KNeighborsClassifier(n_neighbors=2) #近傍点(自分と自分以外)を探す
clf.fit(Train_data, np.zeros(Train_data.shape[0])) #ラベルはすべて0とする
dist, ind = clf.kneighbors(X)
distances=dist[:,1]
dist[:5,:]#dist:近傍点との距離 [自分, 自分の次に距離が近いデータ]
ind[:5,:] #ind:近傍点の時間[自分, 自分の次に距離が近いデータ]
thred=8 #仮
henka=ind[distances > thred][-1,0]
plt.plot(df)
plt.axvline(x=henka, color='red', linestyle='--')
plt.xlabel("time")
plt.ylabel("Stock Price")
Reference
이 문제에 관하여(시간 시퀀스 데이터 변화점 검출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/umez/items/a23f0b0a7e6028c2244b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)