다음을 통해 공유


자습서: Model Builder를 사용하여 식당 위생 위반의 심각도 분류

모델 작성기를 사용하여 다중 클래스 분류 모델을 빌드하고 위생 점검 중에 발견된 식당 위생 위험 수준을 분류하는 방법을 알아봅니다.

이 자습서에서는 다음과 같은 작업을 수행하는 방법을 살펴봅니다.

  • 데이터 준비 및 이해
  • Model Builder 구성 파일 만들기
  • 시나리오 선택
  • 데이터베이스에서 데이터 로드
  • 모델 학습
  • 모델 평가
  • 예측에 모델 사용

사전 요구 사항

필수 구성 요소 및 설치 지침 목록을 보려면 모델 작성기 설치 가이드를 방문하세요.

모델 작성기 다중 클래스 분류 개요

이 샘플은 모델 작성기로 빌드된 기계 학습 모델을 사용하여 위생 위반 위험을 범주화하는 C# .NET Core 콘솔 애플리케이션을 만듭니다. dotnet/samples GitHub 리포지토리에서 이 자습서의 소스 코드를 찾을 수 있습니다.

콘솔 애플리케이션 만들기

  1. "RestaurantViolations"라는 C# .NET Core 콘솔 애플리케이션을 만듭니다.

데이터 준비 및 이해

기계 학습 모델을 학습하고 평가하는 데 사용되는 데이터 세트는 원래 San Francisco Department of Public Health Restaurant Safety Scores(샌프란시스코 공중 보건 식당 안전 점수)를 기반으로 합니다. 편의상 모델을 학습하고 예측하는 데 관련된 열만 포함하도록 데이터 세트를 압축했습니다. 데이터 세트에 대해 알아보려면 다음 웹 사이트를 방문하세요.

식당 안전 점수 데이터 세트를 다운로드하고 압축을 풉니다.

데이터 세트의 각 행에는 위생을 점검하는 동안 관측된 위반에 대한 정보 및 이러한 위반이 공중 보건 및 안전에 미치는 위협에 대한 위험 평가가 포함됩니다.

InspectionType ViolationDescription RiskCategory
루틴 - 예정되지 않음 부적절하게 씻었거나 위생 처리된 식품 접촉 표면 위험 수준 보통
새 소유권 고위험 해충 감염 위험 수준 높음
루틴 - 예정되지 않음 행주가 깨끗하지 않거나 제대로 보관되지 않았거나 살균제가 부적절함 위험 수준 낮음
  • InspectionType: 검사 유형입니다. 새로운 시설에 대한 최초 점검, 정기 점검, 불만 사항 점검 및 기타 여러 유형이 될 수 있습니다.
  • ViolationDescription: 점검 중 발견된 위반에 대한 설명입니다.
  • RiskCategory: 위반이 공중 보건 및 안전에 미치는 위험의 심각도입니다.

label은 예측할 열입니다. 분류 작업을 수행하는 경우 목표는 범주(텍스트 또는 숫자)를 할당하는 것입니다. 이 분류 시나리오에서 위반의 심각도에는 낮음, 보통 또는 높음 위험 값이 할당됩니다. 따라서 RiskCategory는 레이블입니다. featureslabel 예측을 위해 모델에 제공하는 입력입니다. 이 경우 InspectionTypeViolationDescriptionRiskCategory를 예측하기 위한 기능 또는 입력으로 사용됩니다.

Model Builder 구성 파일 만들기

솔루션에 Model Builder를 처음 추가하는 경우 mbconfig 파일을 만들라는 메시지가 표시됩니다. mbconfig 파일은 세션을 다시 열 수 있도록 Model Builder에서 사용자가 수행하는 모든 작업을 추적합니다.

  1. 솔루션 탐색기에서 RestaurantViolations 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가>기계 학습 모델... 을 선택합니다.
  2. mbconfig 프로젝트의 이름을 RestaurantViolationsPrediction으로 지정하고 추가 단추를 클릭합니다.

시나리오 선택

모델 작성기 시나리오 화면

모델을 학습하려면 모델 작성기에서 제공하는 사용 가능한 기계 학습 시나리오 목록에서 선택합니다. 이 경우 시나리오는 ‘텍스트 분류’입니다.

  1. 이 샘플의 경우 작업은 다중 클래스 분류입니다. Model Builder의 ‘시나리오’ 단계에서 데이터 분류 시나리오를 선택합니다.

데이터 로드

Model Builder는 csv, tsv 또는 txt 형식인 SQL Server 데이터베이스 또는 로컬 파일의 데이터를 허용합니다.

  1. Model Builder 도구의 데이터 단계의 데이터 원본 형식 선택에서 SQL Server를 선택합니다.
  2. 데이터 원본 선택 단추를 선택합니다.
    1. 데이터 원본 선택 대화 상자에서 Microsoft SQL Server 데이터베이스 파일을 선택합니다.
    2. 항상 이 선택 사용 확인란의 선택을 취소하고 계속을 클릭합니다.
    3. 연결 속성 대화 상자에서 찾아보기를 선택하고 다운로드한 RestaurantScores.mdf 파일을 선택합니다.
    4. 확인을 선택합니다.
  3. 테이블 드롭다운에서 위반을 선택합니다.
  4. 예측할 열(레이블) 드롭다운에서 RiskCategory를 선택합니다.
  5. 고급 데이터 옵션의 기본 선택 항목을 그대로 둡니다.
  6. 다음 단계 단추를 클릭하여 Model Builder의 학습 단계로 이동합니다.

모델 학습

이 자습서에서 문제 분류 모델을 학습하는 데 사용되는 기계 학습 작업은 다중 클래스 분류입니다. 모델 학습 프로세스 중에 모델 작성기는 다른 다중 클래스 분류 알고리즘 및 설정을 통해 개별 모델을 학습하여 데이터 세트에 가장 적합한 모델을 찾습니다.

모델을 학습하는 데 필요한 시간은 데이터 양에 비례합니다. 모델 작성기는 데이터 소스의 크기에 따라 학습 시간(초) 의 기본값을 자동으로 선택합니다.

  1. Model Builder는 학습 시간(초) 값을 60초로 설정합니다. 더 긴 시간 동안 학습하면 모델 작성기가 최상의 모델을 찾아 더 많은 알고리즘과 매개 변수의 조합을 탐색할 수 있습니다.
  2. 학습 시작을 클릭합니다.

학습 프로세스 전체에서 진행률 데이터는 학습 단계의 Training results 섹션에 표시됩니다.

  • 상태는 학습 프로세스의 완료 상태를 표시합니다.
  • 최상의 정확도는 지금까지 Model Builder에서 찾은 가장 성능이 뛰어난 모델의 정확도를 표시합니다. 더 높은 정확도는 테스트 데이터에서 모델이 더 정확하게 예측된다는 것을 의미합니다.
  • 최상의 알고리즘은 지금까지 Model Builder에서 찾은 가장 성능이 뛰어난 알고리즘의 이름을 표시합니다.
  • 마지막 알고리즘은 모델 작성기에서 모델을 학습시키는 데 가장 최근에 사용한 알고리즘의 이름을 표시합니다.

학습이 완료되면 mbconfig 파일에는 학습 후 생성된 RestaurantViolationsPrediction.zip이라는 모델이 있으며 여기에는 다음과 같은 C# 파일 2개가 포함됩니다.

  • RestaurantViolationsPrediction: 이 파일에는 모델을 로드하고 이를 사용하여 예측 엔진을 만든 다음 예측을 반환하는 public 메서드가 있습니다.
  • RestaurantViolationsPrediction.training.cs: 이 파일은 사용된 하이퍼 매개 변수를 포함해 최상의 모델을 빌드하기 위해 Model Builder를 동반하는 학습 파이프라인으로 구성됩니다.

평가 단계로 이동하려면 다음 단계 단추를 클릭합니다.

모델 평가

학습 단계의 결과는 최상의 성능을 가진 하나의 모델이 됩니다. Model Builder 도구의 평가 단계에서 최상의 모델 섹션에는 가장 성능이 좋은 모델에 사용되는 알고리즘과 더불어 해당 모델의 정확도에 관한 메트릭이 포함됩니다.

또한 Visual Studio의 출력 창에는 상위 모델 및 메트릭이 포함된 요약 테이블이 있습니다.

이 섹션에서는 단일 예측을 수행하여 모델을 테스트할 수도 있습니다. 값을 입력하는 텍스트 상자가 제공되며 예측 단추를 클릭하여 최상의 모델에서 예측을 도출할 수 있습니다. 기본적으로 이 상자는 데이터 세트에 있는 임의의 행으로 채워집니다.

(선택 사항) 모델 사용

이 단계에는 모델을 사용하는 데 사용할 수 있는 프로젝트 템플릿이 포함됩니다. 이 단계는 선택 사항이며 필요에 가장 적합한 모델 제공 방법을 선택할 수 있습니다.

  • 콘솔 앱
  • Web API

콘솔 앱

솔루션에 콘솔 앱을 추가하는 경우 프로젝트의 이름을 지정하라는 메시지가 표시됩니다.

  1. 콘솔 프로젝트 이름을 RestaurantViolationsPrediction_Console로 지정합니다.

  2. 솔루션에 추가를 클릭하여 현재 솔루션에 프로젝트를 추가합니다.

  3. 애플리케이션을 실행합니다.

    프로그램에서 생성된 출력은 아래 코드 조각과 유사해야 합니다.

    InspectionType: Routine - Unscheduled
    ViolationDescription: Moderate risk food holding temperature
    
    Predicted RiskCategory: Moderate Risk
    

Web API

솔루션에 웹 API를 추가하는 경우 프로젝트의 이름을 지정하라는 메시지가 표시됩니다.

  1. 웹 API 프로젝트 이름을 RestaurantViolationsPrediction_API로 지정합니다.

  2. 솔루션에 추가*를 클릭하여 현재 솔루션에 프로젝트를 추가합니다.

  3. 애플리케이션을 실행합니다.

  4. PowerShell을 열고 PORT가 애플리케이션이 수신 대기 중인 포트인 경우 다음 코드를 입력합니다.

    $body = @{
        InspectionType="Reinspection/Followup"
        ViolationDescription="Inadequately cleaned or sanitized food contact surfaces"
    }
    
    Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. 성공하면 출력이 아래 텍스트와 유사하게 표시됩니다. 출력에는 예측된 RiskCategory가 보통 위험으로 포함되며 각 입력 레이블에는 낮은 위험, 높은 위험 및 보통 위험 같은 점수가 있습니다.

    prediction    score
    ----------    -----
    Moderate Risk {0.055566575, 0.058012854, 0.88642055}
    

축하합니다! 모델 작성기를 사용하여 위생 위반 위험을 범주화하기 위한 기계 학습 모델을 성공적으로 빌드했습니다. dotnet/samples GitHub 리포지토리에서 이 자습서의 소스 코드를 찾을 수 있습니다.

추가 리소스

이 자습서에서 언급한 항목에 대한 자세한 내용은 다음 리소스를 참조하세요.