大規模なデータセット内の異常の検出

非同期検出を使用して異常を検出するジョブを作成します。

非同期検出を使用すると、単変量と多変量の両方の検出データセットで異常を検出できます。非同期検出に適した一般的なユースケースは次のとおりです。

非常に大きなデータセットにおける異常の検出

detectAnomalies REST同期APIでサポートされるデータ・ポイントの最大数は30,000です。これにより、多数のデータ・ポイント(通常は数百万単位)を検出する必要がある異常検出シナリオに制限が課される場合があります。非同期検出を使用すると、1,000万個を超えるデータ・ポイントの大規模なデータセットで異常を分析および検出できます。

検出ワークフローの自動化

IoTユースケースでは、通常、時系列データは多数のセンサーおよびデバイスから収集され、データベースやファイル・システムなどの永続データ・ストアに格納されます。多くの場合、このRAWデータは、推測を実行する前に、データ・フローなどのPaaSサービスを使用して前処理(エンリッチ)する必要があります。データ処理パイプライン内の非同期検出APIを簡単に統合し、検出ワークフローを自動化できます。

異常イベントの後処理

特定の異常検出シナリオでは、検出データ(検出された異常)をダウンストリーム・アプリケーションで使用する前に変換またはエンリッチする必要がある場合があります。非同期検出では、検出された異常はObject Storageバケットに保存されます。データ・フローなどのPaaSサービスを使用して、異常イベントを分析、処理およびエンリッチできます。さらに、Oracle Analytics Cloudのビジュアライゼーション・グラフで異常を消費およびレンダリングして、ターゲット・システムをモニターし、修正処理を実行できます。

  • 前提条件:

    非同期異常検出ジョブで使用するトレーニング済モデルを含むプロジェクトが必要です。

    1. ナビゲーション・メニューを開き、「アナリティクスとAI」をクリックします。「AIサービス」で、「異常検出」をクリックします。
    2. 左側のナビゲーション・メニューで、「プロジェクト」をクリックします。
    3. 使用するプロジェクトを含むコンパートメントを選択します。
    4. プロジェクトの名前をクリックします。

      プロジェクトの詳細ページが開きます。

    5. 「ジョブ」をクリックします。
    6. 「ジョブの作成」をクリックします。
    7. (オプション)リソースの一意の名前(255文字の制限)を入力します。名前を指定しない場合、自動的に生成されます。

      次に例を示します:

      aianomalydetection<resource>20230825155844

    8. (オプション)リソースの説明(400文字の制限)を入力します。
    9. このジョブを実行するモデルを選択します。
    10. (オプション)使用する異常検出の感度を0から1の間で選択します。
    11. ジョブに使用する入力要求タイプを選択します。
      • インライン:

        JSONまたはCSVファイルを「ファイル」ボックスにドラッグするか、「ファイルの選択」を使用してローカル・ドライブを検索して選択します。

      • オブジェクト・ストア:

        検出データ・ファイルを含むオブジェクト・ストレージ・バケットを選択し、このジョブに使用するファイルを選択します。CSVファイルのみがサポートされています。

        「追加入力バケット」をクリックしてさらに選択すると、複数の入力バケットおよび検出データファイルを使用できます。

    12. 出力ファイルを格納するオブジェクト・ストレージ出力バケットを選択します。

      ネームスペースには、ジョブが作成されているテナンシが表示されます。

    13. (オプション)結果を容易に識別するために使用する接頭辞を入力します。

      たとえば、myModelが接頭辞の場合、結果ファイルはmyModel/results-file.jsonです。

    14. 「ジョブの作成」をクリックします。

      非同期ジョブ・ステータスは、最初はジョブの実行が開始されるまで「受入れ済」になり、次に「進行中」になります。ジョブが終了すると、ステータスが「成功」に変わります。ジョブの実行にかかる時間は、検出データセットのサイズによって異なります。

    15. 完了した非同期ジョブをクリックして詳細を表示し、ジョブ結果を確認します。

      異常検出結果ファイルは、選択したオブジェクト・ストレージ出力バケット内の別のフォルダに保存されます。ファイル名には、<model-OCID>/<output_bucket_name>ネーミング規則が使用されます。

      • <model-OCID>は、異常検出モデルのOCIDです。

      • <output_bucket_name>は、オブジェクト・ストレージ・バケット名です。

      • 異常検出結果ファイル名は、-resultsという接尾辞が付いた検出データセット・ファイル名と同じです。

  • 異常を検出して大きなデータセットから結果を取得する場合は、このアプローチをお薦めします。

    1. 既存のOCIドキュメントの説明に従って、OCI CLIまたはSDKをダウンロードして構成します。
    2. HTTP POSTリクエストを作成してトレーニング済モデルを使用し、前のステップで受信したエンドポイントにリクエストを行います。
    3. HTTPレスポンスを解析して、アプリケーションで使用する結果を取得します。

    APIコールの例

    結果を検出および取得するには、次の異常検出コマンドおよび必須パラメータを使用します:

    1. モデルを取得します:

      https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/models/{ModelId}
       Method: GET
       Body:
    2. データとの非同期検出:

      Endpoint: https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/detectAnomalyJobs
      {
        "compartmentId": "ocid1.compartment.oc1..aaaaaaaaaqf4b7xq6kxrrb…..rcmjpbdfmcjmzdufz6sy52pra",
        "description": Ashburn data center,
        "displayName": Ashburn data center,
        "modelId": "ocid1.aianomalydetectionmodel.oc1.iad.amaaaaaaor7l3jia2q565gumqsmurg3anj6a6xad4e5talry7ynqivboyh5a",
        "inputDetails": {
            "inputType": "INLINE",
      "signalNames":["sensor1","sensor2","sensor3","sensor4","sensor5","sensor6","sensor7","sensor8","sensor9","sensor10"],
          "data": [
              {
                  "timestamp": "2020-07-13T18:54:46.000Z",
                  "values": [ 0.2282, -0.7092, -1.2002, -0.7971, 2.0967, -0.7369, -0.5242, -0.3949, -0.6563, -0.9429 ]
              },
              {
                  "timestamp": "2020-07-13T18:55:46.000Z",
                  "values": [ -0.4359, -0.153, -1.3603, -1.4552, 1.3512, -0.3683, -0.7328, -0.5223, -2.1182, -0.6212 ]
              },
              {
                  "timestamp": "2020-07-13T18:56:46.000Z",
                  "values": [ -0.7482, -0.7112, -2.0408, -0.8236, 1.9157, -0.9435, -1.1136, 0.1365, -0.8872, -0.7323 ]
              },
              {
                  "timestamp": "2020-07-13T18:57:46.000Z",
                  "values": [ 0.2655, -1.23, -0.6551, -0.6294, 1.4812, -1.1023, -1.3472, -1.18, -1.4353, -1.1863 ]
              },
              {
                  "timestamp": "2020-07-13T18:58:46.000Z",
                  "values": [ -0.6848, -1.6165, -1.4954, -1.2594, 2.5512, -0.6693, -0.5837, -1.2494, -0.2837, -0.7751 ]
              }
          ]
        },
        "outputDetails": {
          "outputType": "OBJECT_STORAGE",
          "namespaceName": "ax3dvjxgkemg",
          "bucketName": "output-bucket",
          "prefix": "test-prefix"
        }
      }
  • 異常を検出して大きなデータセットから結果を取得する場合は、このアプローチをお薦めします。

    1. 既存のOCIドキュメントの説明に従って、OCI CLIまたはSDKをダウンロードして構成します。
    2. HTTP POSTリクエストを作成してトレーニング済モデルを使用し、前のステップで受信したエンドポイントにリクエストを行います。
    3. HTTPレスポンスを解析して、アプリケーションで使用する結果を取得します。

    APIコールの例

    DetectAnomalies操作を使用すると、結果を検出および取得するのに役立ちます。

    1. モデルを取得します:

      https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/models/{ModelId}
       Method: GET
       Body:
    2. データとの非同期検出:

      Endpoint: https://anomalydetection.aiservice.us-phoenix-1.oci.oraclecloud.com/20210101/detectAnomalyJobs
      {
        "compartmentId": "ocid1.compartment.oc1..aaaaaaaaaqf4b7xq6kxrrb…..rcmjpbdfmcjmzdufz6sy52pra",
        "description": Ashburn data center,
        "displayName": Ashburn data center,
        "modelId": "ocid1.aianomalydetectionmodel.oc1.iad.amaaaaaaor7l3jia2q565gumqsmurg3anj6a6xad4e5talry7ynqivboyh5a",
        "inputDetails": {
            "inputType": "INLINE",
      "signalNames":["sensor1","sensor2","sensor3","sensor4","sensor5","sensor6","sensor7","sensor8","sensor9","sensor10"],
          "data": [
              {
                  "timestamp": "2020-07-13T18:54:46.000Z",
                  "values": [ 0.2282, -0.7092, -1.2002, -0.7971, 2.0967, -0.7369, -0.5242, -0.3949, -0.6563, -0.9429 ]
              },
              {
                  "timestamp": "2020-07-13T18:55:46.000Z",
                  "values": [ -0.4359, -0.153, -1.3603, -1.4552, 1.3512, -0.3683, -0.7328, -0.5223, -2.1182, -0.6212 ]
              },
              {
                  "timestamp": "2020-07-13T18:56:46.000Z",
                  "values": [ -0.7482, -0.7112, -2.0408, -0.8236, 1.9157, -0.9435, -1.1136, 0.1365, -0.8872, -0.7323 ]
              },
              {
                  "timestamp": "2020-07-13T18:57:46.000Z",
                  "values": [ 0.2655, -1.23, -0.6551, -0.6294, 1.4812, -1.1023, -1.3472, -1.18, -1.4353, -1.1863 ]
              },
              {
                  "timestamp": "2020-07-13T18:58:46.000Z",
                  "values": [ -0.6848, -1.6165, -1.4954, -1.2594, 2.5512, -0.6693, -0.5837, -1.2494, -0.2837, -0.7751 ]
              }
          ]
        },
        "outputDetails": {
          "outputType": "OBJECT_STORAGE",
          "namespaceName": "ax3dvjxgkemg",
          "bucketName": "output-bucket",
          "prefix": "test-prefix"
        }
      }