# Data-Driven Fault Detection and Diagnosis: Challenges and Opportunities in Real-World Scenarios
## 3 Related Works
### Streaming Novelty Detection  
According to [32], two strategies exist to cope with unlabeled and unbalanced datasets. The first one considers evolving algorithms, according to which the learning phase is repeated as required to manage state detection (as new data are available), especially in case of unbalanced data. The second strategy deals with incompleteness and uncertainty of labels through semi-supervised learning approaches. A solution that integrates the two strategies may consider novelty detection in the evolving learning framework [33]. In evolving environments, observations arrive in a data stream, with no labels except for the initial training set [34]. When unlabeled observations arrive in the data streams, new labels may emerge. The main goal of incremental learning is to recognize abnormal conditions (anomalies) that have never occurred before while classifying machinery conditions (nominal and fault health conditions) as one of the known classes if there is no novel abnormality [35]. In other words, incremental learning approaches allow detection of the so-called concept drift, which occurs in the data stream when a machinery condition changes. In addition, they should also determine whether the concept drift corresponds to a known machinery operating condition or a novel operating condition. This problem, known as novelty detection in a data stream, is rarely addressed in the literature [36]. In other words, novelty detection deals with detecting new data samples that an ML model was not previously aware of [37; 38]. Novelty detection is traditionally seen as a one-class classification problem in which only the nominal class is available. Unlike anomaly detection, novelty detection does not look for one single observation differing from the nominal data. On the contrary, it looks for a set of points that are not explained by the diagnosis model [39]. In addition, novelty detection recognizes novel behaviors when two or more classes exist. In these cases, a condition is considered novel when it differs from all known classes [40]. In these cases, the problem is recognizing novelties and classifying the known observations into one of the existing classes. In [41], a threshold-based classifier is adopted, which defines a fault as unknown when none of the classifier output exceeds a defined threshold. [PERSON], [PERSON] et al. [42] introduce a methodology to discover new patterns when only nominal data are available. The methodology consists of an ensemble-based classifier, used for novelty detection, and an evolving classifier that is used for diagnosis. Similarly, the hybrid approach introduced in [43] aims at diagnosing known faults and detecting unknown faults using time-frequency features. In [44], the authors introduce a novel algorithm that learns drifting concepts from streaming and unlabeled data. An application of that algorithm to fault diagnosis is proposed in [45], where gradual and abrupt changes are first detected, and a classifier is then updated to include the new class. Other approaches to novelty detection are based on semi-supervised and unsupervised learning. In the first category, several clustering algorithms for streaming processing have been proposed, such as OnLine Novelty Detection and Drift Detection Algorithm (OLINDDA) [46], Higia [47], and MultClass learNing Algorithm for data Streams (MINAS) [48]. Basically, these algorithms generate a model using labeled data during an offline training phase; then, novel patterns made of examples that the model does not explain are recognized as unknown sets during the online phase. The second category of clustering-based approaches for novelty detection does not require any training phase. These models rely on the idea that distinct clusters correspond to distinct system conditions [49]. Therefore, each point can be either integrated into one existing clustering if the data are compatible with the existing model structure or generate a new cluster.