この記事では、Timeseries Insights API に関する一般的なコンセプトについて説明し、それらが直感的に理解できるような仕組みを提供しています。
イベント
イベントは、Timeseries Insights API が使用するデータポイントと未加工の入力です。概念的には、何らかのエージェントによって実行されるアクション(クライアントによるトランザクションやニュース記事の公開など)、または、観察(温度センサーの読み取り値やマシンの CPU 使用率など)のいずれかを表します。
イベントには次が含まれます。
- ラベルや数値測定値など、イベントを説明するプロパティを表す、さまざまなディメンションにまたがる一連の値。
- イベントが発生した時間を表すタイムスタンプ。このタイムスタンプは、イベントを集約して時系列を形成するときに使用されます。
- グループ ID。
ディメンション
ディメンションは、データセット内のイベントのプロパティ タイプと、取り得る値のドメインを表します。ディメンションには次のものがあります。
- カテゴリ。このディメンションのイベント プロパティは、有限の値の 1 つ(通常は文字列)を保持できます。例としては、ニュース記事を含むデータセット内の国名またはパブリッシャー名、本番環境のモニタリング データを含むデータセット内のマシン名などがあります。
- 数値。イベントの測定値または一般的な数値プロパティ。例: ニュース記事のページビューの数、CPU 使用率、本番環境のモニタリング データのエラー数。
データセット
データセットは、プロジェクト内で一意の名前を持つイベントの集合です。クエリは同じデータセット内で実行されます。
グループ
同じグループ ID を指定すると、イベントをグループ化できます(Event.groupId
をご覧ください)。このグループは、インターネット アクティビティの「セッション」に似ています。
通常、各イベント レコードには一意のグループ ID が割り当てられます。グループ ID のユースケースには次のものが含まれますが、これらに限定されません。
- 複数のイベントレコードからの同じイベント(同じまたは類似のタイムスタンプを持つ)のイベント ID。特に、同じイベントの異なるプロパティが別のソースから取得された場合で、システムに入る前にマージされない場合。たとえば、同じデバイスをモニタリングする複数のセンサーが、それぞれ別のイベント記録を生成できます。
- 関連するイベントのコレクションのセッション識別子(通常は短い期間内のタイムスタンプを含む)。たとえば、ウェブ ブラウジング セッションからのアクティビティがあります。もう 1 つの例として、タクシー乗車のログエントリがあります。
- ユーザー アカウント ID。同じグループ ID を持つすべての Event レコードは同じユーザーに属します。
グループの目的は、同じグループのイベント間の相関性(ディメンション)を計算することです。たとえば、データセットがモニタリング データ(CPU、RAM など)を保持している場合、グループは 1 つのプロセスからのすべてのモニタリング データを保持できます。これにより、最終的に CPU の増加が前の時点のバイナリ バージョンの更新などの別のイベントと相関していることを検出できます。
不明な場合、またはこのような相関関係を計算しない場合は、各イベントにはグローバルに一意のグループ ID が必要です。groupId
を省略すると同様の結果になり、内部の groupId
がコンテンツとタイムスタンプに基づいて生成されます。
スライス
スライスは、いくつかのディメンションにまたがって特定の値を持つデータセットからのすべてのイベントのサブセットです。カテゴリ ディメンションの場合、指定される値は単一の固定値です。数値ディメンションの場合、指定される値は範囲です。
たとえば、国際的な販売店の売上情報のデータセットがあり、各イベントが、以下のカテゴリ ディメンションを含む売上であるとします: 売上が発生した国、製品名、製品を製造した会社名。この場合のスライスの例としては、特定の商品の総売上、特定の会社が製造したすべての商品の特定の国での総売上が挙げられます。
時系列
使用する時系列は離散の時間であり、等しい時間間隔の点で構成されています。連続する時系列ポイントの間の時間間隔の長さは、時系列の粒度と呼ばれます。
時系列は次のように計算されます。
- 特定のスライスについて、[
detectionTime - TimeseriesParams.forecastHistory
,detectionTime + granularity
] の時間間隔ですべてのイベントを収集します。 - タイムスタンプと粒度に基づいて、これらのイベントをグループ化します。
E.eventTime
が [T
,T + granularity
] 時間間隔内にある場合、イベント E は、時刻 T が開始される時点に割り当てられます。 - 時系列のすべてのポイントについて、指定された数値ディメンションに基づいてイベントを指標(
TimeseriesParams.metric
)として集計します。これは、これらのポイントの値を表します。集計は、カウント(metric
が指定されていない場合は、通常、イベントのすべてのディメンションがカテゴリの場合)、合計または平均化(metric
が指定されている場合)によって実行できます。
時系列ポイント
各時系列ポイントには、時間と値が関連付けられています。
時刻は、実際には長さ granularity
の間隔であり、time
が開始時刻です。
指標(TimeseriesParams.metric
)を指定する場合は、数値ディメンションにする必要があります。ポイントの value
は、TimeseriesParams.metricAggregationMethod
を使用して、時間内部内のすべてのイベントの metric
ディメンションのディメンション値から集計されます。
指標が指定されていない場合、ポイントの value
は時間間隔内のイベントの数になります。
予測
特定の時系列の将来の値を予測するプロセス。予測では、時系列の最初の部分をトレーニング データとして使用して、モデルを構築します。
Horizon
検出時間からタイム ホライズン(ForecastParams.horizonTime
フィールドで指定)までの時系列の値を予測します。
このフィールドは直感的に、将来どの程度予測すべきかを示します。スライスを異常として分類する際、検出ポイントの値に主に関心がありますが、ユーザーに有益な情報を提供できる場合があるため、追加のポイントを予測できるようにします。
検出時間と検出ポイント
検出時間(QueryDataSetRequest.detectionTime
で指定)は、潜在的な異常値を分析している時点です。
検出ポイントは、検出時の時系列ポイントです。
予想される偏差
時系列の安定性と予測可能性に応じて、予測の信頼性が変化します。信頼レベルは、検出時間の予測値からの許容される絶対偏差を示す EvaluatedSlice.expectedDeviation
フィールドに反映されます。
異常
検出時間中の予測値と実際の値の間の偏差が、予想される値より大きい場合、スライスが異常と見なされます。
実際の偏差と予想される偏差との間の差を、異常スコアと呼びます。
anomalyScore = (detectionPointActual - detectionPointForecast) / expectedDeviation
一般に、1.0 未満のスコアはスライスの履歴を考慮すれば一般的である変動を反映していますが、1.0 を超えるスコアには注意が必要であり、スコアが高いほど重大な異常を意味します。
ノイズしきい値
上記で定義した異常スコアは、偏差が正常からどの程度統計的に有意であるかを示しています。ただし多くの場合、絶対値の変化は重要でないため、この偏差は重要ではない場合があります。
たとえば、時系列のすべての値が (9.9, 10.1) の範囲に均一に分散している場合、expectedDeviation
は約 0.1 になります。detectionPointForecast
が 10.0 で detectionPointActual
が 10.3 の場合、anomalyScore
は 3.0 になります。
絶対値が大きい変更がより重要になる場合は、ノイズしきい値で異常スコアを重み付けすることにより、しきい値よりも低い変更のスライスにペナルティを適用することができます。
anomalyScore = (detectionPointActual - detectionPointForecast) / (expectedDeviation + noiseThreshold)
次のステップ
- フルアクセスのセットアップに従って独自のプロジェクトを作成する
- チュートリアルの詳細
- REST API の詳細