series_uv_change_points_fl()
Funkce series_uv_change_points_fl()
je uživatelem definovaná funkce (UDF), která vyhledá body změn v časových řadách voláním rozhraní API pro detekci anomálií Univariate, která je součástí azure Cognitive Services. Funkce přijímá omezenou sadu časových řad jako číselná dynamická pole, prahovou hodnotu detekce bodu změn a minimální velikost stabilního okna trendu. Každá časová řada se převede do požadovaného formátu JSON a publikuje ji do koncového bodu služby Detektor anomálií. Odpověď služby obsahuje dynamická pole bodů změn, jejich odpovídající spolehlivost a zjištěnou sezónnost.
Poznámka:
Zvažte použití nativní funkce series_decompose_anomalies(), která je škálovatější a běží rychleji.
Požadavky
- Předplatné Azure. Vytvořte bezplatný účet Azure.
- Cluster a databáze. Vytvořte cluster a databázi.
- Modul plug-in Pythonu musí být v clusteru povolený. To se vyžaduje pro vložený Python použitý ve funkci.
- Vytvořte prostředek Detektor anomálií a získejte jeho klíč pro přístup ke službě.
- Povolte modul plug-in http_request / modul plug-in http_request_post v clusteru pro přístup ke koncovému bodu služby detekce anomálií.
- Upravte zásadu popisku pro typ
webapi
pro přístup ke koncovému bodu služby detekce anomálií.
Syntaxe
T | invoke series_uv_change_points_fl(
y_series [,
score_threshold [,
trend_window [,
tsid]])
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
y_series | string |
✔️ | Název sloupce vstupní tabulky obsahující hodnoty řady, které mají být zjištěny anomálie. |
score_threshold | real |
Hodnota určující minimální spolehlivost pro deklaraci bodu změny. Každý bod, jehož spolehlivost překračuje prahovou hodnotu, je definována jako bod změny. Výchozí hodnota: 0,9 | |
trend_window | integer | Hodnota určující minimální velikost okna pro robustní výpočet změn trendu. Výchozí hodnota: 5 | |
tsid | string |
Název sloupce vstupní tabulky obsahující ID časové řady. Při analýze jedné časové řady je možné vynechat. |
Definice funkce
Funkci můžete definovat vložením jejího kódu jako funkce definovanou dotazem nebo vytvořením jako uložené funkce v databázi následujícím způsobem:
Definujte funkci pomocí následujícího příkazu let. Nejsou vyžadována žádná oprávnění. V následující definici funkce nahraďte YOUR-AD-RESOURCE-NAME
v identifikátoru URI a YOUR-KEY
v Ocp-Apim-Subscription-Key
hlavičce názvem a klíčem prostředku Detektor anomálií.
Důležité
Příkaz let nemůže běžet samostatně. Musí následovat příkaz tabulkového výrazu. Pokud chcete spustit funkční příklad, podívejte se na příkladseries_uv_change_points_fl()
.
let series_uv_change_points_fl=(tbl:(*), y_series:string, score_threshold:real=0.9, trend_window:int=5, tsid:string='_tsid')
{
let uri = 'https://YOUR-AD-RESOURCE-NAME.cognitiveservices.azure.com/anomalydetector/v1.0/timeseries/changepoint/detect';
let headers=dynamic({'Ocp-Apim-Subscription-Key': h'YOUR-KEY'});
let kwargs = bag_pack('y_series', y_series, 'score_threshold', score_threshold, 'trend_window', trend_window);
let code = ```if 1:
import json
y_series = kargs["y_series"]
score_threshold = kargs["score_threshold"]
trend_window = kargs["trend_window"]
json_str = []
for i in range(len(df)):
row = df.iloc[i, :]
ts = [{'value':row[y_series][j]} for j in range(len(row[y_series]))]
json_data = {'series': ts, "threshold":score_threshold, "stableTrendWindow": trend_window} # auto-detect period, or we can force 'period': 84
json_str = json_str + [json.dumps(json_data)]
result = df
result['json_str'] = json_str
```;
tbl
| evaluate python(typeof(*, json_str:string), code, kwargs)
| extend _tsid = column_ifexists(tsid, 1)
| partition by _tsid (
project json_str
| evaluate http_request_post(uri, headers, dynamic(null))
| project period=ResponseBody.period, change_point=series_add(0, ResponseBody.isChangePoint), confidence=ResponseBody.confidenceScores
| extend _tsid=toscalar(_tsid)
)
};
// 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.
let series_uv_change_points_fl=(tbl:(*), y_series:string, score_threshold:real=0.9, trend_window:int=5, tsid:string='_tsid')
{
let uri = 'https://YOUR-AD-RESOURCE-NAME.cognitiveservices.azure.com/anomalydetector/v1.0/timeseries/changepoint/detect';
let headers=dynamic({'Ocp-Apim-Subscription-Key': h'YOUR-KEY'});
let kwargs = bag_pack('y_series', y_series, 'score_threshold', score_threshold, 'trend_window', trend_window);
let code = ```if 1:
import json
y_series = kargs["y_series"]
score_threshold = kargs["score_threshold"]
trend_window = kargs["trend_window"]
json_str = []
for i in range(len(df)):
row = df.iloc[i, :]
ts = [{'value':row[y_series][j]} for j in range(len(row[y_series]))]
json_data = {'series': ts, "threshold":score_threshold, "stableTrendWindow": trend_window} # auto-detect period, or we can force 'period': 84
json_str = json_str + [json.dumps(json_data)]
result = df
result['json_str'] = json_str
```;
tbl
| evaluate python(typeof(*, json_str:string), code, kwargs)
| extend _tsid = column_ifexists(tsid, 1)
| partition by _tsid (
project json_str
| evaluate http_request_post(uri, headers, dynamic(null))
| project period=ResponseBody.period, change_point=series_add(0, ResponseBody.isChangePoint), confidence=ResponseBody.confidenceScores
| extend _tsid=toscalar(_tsid)
)
};
let ts = range x from 1 to 300 step 1
| extend y=iff(x between (100 .. 110) or x between (200 .. 220), 20, 5)
| extend ts=datetime(2021-01-01)+x*1d
| extend y=y+4*rand()
| summarize ts=make_list(ts), y=make_list(y)
| extend sid=1;
ts
| invoke series_uv_change_points_fl('y', 0.8, 10, 'sid')
| join ts on $left._tsid == $right.sid
| project-away _tsid
| project-reorder y, * // just to visualize the anomalies on top of y series
| render anomalychart with(xcolumn=ts, ycolumns=y, confidence, anomalycolumns=change_point)
Výstup
Následující graf ukazuje body změn v časové řadě.
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