## サマリ
- [[TSifter実験 因果グラフ構築 20220310-02]] により、因果グラフ自体のAccuracy向上が限界に来ている。
- [[PCアルゴリズム]]のCIによるエッジ削除フェーズで、削除してほしくない辺が削除されている。
## トピック
### 1. 因果グラフにおけるAccuracyの定義
- 故障の種類と注入箇所から、正解となる因果グラフ内の経路候補を事前に決定し、実測された経路がその経路候補に入っていれば正解、入っていなければ不正解としている。
- 実装:[Evaludate accuracy of causal graph by yuuki · Pull Request #34 · ai4sre/meltria-analyzer · GitHub](https://github.com/ai4sre/meltria-analyzer/pull/34/files#diff-ef7e1ad79026fa04a7236c95615045d9d3295274397eb23b9a0a17593207adccR186)
### 2. 事前知識によるエッジ方向の修正
[[PCアルゴリズム]]で方向づけ完了後に事前知識によりエッジの方向を修正するようにした。
- サービス間メトリックでは、サービス間の通信依存の方向にあわせ、コンテナ間でも同様にする
- 同一コンテナ内のコンテナメトリック間のエッジはすべて双方向にする
- サービスメトリック(X)とそのサービス内のコンテナメトリック(Y)では、Y → X となるようにした。
Accuracyがかなり向上した。
### 3. CIによるエッジ誤削除
- [[TSifter実験 因果グラフ構築 20220310-02]]
- 誤削除が起きる条件をまだあまり調査できていない。
- [[Fisher-Z検定]]以外のものを検討するかどうか
- [[PCアルゴリズム]]ではなく、[[2020__IPCCC__FluxInfer―Automatic Diagnosis of Performance Anomaly for Online Database System|FluxInfer]]の因果グラフ探索手法を使っても良い。
### 4. 因果グラフのインタラクティブな可視化
- pyvis、Bokeh、Plotlyを試している。[[NetworkX]]から可視化するには、pyvisがとりあえずお手頃であることはわかった。
- 時系列グラフもセットで可視化しておき、Neptuneでトラッキングしたい
### 5. 関連研究 FluxRank
- [[NetManAIOps]]の [[2019__ISSRE__FluxRank―A Widely-Deployable Framework to Automatically Localizing Root Cause Machines for Software Service Failure Mitigation]]
- 異常検知のステップ1とクラスタリングのステップ2で構成されている。
- ステップ1の個々の単変量時系列に対する[[異常検知]]
- (1) 絶対微分を適用して変化開始時刻を特定
- (2) [[カーネル密度推定]]を使用して変化度を決定
- ステップ2の多変量時系列に対する[[クラスタリング]]
- [[DBSCAN]]
- ただし、Table 1によると、メトリクスの種類ごとにカーネル関数を選択している。
- 後継論文の [[2020__IPCCC__FluxInfer―Automatic Diagnosis of Performance Anomaly for Online Database System]]では、FluxRankをカーネル関数の選択やチューニングをメトリクスの種類ごとに必要として批判している。
### 6. 今後の予定
- エッジ誤削除の調査