series_uv_change_points_fl()
Funkcja series_uv_change_points_fl()
jest funkcją zdefiniowaną przez użytkownika (UDF), która znajduje punkty zmian w szeregach czasowych przez wywołanie interfejsu API wykrywania anomalii univariate, część usług Azure Cognitive Services. Funkcja akceptuje ograniczony zestaw szeregów czasowych jako tablice dynamiczne liczbowe, próg wykrywania punktu zmiany i minimalny rozmiar okna trendu stabilnego. Każda seria czasowa jest konwertowana na wymagany format JSON i publikuje ją w punkcie końcowym usługi Narzędzie do wykrywania anomalii. Odpowiedź usługi zawiera dynamiczne tablice punktów zmian, ich pewność siebie i wykrytą sezonowość.
Uwaga
Rozważ użycie funkcji natywnej series_decompose_anomalies(), która jest bardziej skalowalna i działa szybciej.
Wymagania wstępne
- Subskrypcja platformy Azure. Utwórz bezpłatne konto platformy Azure.
- Klaster i baza danych. Utwórz klaster i bazę danych.
- Wtyczka języka Python musi być włączona w klastrze. Jest to wymagane dla wbudowanego języka Python używanego w funkcji.
- Utwórz zasób Narzędzie do wykrywania anomalii i uzyskaj jego klucz w celu uzyskania dostępu do usługi.
- Włącz wtyczkę http_request/wtyczkę http_request_post w klastrze, aby uzyskać dostęp do punktu końcowego usługi wykrywania anomalii.
- Zmodyfikuj zasady objaśnienie dla typu
webapi
, aby uzyskać dostęp do punktu końcowego usługi wykrywania anomalii.
Składnia
T | invoke series_uv_change_points_fl(
y_series [,
score_threshold [,
trend_window [,
tsid]]])
Dowiedz się więcej o konwencjach składniowych.
Parametry
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
y_series | string |
✔️ | Nazwa kolumny tabeli wejściowej zawierającej wartości serii do wykrycia anomalii. |
score_threshold | real |
Wartość określająca minimalną pewność, aby zadeklarować punkt zmiany. Każdy punkt, którego pewność jest wyższa niż próg, jest definiowany jako punkt zmiany. Wartość domyślna: 0,9 | |
trend_window | liczba całkowita | Wartość określająca minimalny rozmiar okna na potrzeby niezawodnego obliczania zmian trendu. Wartość domyślna: 5 | |
Tsid | string |
Nazwa kolumny tabeli wejściowej zawierającej identyfikator szeregów czasowych. Można pominąć podczas analizowania pojedynczej serii czasowej. |
Definicja funkcji
Funkcję można zdefiniować, osadzając kod jako funkcję zdefiniowaną przez zapytanie lub tworząc ją jako funkcję przechowywaną w bazie danych w następujący sposób:
Zdefiniuj funkcję przy użyciu następującej instrukcji let. Nie są wymagane żadne uprawnienia. W poniższej definicji funkcji zastąp YOUR-AD-RESOURCE-NAME
ciąg w identyfikatorze URI i YOUR-KEY
w Ocp-Apim-Subscription-Key
nagłówku nazwą zasobu i kluczem Narzędzie do wykrywania anomalii.
Ważne
Instrukcja let nie może być uruchamiana samodzielnie. Należy po nim wykonać instrukcję wyrażenia tabelarycznego. Aby uruchomić działający przykład programu series_uv_change_points_fl()
, zobacz Przykład.
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.
Przykład
W poniższym przykładzie użyto operatora invoke do uruchomienia funkcji.
Aby użyć funkcji zdefiniowanej przez zapytanie, wywołaj ją po osadzonej definicji funkcji.
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)
Dane wyjściowe
Na poniższym wykresie przedstawiono punkty zmian w szeregach czasowych.
Ta funkcja nie jest obsługiwana.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla