Lære forskellige teknikker til afsløring af anomalier

Lære forskellige teknikker til afsløring af anomalier

Kildeknude: 1867449

Vi brugte Standard Scaler til at gøre vores data normale og plottede en scatter-graf.

Nu vil vi importere DBSCAN for at give point til klyngerne. Hvis det mislykkes, vil det vise -1.

Nu har vi resultaterne, men hvordan tjekker vi hvilken værdi der er min, max og om vi har -1 værdier? Vi vil bruge arg min-værdien til at kontrollere den mindste værdi i klyngen.

Vi kan se fra resultatet seks værdier, som er -1.

Lad os nu plotte en spredningsgraf.

Ovenstående metoder, vi anvendte, er på univariate outliers.

For påvisning af multivariat-outliers er vi nødt til at forstå de multivariate-outliers.

For eksempel tager vi bilaflæsninger. Vi har set to aflæsningsmålere, den ene til kilometertælleren, som registrerer eller måler den hastighed, hvormed køretøjet bevæger sig, og den anden er rpm-aflæsningen, som registrerer antallet af omdrejninger, som bilhjulet foretager i minuttet.

Antag, at kilometertælleren viser i området 0-60 mph og rpm i 0-750. Vi antager, at alle de værdier, der kommer, skal korrelere med hinanden. Hvis kilometertælleren viser en hastighed på 50 og rpm viser 0 indtag, er aflæsningerne forkerte. Hvis kilometertælleren viser en værdi mere end nul, betyder det, at bilen bevægede sig, så omdrejningstallet burde have højere værdier, men i vores tilfælde viser det en 0-værdi. dvs. Multivariate outliers.

C. Mahalanobis Afstandsmetode

I DBSCAN brugte vi euklidiske afstandsmålinger, men i dette tilfælde taler vi om Mahalanobis-afstandsmetoden. Vi kan også bruge Mahalanobis-afstand med DBSCAN.

DBSCAN(eps=0.5, min_samples=3, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)

Hvorfor er euklidisk uegnet til entiteter relateret til hinanden? Euklidisk afstand kan ikke finde eller vil give forkerte data om, hvor tæt de to punkter er.

Mahalanobis-metoden bruger afstanden mellem punkter og fordeling, der er rene data. Euklidisk afstand er ofte mellem to punkter, og dens z-score beregnes ved x minus middelværdi og divideret med standardafvigelse. I Mahalanobis er z-score x minus middelværdien divideret med kovariansmatrixen.

Derfor, hvilken effekt har dividering med kovariansmatricen? Kovariansværdierne vil være høje, hvis variablerne i dit datasæt er meget korrelerede.

Tilsvarende, hvis kovariansværdierne er lave, reduceres afstanden ikke signifikant, hvis dataene ikke er korrelerede. Det gør det så godt, at det adresserer både skalaen og sammenhængen mellem variablerne.

Kode

Datasæt kan tages fra Anomaly-/caret.csv at main · aster28/Anomaly- (github.com)

df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()

Vi definerede funktionen afstand som x= Ingen, data= Ingen og Kovarians = Ingen. Inde i funktionen tog vi middelværdien af ​​data og brugte kovariansværdien af ​​værdien der. Ellers vil vi beregne kovariansmatrixen. T står for transponere.

For eksempel, hvis matrixstørrelsen er fem eller seks, og du vil have den i to variable, så skal vi transponere matrixen.

np.random.multivariate_normal(mean, cov, size = 5)
array([[ 0.0509196, 0.536808 ], [ 0.1081547, 0.9308906], [ 0.4545248, 1.4000731], [ 0.9803848, 0.9660610], [ 0.8079491 , 0.9687909]])
np.random.multivariate_normal(mean, cov, size = 5).T
array([[ 0.0586423, 0.8538419, 0.2910855, 5.3047358, 0.5449706], [ 0.6819089, 0.8020285, 0.7109037, 0.9969768, -0.7155739]])

Vi brugte sp.linalg, som er Lineær algebra og har forskellige funktioner, der skal udføres på lineær algebra. Den har inv-funktionen til inversion af matrixen. NumPy prik som middel til multiplikation af matrixen.

importer scipy som sp def distance(x=Ingen, data=Ingen, cov=Ingen): x_m = x - np.mean(data) hvis ikke cov: cov = np.cov(data.values.T) inv_cov = sp. linalg.inv(cov) left = np.dot(x_m, inv_cov) m_distance = np.dot(left, x_m.T) return m_distance.diagonal() df_g= df[['carat', 'depth', 'price' ]].head(50) df_g['m_distance'] = distance(x=df_g, data=df[['carat', 'depth', 'price']]) df_g.head()

B. Tukeys metode til afvigende påvisning

Tukey metode kaldes også ofte Box and Whisker eller Box plot metode.

Tukey-metoden bruger det øvre og nedre område.

Øvre område = 75. Percentil -k*IQR

Nedre område = 25. Percentil + k* IQR

Lad os se vores Titanic-data med aldersvariabel ved hjælp af et boksplot.

sns.boxplot(titanic['alder'].værdier)

Vi kan se på billedet, at boksklatten skabt af Seaborn viser, at mange prikker mellem 55 og 80 år er afvigere, der ikke er inden for kvartilerne. Vi vil detektere nedre og øvre område ved at lave en funktion outliers_detect.

def outliers_detect(x, k = 1.5): x = np.array(x).copy().astype(float) first = np.quantile(x, .25) third = np.quantile(x, .75) # IQR-beregning iqr = tredje - første #Øvre område og nedre område nedre = første - (k * iqr) øvre = tredje + (k * iqr) returnere nedre, øvre
outliers_detect(titanic['alder'], k = 1.5)
(2.5, 54.5)

D. Detektion af PyCaret

Vi vil bruge det samme datasæt til detektion af PyCaret.

fra pycaret.anomaly import * setup_anomaly_data = setup(df)

Pycaret er en open source maskinlæring, som bruger en uovervåget læringsmodel til at opdage outliers. Det har en get_data-metode til at bruge datasættet i selve pycaret, set_up til forbehandlingsopgave før detektion, tager normalt dataramme, men har også mange andre funktioner som ignore_features osv.

Andre metoder create_model til brug af en algoritme. Vi vil først bruge Isolation Forest.

ifor = create_model("iforest") plot_model(ifor) ifor_predictions = predict_model(ifor, data = df) print(ifor_predictions) ifor_anomali = ifor_forudsigelser[ifor_forudsigelser["Anomali"] == 1] print(ifor_anomaly.head()) print( ifor_anomaly.shape)

Anomali 1 angiver afvigelser, og anomali 0 viser ingen afvigelser.

Den gule farve her indikerer afvigelser.

Lad os nu se en anden algoritme, K Nearest Neighbors (KNN)

knn = create_model("knn") plot_model(knn) knn_pred = predict_model(knn, data = df) print(knn_pred) knn_anomaly = knn_pred[knn_pred["Anomaly"] == 1] knn_anomaly.head() knn_anomaly.shape

Nu vil vi bruge en klyngealgoritme.

clus = create_model("cluster") plot_model(clus) clus_pred = predict_model(clus, data = df) print(clus_pred) clus_anomaly = clus_predictions[clus_pred["Anomaly"] == 1] print(clus_anomaly.head()) clus_anomaly. form

E. Anomali Detektion af PyOD

PyOD er ​​et pythonbibliotek til påvisning af outliers i multivariate data. Det er godt både for superviseret og uovervåget læring.

fra pyod.models.iforest import IForest fra pyod.models.knn import KNN 

Vi importerede biblioteket og algoritmen.

fra pyod.utils.data import generere_data fra pyod.utils.data import evaluate_print fra pyod.utils.example import visualize train= 300 test=100 forurene = 0.1 X_train, X_test, y_train, y_test = generere_data(n_train=tog, n_test=test , n_features=2,contamination=contamination,random_state=42)
cname_alg = 'KNN' # navnet på algoritmen er K Nærmeste naboer c = KNN() c.fit(X_train) #Tilpas algoritmen y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.predicty(X_tests)s c.decision_function(X_test) print("Træningsdata:") evaluate_print(cname_alg, y_train, y_train_scores) print("Test Data:") evaluate_print(cname_alg, y_test, y_test_scores) visualize(cname_alg, X_train, X,_test y_trainpred,y_testpred, show_figure=True, save_figure=True)

Vi vil bruge IForest-algoritmen.

fname_alg = 'IForest' # navnet på algoritmen er K Nærmeste naboer f = IForest() f.fit(X_train) #Tilpas algoritmen y_train_pred = c.labels_ y_train_scores = c.decision_scores_ y_test_pred = c.scores_pred = c.score c.decision_function(X_test) print("Træningsdata:") evaluate_print(fname_alg, y_train_pred, y_train_scores) print("Test Data:") evaluate_print(fname_alg, y_test_pred, y_test_scores) visualisere y_train_pred,y_test_pred, show_figure=True, save_figure=True)

F. Anomali påvisning af profet

Vi vil bruge flypassagerdatasættet med tidsserier prophet/example_air_passengers.csv at main · aster28/prophet (github.com)

import profet fra profet import prognoser fra profet import Profet m = Profet()
data = pd.read_csv('air_pass.csv') data.head()
data.columns = ['ds', 'y'] data['y'] = np.where(data['y'] != 0, np.log(data['y']), 0)

Log i y-kolonnen aktiverer ingen negativ værdi. Vi opdelte vores data i tog, test og gemte forudsigelsen i den variable prognose.

train, test= train_test_split(data, random_state =42) m.fit(train[['ds','y']]) forecast = m.predict(test) def detect(forecast): forcast = forecast[['ds] ', 'yhat', 'yhat_lower', 'yhat_upper']].copy() forcast['real']= data['y'] forcast['anomaly'] =0 forcast.loc[forcast['real'] > forcast['yhat_upper'], 'anomaly']=1 forcast.loc[forcast['real']< forcast['yhat_lower'], 'anomaly']=-1 forcast['imp']=0 in_range = forcast ['yhat_upper']-forcast['yhat_lower'] forcast.loc[forcast['anomaly']==1, 'imp'] = forcast['rigtig']-forcast['yhat_upper']/in_range forcast.loc[ forcast['anomaly']==-1, 'imp']= forcast['yhat_lower']-forcast['real']/in_range return forcast
opdage (prognose)

Vi tog anomalien som -1.

Konklusion

Processen med at finde outliers i et givet datasæt kaldes anomalidetektion. Outliers er dataobjekter, der skiller sig ud fra resten af ​​objektværdierne i datasættet og ikke opfører sig normalt.

Anomalidetektionsopgaver kan bruge afstandsbaserede og tæthedsbaserede klyngemetoder til at identificere outliers som en klynge.

Vi diskuterer her de forskellige metoder til registrering af anomalier og forklarer dem ved hjælp af koden på tre datasæt af Titanic, Air passagerer og Caret for at

Centrale punkter

1. Outliers eller anomalidetektion kan detekteres ved hjælp af Box-Whisker-metoden eller ved DBSCAN.

2. Euklidisk afstandsmetode bruges med de elementer, der ikke er korrelerede.

3. Mahalanobis-metoden bruges med Multivariate outliers.

4. Alle værdier eller point er ikke afvigende. Nogle er lyde, der burde være affald. Outliers er gyldige data, der skal justeres.

5. Vi brugte PyCaret til påvisning af outliers ved at bruge forskellige algoritmer, hvor anomalien er én, vist i gule farver og ingen outliers, hvor outlieren er 0.

6. Vi brugte PyOD, som er Python Outlier-detektionsbiblioteket. Den har mere end 40 algoritmer. Overvågede og uovervågede teknikker det bruges.

7. Vi brugte Prophet og definerede funktionen detect for at skitsere outlierne.

Mediet vist i denne artikel ejes ikke af Analytics Vidhya og bruges efter forfatterens skøn.

Tidsstempel:

Mere fra Analyse Vidhya