자습서: 일괄 처리 검색 및 Power BI를 사용하여 변칙 시각화Tutorial: Visualize anomalies using batch detection and Power BI

이 자습서에서는 시계열 데이터 세트 내의 변칙을 일괄 처리 방식으로 찾습니다.Use this tutorial to find anomalies within a time series data set as a batch. Power BI Desktop을 사용하면 Excel 파일을 가져와서 Anomaly Detector API에 대한 데이터를 준비하고 통계적 변칙을 시각화할 수 있습니다.Using Power BI desktop, you will take an Excel file, prepare the data for the Anomaly Detector API, and visualize statistical anomalies throughout it.

이 자습서에서 학습할 방법은 다음과 같습니다.In this tutorial, you'll learn how to:

  • Power BI Desktop을 사용하여 시계열 데이터 세트 가져오기 및 변환Use Power BI Desktop to import and transform a time series data set
  • 일괄 처리 변칙 검색을 위해 Power BI Desktop과 Anomaly Detector API의 통합Integrate Power BI Desktop with the Anomaly Detector API for batch anomaly detection
  • 예상 값, 표시 값 및 변칙 검색 경계를 포함하여 데이터 내에서 검색된 변칙 시각화Visualize anomalies found within your data, including expected and seen values, and anomaly detection boundaries.

필수 구성 요소Prerequisites

  • Azure 구독An Azure subscription
  • Microsoft Power BI Desktop(평가판으로 사용 가능)Microsoft Power BI Desktop, available for free.
  • 시계열 데이터 요소가 포함된 Excel 파일(.xlsx).An excel file (.xlsx) containing time series data points. 이 빠른 시작의 예제 데이터는 GitHub에서 찾을 수 있습니다.The example data for this quickstart can be found on GitHub
  • Azure 구독을 보유한 후에는 Azure Portal에서 Anomaly Detector 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create an Anomaly Detector resource in the Azure portal to get your key and endpoint.
    • 애플리케이션을 Anomaly Detector API에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Anomaly Detector API. 이 작업은 나중에 빠른 시작에서 수행합니다.You'll do this later in the quickstart.

참고

Anomaly Detector API 사용 시 최상의 결과를 얻으려면 JSON 형식 시계열 데이터에 다음이 포함되어야 합니다.For best results when using the Anomaly Detector API, your JSON-formatted time series data should include:

  • 예상되는 누락된 요소 수가 10% 이하이고 동일한 간격으로 구분된 데이터 요소data points separated by the same interval, with no more than 10% of the expected number of points missing.
  • 데이터에 명확한 계절성 패턴이 없는 경우 최소 12개 이상의 데이터 요소at least 12 data points if your data doesn't have a clear seasonal pattern.
  • 데이터에 명확한 계절성 패턴이 없는 경우 최소 4개 이상의 패턴 발생at least 4 pattern occurrences if your data does have a clear seasonal pattern.

시계열 데이터 로드 및 형식 지정Load and format the time series data

시작하려면 Power BI Desktop을 열고, 필수 조건에서 다운로드한 시계열 데이터를 로드합니다.To get started, open Power BI Desktop and load the time series data you downloaded from the prerequisites. 이 Excel 파일에는 일련의 UTC(협정 세계시) 타임스탬프 및 값 쌍이 포함되어 있습니다.This excel file contains a series of Coordinated Universal Time (UTC) timestamp and value pairs.

참고

Power BI는 .csv 파일, SQL 데이터베이스, Azure Blob 스토리지 등과 같은 다양한 원본의 데이터를 사용할 수 있습니다.Power BI can use data from a wide variety of sources, such as .csv files, SQL databases, Azure blob storage, and more.

Power BI Desktop 주 창에서 리본을 클릭합니다.In the main Power BI Desktop window, click the Home ribbon. 리본의 외부 데이터 그룹에서 데이터 가져오기 드롭다운 메뉴를 열고 Excel을 클릭합니다.In the External data group of the ribbon, open the Get Data drop-down menu and click Excel.

Power BI의 "데이터 가져오기" 단추 이미지

대화 상자가 표시되면 예제 .xlsx 파일을 다운로드한 폴더로 이동하여 선택합니다.After the dialog appears, navigate to the folder where you downloaded the example .xlsx file and select it. 탐색기 대화 상자가 표시되면 Sheet1을 클릭한 다음, 편집을 클릭합니다.After the Navigator dialogue appears, click Sheet1, and then Edit.

Power BI의 데이터 원본 "탐색기" 화면 이미지

Power BI에서는 첫 번째 열의 타임스탬프를 Date/Time 데이터 형식으로 변환합니다.Power BI will convert the timestamps in the first column to a Date/Time data type. Anomaly Detector API로 보내려면 이러한 타임스탬프를 텍스트로 변환해야 합니다.These timestamps must be converted to text in order to be sent to the Anomaly Detector API. 파워 쿼리 편집기가 자동으로 열리지 않으면 홈 탭에서 쿼리 편집을 클릭합니다.If the Power Query editor doesn't automatically open, click Edit Queries on the home tab.

파워 쿼리 편집기에서 변환 리본을 클릭합니다.Click the Transform ribbon in the Power Query Editor. 그룹에서 데이터 형식: 드롭다운 메뉴를 열고, 텍스트를 선택합니다.In the Any Column group, open the Data Type: drop-down menu, and select Text.

Power BI의 데이터 원본 "탐색기" 화면 이미지

열 형식 변경에 대한 알림이 표시되면 현재 전환 바꾸기를 클릭합니다.When you get a notice about changing the column type, click Replace Current. 그런 다음, 리본에서 닫기 및 적용 또는 적용을 클릭합니다.Afterwards, click Close & Apply or Apply in the Home ribbon.

데이터를 보내고 응답 형식을 지정하는 함수 만들기Create a function to send the data and format the response

데이터 파일의 형식을 지정하고 해당 파일을 Anomaly Detector API에 보내려면 위에서 만든 테이블에서 쿼리를 호출할 수 있습니다.To format and send the data file to the Anomaly Detector API, you can invoke a query on the table created above. 파워 쿼리 편집기의 리본에서 새 원본 드롭다운 메뉴를 열고, 빈 쿼리를 클릭합니다.In the Power Query Editor, from the Home ribbon, open the New Source drop-down menu and click Blank Query.

새 쿼리가 선택되었는지 확인한 다음, 고급 편집기를 클릭합니다.Make sure your new query is selected, then click Advanced Editor.

Power BI의 "고급 편집기" 단추 이미지

고급 편집기 내에서 다음 파워 쿼리 M 코드 조각을 사용하여 테이블에서 열을 추출하여 API에 보냅니다.Within the Advanced Editor, use the following Power Query M snippet to extract the columns from the table and send it to the API. 그런 다음, 쿼리는 JSON 응답에서 테이블을 만들고 이를 반환합니다.Afterwards, the query will create a table from the JSON response, and return it. apiKey 변수를 유효한 Anomaly Detector API 키로 바꾸고, endpoint를 사용자의 엔드포인트로 바꿉니다.Replace the apiKey variable with your valid Anomaly Detector API key, and endpoint with your endpoint. 쿼리를 고급 편집기에 입력한 다음, 완료를 클릭합니다.After you've entered the query into the Advanced Editor, click Done.

(table as table) => let

    apikey      = "[Placeholder: Your Anomaly Detector resource access key]",
    endpoint    = "[Placeholder: Your Anomaly Detector resource endpoint]/anomalydetector/v1.0/timeseries/entire/detect",
    inputTable = Table.TransformColumnTypes(table,{{"Timestamp", type text},{"Value", type number}}),
    jsontext    = Text.FromBinary(Json.FromValue(inputTable)),
    jsonbody    = "{ ""Granularity"": ""daily"", ""Sensitivity"": 95, ""Series"": "& jsontext &" }",
    bytesbody   = Text.ToBinary(jsonbody),
    headers     = [#"Content-Type" = "application/json", #"Ocp-Apim-Subscription-Key" = apikey],
    bytesresp   = Web.Contents(endpoint, [Headers=headers, Content=bytesbody]),
    jsonresp    = Json.Document(bytesresp),

    respTable = Table.FromColumns({
                    
                     Table.Column(inputTable, "Timestamp")
                     ,Table.Column(inputTable, "Value")
                     , Record.Field(jsonresp, "IsAnomaly") as list
                     , Record.Field(jsonresp, "ExpectedValues") as list
                     , Record.Field(jsonresp, "UpperMargins")as list
                     , Record.Field(jsonresp, "LowerMargins") as list
                     , Record.Field(jsonresp, "IsPositiveAnomaly") as list
                     , Record.Field(jsonresp, "IsNegativeAnomaly") as list

                  }, {"Timestamp", "Value", "IsAnomaly", "ExpectedValues", "UpperMargin", "LowerMargin", "IsPositiveAnomaly", "IsNegativeAnomaly"}
               ),
    
    respTable1 = Table.AddColumn(respTable , "UpperMargins", (row) => row[ExpectedValues] + row[UpperMargin]),
    respTable2 = Table.AddColumn(respTable1 , "LowerMargins", (row) => row[ExpectedValues] -  row[LowerMargin]),
    respTable3 = Table.RemoveColumns(respTable2, "UpperMargin"),
    respTable4 = Table.RemoveColumns(respTable3, "LowerMargin"),

    results = Table.TransformColumnTypes(

                respTable4,
                {{"Timestamp", type datetime}, {"Value", type number}, {"IsAnomaly", type logical}, {"IsPositiveAnomaly", type logical}, {"IsNegativeAnomaly", type logical},
                 {"ExpectedValues", type number}, {"UpperMargins", type number}, {"LowerMargins", type number}}
              )

 in results

매개 변수 입력 아래에서 Sheet1을 선택하고 호출을 클릭하여 데이터 시트에 대한 쿼리를 호출합니다.Invoke the query on your data sheet by selecting Sheet1 below Enter Parameter, and click Invoke.

"고급 편집기" 단추의 이미지

데이터 원본 개인 정보 보호 및 인증Data source privacy and authentication

참고

데이터 개인 정보 보호 및 액세스에 대한 조직의 정책을 알고 있어야 합니다.Be aware of your organization's policies for data privacy and access. 자세한 내용은 Power BI Desktop 개인 정보 수준을 참조하세요.See Power BI Desktop privacy levels for more information.

외부 데이터 원본을 활용하므로 쿼리를 실행하려고 하면 경고 메시지가 표시될 수 있습니다.You may get a warning message when you attempt to run the query since it utilizes an external data source.

Power BI에서 만든 경고를 보여 주는 이미지

이 문제를 해결하려면 파일옵션 및 설정을 클릭합니다.To fix this, click File, and Options and settings. 그런 다음, 옵션을 클릭합니다.Then click Options. 현재 파일 아래에서 개인 정보개인 정보 수준을 무시하고 잠재적으로 성능 향상을 선택합니다.Below Current File, select Privacy, and Ignore the Privacy Levels and potentially improve performance.

또한 API에 연결하려는 방법을 지정하라는 메시지가 표시될 수 있습니다.Additionally, you may get a message asking you to specify how you want to connect to the API.

액세스 자격 증명을 지정하기 위한 요청을 보여 주는 이미지

이 문제를 해결하려면 메시지에서 자격 증명 편집을 클릭합니다.To fix this, Click Edit Credentials in the message. 대화 상자가 표시되면 익명을 선택하여 API에 익명으로 연결합니다.After the dialogue box appears, select Anonymous to connect to the API anonymously. 그런 다음 연결을 클릭합니다.Then click Connect.

그런 다음, 리본에서 닫기 및 적용을 클릭하여 변경 내용을 적용합니다.Afterwards, click Close & Apply in the Home ribbon to apply the changes.

Anomaly Detector API 응답 시각화Visualize the Anomaly Detector API response

Power BI 주 화면에서 위에서 만든 쿼리를 사용하여 데이터 시각화를 시작합니다.In the main Power BI screen, begin using the queries created above to visualize the data. 먼저 시각화에서 꺾은선형 차트를 선택합니다.First select Line Chart in Visualizations. 그런 다음, 호출된 함수의 타임스탬프를 꺾은선형 차트의 에 추가합니다.Then add the timestamp from the invoked function to the line chart's Axis. 마우스 오른쪽 단추로 클릭하고 타임스탬프를 선택합니다.Right-click on it, and select Timestamp.

마우스 오른쪽 단추로 타임스탬프 값 클릭

호출된 함수의 다음 필드를 차트의 필드에 추가합니다.Add the following fields from the Invoked Function to the chart's Values field. 아래 스크린샷을 사용하여 차트를 작성합니다.Use the below screenshot to help build your chart.

  • Value
  • UpperMarginsUpperMargins
  • LowerMarginsLowerMargins
  • ExpectedValuesExpectedValues

새 빠른 측정 화면의 이미지

필드가 추가되면 차트를 클릭하고, 모든 데이터 요소가 표시되도록 크기를 조정합니다.After adding the fields, click on the chart and resize it to show all of the data points. 차트는 아래 스크린샷과 비슷하게 표시됩니다.Your chart will look similar to the below screenshot:

새 빠른 측정 화면의 이미지

변칙 데이터 요소 표시Display anomaly data points

Power BI 창의 오른쪽에 있는 필드 창 아래에서 마우스 오른쪽 단추로 호출된 함수 쿼리 아래의 을 클릭하고, 새 빠른 측정을 클릭합니다.On the right side of the Power BI window, below the FIELDS pane, right-click on Value under the Invoked Function query, and click New quick measure.

새 빠른 측정 화면의 이미지

표시되는 화면에서 계산으로 필터링된 값을 선택합니다.On the screen that appears, select Filtered value as the calculation. 기준 값Sum of Value로 설정합니다.Set Base value to Sum of Value. 그런 다음, IsAnomaly호출된 함수 필드에서 필터로 끕니다.Then drag IsAnomaly from the Invoked Function fields to Filter. 필터 드롭다운 메뉴에서 True를 선택합니다.Select True from the Filter drop-down menu.

새 빠른 측정 화면의 이미지

확인을 클릭하면 필드 목록의 아래쪽에 Value for True 필드가 표시됩니다.After clicking Ok, you will have a Value for True field, at the bottom of the list of your fields. 마우스 오른쪽 단추로 클릭하고 이름을 Anomaly(변칙)로 변경합니다.Right-click it and rename it to Anomaly. 이를 차트의 에 추가합니다.Add it to the chart's Values. 그런 다음, 서식 도구를 선택하고, X축 유형을 범주별로 설정합니다.Then select the Format tool, and set the X-axis type to Categorical.

새 빠른 측정 화면의 이미지

서식 도구 및 데이터 색을 클릭하여 차트에 색을 적용합니다.Apply colors to your chart by clicking on the Format tool and Data colors. 차트가 다음과 같이 표시됩니다.Your chart should look something like the following:

새 빠른 측정 화면의 이미지

다음 단계Next steps