## 3 Problem Description and Proposed Solution
### Method of the Proposed Approach
#### 3.2.3 Optimized PC Algorithm Based on Knowledge Graph
Then, the \(t_{score}\) between \(\Gamma^{front}\) and \(\Gamma^{rear}\) can be calculated by

\[t_{score}=\frac{\mu_{\Gamma^{front}}-\mu_{\Gamma^{rear}}}{\sqrt{\frac{\varphi_ {\Gamma^{front}}+\sigma_{\Gamma^{rear}}^{2}}{n}}} \tag{3}\]

where \(n\) is the window size, \(\mu_{\Gamma^{front}}\) and \(\mu_{\Gamma^{rear}}\) are the mean values of \(\Gamma^{front}\) and \(\Gamma^{rear}\), and \(\sigma_{\Gamma^{front}}\) and \(\sigma_{\Gamma^{rear}}\) are their variance values. If \(t_{score}>v\), where \(v\) is the statistical test result for a specific \(\alpha\) at \(n-1\) degrees of freedom, this means that the KPIs have significantly increased or decreased between the two windows. When \(t_{score}\) is positive, the KPI decreases significantly, and, when \(t_{score}\) is negative,the KPI increases significantly. Figure 4 shows an example of detecting changes in a service's KPI with the \(t\)-test method. The green dots on the performance data represent the identified KPI increases, and the red dots represent the identified KPI decreases. We can further convert the performance change sequence to a ternary sequence, as shown in Figure 5. Among them, \"0\" indicates that the performance index has not changed significantly, \"1\" indicates that the KPI value has increased, and \"-1\" indicates that the KPI value has decreased. That is, the performance change series \(E_{i}\) could be denoted as \(E_{i}=(000001000000-1000000100000-100000)\). Finally, for each edge in the causality graph, as shown in Equation (4), the Pearson coefficient of the two KPIs can be calculated by using the performance change sequence \(E_{1}\) and \(E_{2}\). This way, the correlation weight between the performance indicators is obtained from their performance changes, where \(E_{1}\) and \(E_{2}\) are performance change sequences, \(Cov(E_{1},E_{2})\) is the covariance, and \(Var(E)\) is the variance of the performance change sequence:

\[Weight=\frac{cov(E_{1},E_{2})}{\sqrt{var(E_{1}),var(E_{2})}} \tag{4}\]

### Root Cause Identification

The identification of the root cause can be regarded as a path search problem. There are many ways to solve this problem. In this study, we adopted a search algorithm based on a breadth-first search (BFS) algorithm; its pseudocode is shown in Algorithm 2. The main purpose of the algorithm is to create a queue that will store path(s) of type vectors, initialize the queue with the first path starting from the source, and then run a loop until the queue is not empty. It will get the frontmost path from the queue and then determine whether the last node of that path is a destination that is the vertex that has no predecessor: if true, then print the path and run a loop for all the vertices connected to the current vertex. Figure 4: Performance changes identification by \(t\)-test. Figure 5: Performance change ternary sequence. ```
Input: Causality graph \(G\),Source vertex \(SRC\) Output: The linked paths \(LPATH\)  INIT a queue \(Q\) to store the current path  INIT a temporary stack \(path\) to store the current path  PUSH vertex \(SRC\) to \(path\)  PUSH \(path\) to \(Q\)  INIT a string list \(LPATH\) while\(Q\
eq\emptyset\)do \(qpath=Dequeue(Q)\)  GET the last vertex \(LAST\) from \(qpath\) if\(LAST=SRC\)then  APPEND \(SRC\) to \(LPATH\) endif ifthere is no predecessor of \(LAST\)then for vertex \(v\) in \(path\)do \(tempStr\) \(tempStr+``\)-\(>\)\" \(tempStr+v\)  append \(tempStr\) to \(LPATH\) endfor endif for vertex \(v\) in \(G\)do if\(v\) is not in \(path\)then  PUSH \(v\) to \(path\)  ENQUEUE \(path\) to \(Q\) endif endfor endwhile
```

**Algorithm 2**Causal search algorithm based on BFS method

When an O&M subject incurs an abnormal situation, the possible root causes of the abnormal situation can be deduced by the BFS-based causal search algorithm.