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í služeb Azure Cognitive Services. Funkce přijímá omezenou sadu časových řad jako číselná dynamická pole, prahovou hodnotu detekce bodu změny a minimální velikost okna stabilního trendu. Každá časová řada se převede do požadovaného formátu JSON a odešle 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álovatelná a běží rychleji.
Požadavky
- Předplatné Azure. Vytvořte si bezplatný účet Azure.
- Cluster a databáze. Vytvořte cluster a databázi.
- V clusteru musí být povolený modul plug-in Pythonu. 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 / 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í.
Syntax
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 | Typ | Vyžadováno | Popis |
---|---|---|---|
y_series | string |
✔️ | Název sloupce vstupní tabulky obsahující hodnoty řady, která má být zjištěna anomálie. |
score_threshold | real |
Hodnota určující minimální spolehlivost deklarování bodu změny. Každý bod, jehož spolehlivost překračuje prahovou hodnotu, je definován 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é ji vynechat. |
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í. 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 prostředku Detektor anomálií a klíčem.
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_uv_change_points_fl()
podívejte se na příklad.
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