series_mv_ee_anomalies_fl()
Funkce series_mv_ee_anomalies_fl()
je uživatelem definovaná funkce (UDF), která detekuje vícerozměrné anomálie v řadách použitím modelu eliptické obálky ze scikit-learn. Tento model předpokládá, že zdrojem vícerozměrných dat je vícerozměrné normální rozdělení. Funkce přijímá sadu řad jako číselná dynamická pole, názvy sloupců funkcí a očekávané procento anomálií z celé řady. Funkce vytvoří pro každou řadu vícerozměrnou eliptický obálku a označí body, které spadají mimo tuto normální obálku, jako anomálie.
Požadavky
- V clusteru musí být povolený modul plug-in Pythonu. To se vyžaduje pro vložený Python použitý ve funkci.
- V databázi musí být povolený modul plug-in Pythonu. To se vyžaduje pro vložený Python použitý ve funkci.
Syntax
T | invoke series_mv_ee_anomalies_fl(
,
features_colsanomaly_col [,
score_col [,
anomalies_pct ]])
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
features_cols | dynamic |
✔️ | Pole obsahující názvy sloupců, které se používají pro model detekce anomálií s více proměnnými. |
anomaly_col | string |
✔️ | Název sloupce pro uložení zjištěných anomálií. |
score_col | string |
Název sloupce pro uložení skóre anomálií. | |
anomalies_pct | real |
Reálné číslo v rozsahu [0–50] určující očekávané procento anomálií v datech. Výchozí hodnota: 4 %. |
Definice funkce
Funkci můžete definovat tak, že buď vložíte její kód jako funkci definovanou dotazem, nebo ji vytvoříte jako uloženou funkci v databázi, a to následujícím způsobem:
Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění.
Důležité
Příkaz let nemůže běžet samostatně. Za ním musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad , series_mv_ee_anomalies_fl()
podívejte se na příklad.
// Define function
let series_mv_ee_anomalies_fl=(tbl:(*), features_cols:dynamic, anomaly_col:string, score_col:string='', anomalies_pct:real=4.0)
{
let kwargs = bag_pack('features_cols', features_cols, 'anomaly_col', anomaly_col, 'score_col', score_col, 'anomalies_pct', anomalies_pct);
let code = ```if 1:
from sklearn.covariance import EllipticEnvelope
features_cols = kargs['features_cols']
anomaly_col = kargs['anomaly_col']
score_col = kargs['score_col']
anomalies_pct = kargs['anomalies_pct']
dff = df[features_cols]
ellipsoid = EllipticEnvelope(contamination=anomalies_pct/100.0)
for i in range(len(dff)):
dffi = dff.iloc[[i], :]
dffe = dffi.explode(features_cols)
ellipsoid.fit(dffe)
df.loc[i, anomaly_col] = (ellipsoid.predict(dffe) < 0).astype(int).tolist()
if score_col != '':
df.loc[i, score_col] = ellipsoid.decision_function(dffe).tolist()
result = df
```;
tbl
| evaluate hint.distribution=per_node python(typeof(*), code, kwargs)
};
// Write your query to use the function here.
Příklad
Následující příklad používá operátor invoke ke spuštění funkce.
Pokud chcete použít funkci definovanou dotazem, vyvoláte ji po definici vložené funkce.
// Define function
let series_mv_ee_anomalies_fl=(tbl:(*), features_cols:dynamic, anomaly_col:string, score_col:string='', anomalies_pct:real=4.0)
{
let kwargs = bag_pack('features_cols', features_cols, 'anomaly_col', anomaly_col, 'score_col', score_col, 'anomalies_pct', anomalies_pct);
let code = ```if 1:
from sklearn.covariance import EllipticEnvelope
features_cols = kargs['features_cols']
anomaly_col = kargs['anomaly_col']
score_col = kargs['score_col']
anomalies_pct = kargs['anomalies_pct']
dff = df[features_cols]
ellipsoid = EllipticEnvelope(contamination=anomalies_pct/100.0)
for i in range(len(dff)):
dffi = dff.iloc[[i], :]
dffe = dffi.explode(features_cols)
ellipsoid.fit(dffe)
df.loc[i, anomaly_col] = (ellipsoid.predict(dffe) < 0).astype(int).tolist()
if score_col != '':
df.loc[i, score_col] = ellipsoid.decision_function(dffe).tolist()
result = df
```;
tbl
| evaluate hint.distribution=per_node python(typeof(*), code, kwargs)
};
// Usage
normal_2d_with_anomalies
| extend anomalies=dynamic(null), scores=dynamic(null)
| invoke series_mv_ee_anomalies_fl(pack_array('x', 'y'), 'anomalies', 'scores')
| extend anomalies=series_multiply(80, anomalies)
| render timechart
Výstup
Tabulka normal_2d_with_anomalies obsahuje sadu 3 časových řad. Každá časová řada má dvojrozměrné normální rozdělení s denními anomáliemi přidanými o půlnoci v 8:00 a 16:00. Tuto ukázkovou datovou sadu můžete vytvořit pomocí ukázkového dotazu.
Pokud chcete data zobrazit jako bodový graf, nahraďte kód použití následujícím kódem:
normal_2d_with_anomalies
| extend anomalies=dynamic(null)
| invoke series_mv_ee_anomalies_fl(pack_array('x', 'y'), 'anomalies')
| where name == 'TS1'
| project x, y, anomalies
| mv-expand x to typeof(real), y to typeof(real), anomalies to typeof(string)
| render scatterchart with(series=anomalies)
Na TS1 můžete vidět, že většina půlnočních anomálií byla zjištěna pomocí tohoto vícerozměrného modelu.
Vytvoření ukázkové datové sady
.set normal_2d_with_anomalies <|
//
let window=14d;
let dt=1h;
let n=toint(window/dt);
let rand_normal_fl=(avg:real=0.0, stdv:real=1.0)
{
let x =rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand()+rand();
(x - 6)*stdv + avg
};
union
(range s from 0 to n step 1
| project t=startofday(now())-s*dt
| extend x=rand_normal_fl(10, 5)
| extend y=iff(hourofday(t) == 0, 2*(10-x)+7+rand_normal_fl(0, 3), 2*x+7+rand_normal_fl(0, 3)) // anomalies every midnight
| extend name='TS1'),
(range s from 0 to n step 1
| project t=startofday(now())-s*dt
| extend x=rand_normal_fl(15, 3)
| extend y=iff(hourofday(t) == 8, (15-x)+10+rand_normal_fl(0, 2), x-7+rand_normal_fl(0, 1)) // anomalies every 8am
| extend name='TS2'),
(range s from 0 to n step 1
| project t=startofday(now())-s*dt
| extend x=rand_normal_fl(8, 6)
| extend y=iff(hourofday(t) == 16, x+5+rand_normal_fl(0, 4), (12-x)+rand_normal_fl(0, 4)) // anomalies every 4pm
| extend name='TS3')
| summarize t=make_list(t), x=make_list(x), y=make_list(y) by name
Tato funkce není podporovaná.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro