-
Notifications
You must be signed in to change notification settings - Fork 0
/
Anomaly Detection
31 lines (24 loc) · 1.01 KB
/
Anomaly Detection
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
import matplotlib.pyplot as plt
def detect_anomalies(data):
mean = np.mean(data)
std = np.std(data)
# Threshold selection using Median Absolute Deviation (MAD)
mad = np.median(np.abs(data - mean))
threshold = 3 * mad
# Detect anomalies based on the threshold
anomalies = data[np.abs(data - mean) > threshold]
return anomalies
# Generate sample data
data = np.concatenate((np.random.normal(0, 1, 900), np.random.normal(5, 1, 100)))
# Detect anomalies
anomalies = detect_anomalies(data)
print("Detected Anomalies:", anomalies)
# Plot the data and detected anomalies
plt.plot(data, label='Data')
plt.scatter(np.arange(len(data)), anomalies, color='red', label='Anomalies')
plt.axhline(y=np.mean(data), color='green', linestyle='--', label='Mean')
plt.axhline(y=np.mean(data) + threshold, color='orange', linestyle='--', label='Upper Threshold')
plt.axhline(y=np.mean(data) - threshold, color='orange', linestyle='--', label='Lower Threshold')
plt.legend()
plt.show()