[[次元削減により根本原因メトリクスを誤削減しなければFault Localizationの精度が向上する]]の仮説より、根本原因メトリクスを比較すると、異なる形状や相関をもつメトリクスが混在している一方で、変化点は同一であるという洞察がある。
故障発生時には、少なくとも原因コンポーネント内では異常が即座に伝搬し、複数のメトリクスにほぼ同時刻に異常が出現すると仮定する。そこで、各メトリクスを変化点を特徴量とみなし、クラスタリングする。最大のメンバー数をもつクラスタと時間的に連続する隣接クラスタ群は原因候補であるとみなす。
## 検証結果
- [[メトリクスの時系列の変化点に基づくクラスタリング]]
## 検証経緯
- HDBSCANはどうしてもノイズクラスタに根本原因メトリクスが入ることがある。JVMのFree Physical Memory sizeとか。
- 同一変化点をもつ最大のクラスタから変化点位置が連続するメトリクス群を抽出する
- 時系列補完により形状が崩れているので、変化点位置がずれてしまう問題がある。そこで、nanの開始位置を変化点とすればよい。フェーズ1では、時系列の右端にnanがあれば異常とする。
- 最大クラスタとして、不正解の変化点クラスタが選ばれるケースがある。HDBSCANだとしかたがない。
![[Pasted image 20230525122548.png|600]]
1. 隣接クラスタを含めた最大クラスタを選ぶように修正する
- そもそもHDBSCANではなく[[階層型クラスタリング]]で距離閾値を2にすればいいのではないか。DBSCANのepsを2にするのでもよい?
2. クラスタの密度 x クラスタサイズで選択する
- クラスタの凝集度 [[クラスタ内平方和|SSE]]を使う
- SSEの逆数を使う? SSEは0になることがある。 1/(SSE + 1)
- cpu, memoryで選択を誤るケースがでた。
3. SLIの変化点の近傍のクラスタを選択する
- 根本原因メトリクスと同時に変化するメトリクスが少ないケースなどに有用
- ![[Pasted image 20230526213146.png|500]]
- SLIの変化点とcentroidの距離 クラスタサイズ
- クラスタサイズは比例。距離の二乗に反比例。距離をデータ点数にすると、メトリクス取得間隔に左右されてしまう。
- 最大クラスタとして、メンバー数が少ないが凝集度の高いクラスタが選ばれるようになってしまった。
- ![[Pasted image 20230526160121.png]]
- [[HDBSCANによる外れ値検出]]により、クラスタ内の外れ値 (nan)を除外する -> やめた
- cluster_selection_methodを"leaf"にしてクラスタを細かくしつつ、cluster_selection_epsilon=2により、変化点の距離が2未満のサンプルは同じクラスタに併合するようにした。
- centroid 161に対して、bkp 90や121が紛れ込むようになった。これらのデータはクラスタの所属probabilityが低いあるいは外れ値スコアが高いので、クラスタから除外する。
- bkp 163と165の2クラスタが形成された。163のクラスタを選択したいが、クラスタサイズは165のほうが大きい。近傍に複数のクラスタがある場合、より過去のbkpをもつクラスタを選択したい。そのため、SLIメトリクスの変化点に最も近いクラスタを選ぶ。
- SLIメトリクスの変化点は多変量時系列の変化点として求める。 -> [[TSifter 変化点検出の精度向上]]の問題で間違えることがある。SPOTで検出した外れ値の最初の値を基準点として採用する。
- SPOTでも以下のように外れ値がずれることがある。
- ![[Pasted image 20230527232817.png]]
- SPOT/nsigmaの外れ値位置を特徴量ベクトルとしてクラスタリングする?
- クラスタの異常度合計が最大のクラスタを選択する
- cluster_selection_epsilon=3として2つの候補クラスタをまとめることにする。 =>
- 変化点がノイズでずれるケースがあったため、平滑化する。->補正しきれない
- ![[Pasted image 20230527111154.png|300]]![[Pasted image 20230527111109.png|300]]
- 多変量時系列の変化点と各単変量時系列の変化点との距離ベクトルに対する外れ値除外 を考えたが、多変量時系列の変化点はノイズメトリクスに敏感になってしまう。bkp=101とかになるときもある。
- 密度計算方法で、SSEをやめて、[[分散]]にする?
---
- 正常系列はやはりフェーズ1で除去したほうがよさそう。以下のような正常系列が予測クラスタに混ざってしまう。
- ![[Pasted image 20230526215906.png|200]]