5단원: 예측 쿼리 실행

이 단원에서는 SELECT 문의 SELECT FROM <model> PREDICTION JOIN (DMX) 형식을 사용하여 2단원: Bike Buyer 마이닝 구조에 마이닝 모델 추가에서 만든 의사 결정 트리 모델을 기반으로 두 개의 다른 예측 유형을 만듭니다. 이러한 예측 유형은 다음과 같습니다.

  • 단일 쿼리
    예측을 만들 때는 단일 쿼리를 사용하여 임시 값을 제공합니다. 예를 들어 한 고객의 통근 거리, 지역 번호 또는 자녀 수와 같은 입력을 쿼리에 전달하여 해당 고객이 자전거를 구입할 가능성이 있는지를 확인할 수 있습니다. 단일 쿼리는 이러한 입력을 기준으로 해당 고객이 자전거를 구입할 가능성을 나타내는 값을 반환합니다.

  • 일괄 처리 쿼리
    일괄 처리 쿼리를 사용하여 잠재 고객 테이블에서 자전거를 구입할 가능성이 있는 고객을 확인할 수 있습니다. 예를 들어 마케팅 부서에서 고객 및 고객 특성 목록을 제공한 경우 일괄 처리 예측을 사용하여 해당 테이블에서 자전거를 구입할 가능성이 있는 고객을 확인할 수 있습니다.

SELECT 문의 SELECT FROM <model> PREDICTION JOIN (DMX) 형식에는 다음과 같은 세 부분이 있습니다.

  • 결과에 반환된 마이닝 모델 열 및 예측 함수 목록. 결과에는 원본 데이터의 입력 열도 포함될 수 있습니다.

  • 예측 생성에 사용되는 데이터를 정의하는 원본 쿼리. 예를 들어 일괄 처리 쿼리에서는 고객 목록이 원본 쿼리가 될 수 있습니다.

  • 마이닝 모델 열과 원본 데이터 간의 매핑. 이름이 일치하는 경우 NATURAL 구문을 사용할 수 있으며 열 매핑을 수행하지 않아도 됩니다.

예측 함수를 사용하여 쿼리의 질을 보다 향상시킬 수 있습니다. 예측 함수는 예측 사항의 발생 확률과 같은 추가 정보를 제공하고 학습 데이터 집합의 예측에 대한 지지도를 제공합니다. 예측 함수에 대한 자세한 내용은 함수(DMX)를 참조하십시오.

이 자습서의 예측은 AdventureWorksDW2012 예제 데이터베이스의 ProspectiveBuyer 테이블을 기반으로 합니다. ProspectiveBuyer 테이블에는 잠재 고객 및 관련 특징 목록이 있습니다. 이 테이블의 고객은 의사 결정 트리 마이닝 모델을 만드는 데 사용된 고객과는 독립적입니다.

SQL Server Data Tools(SSDT)의 예측 쿼리 작성기를 사용하여 예측을 만들 수도 있습니다. 자세한 내용은 예측 쿼리 작성기를 사용하여 DMX 예측 쿼리 만들기를 참조하십시오.

단원 태스크

이 단원에서는 다음 태스크를 수행합니다.

  • 단일 쿼리를 만들어 특정 고객이 자전거를 구입할 가능성이 있는지 여부 확인

  • 일괄 처리 쿼리를 사용하여 고객 테이블에서 자전거를 구입할 가능성이 있는 고객 확인

단일 쿼리

첫 번째 단계는 단일 예측 쿼리에서 SELECT FROM <model> PREDICTION JOIN(DMX)을 사용하는 것입니다. 다음은 단일 문의 일반적인 예입니다.

SELECT <select list> FROM [<mining model name>] 
NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]

코드의 첫 번째 줄에서는 쿼리가 반환할 마이닝 모델의 열을 정의하고 예측을 생성하는 데 사용되는 마이닝 모델을 지정합니다.

SELECT <select list> FROM [<mining model name>] 

코드의 다음 줄에서는 예측 생성에 사용할 고객의 특징을 정의합니다.

NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]
ORDER BY <expression>

NATURAL PREDICTION JOIN을 지정하는 경우 서버에서는 열 이름을 기반으로 모델의 각 열을 입력 열에 일치시킵니다. 열 이름이 일치하지 않는 경우에는 해당 열이 무시됩니다.

단일 예측 쿼리를 만들려면

  1. 개체 탐색기에서 Analysis Services 인스턴스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 가리킨 다음 DMX를 클릭합니다.

    비어 있는 새 쿼리가 포함된 쿼리 편집기가 열립니다.

  2. 단일 문의 일반적인 예를 빈 쿼리에 복사합니다.

  3. 다음 내용을

    <select list> 
    

    다음 구문으로 바꿉니다.

    [Bike Buyer] AS Buyer, PredictHistogram([Bike Buyer]) AS Statistics
    

    AS 문은 쿼리에서 반환한 열의 별칭을 지정하는 데 사용됩니다. PredictHistogram 함수는 확률 및 지지도를 비롯하여 예측에 대한 여러 통계를 반환합니다. 예측 문에서 사용할 수 있는 함수에 대한 자세한 내용은 함수(DMX)를 참조하십시오.

  4. 다음 내용을

    [<mining model>] 
    

    다음 구문으로 바꿉니다.

    [Decision Tree]
    
  5. 다음 내용을

    (SELECT '<value>' AS [<column name>], ...)  AS t
    

    다음 구문으로 바꿉니다.

    (SELECT 35 AS [Age],
      '5-10 Miles' AS [Commute Distance],
      '1' AS [House Owner Flag],
      2 AS [Number Cars Owned],
      2 AS [Total Children]) AS t
    

    이제 전체 문이 다음과 같아야 합니다.

    SELECT
       [Bike Buyer] AS Buyer,
       PredictHistogram([Bike Buyer]) AS Statistics
    FROM
       [Decision Tree]
    NATURAL PREDICTION JOIN
    (SELECT 35 AS [Age],
       '5-10 Miles' AS [Commute Distance],
       '1' AS [House Owner Flag],
       2 AS [Number Cars Owned],
       2 AS [Total Children]) AS t
    
  6. 파일 메뉴에서 다른 이름으로 DMXQuery1.dmx 저장을 클릭합니다.

  7. 다른 이름으로 저장 대화 상자에서 해당 폴더로 이동한 다음 파일 이름을 Singleton_Query.dmx로 지정합니다.

  8. 도구 모음에서 실행 단추를 클릭합니다.

    쿼리가 지정 특징을 갖는 고객이 자전거를 구입할지 여부에 대한 예측과 이 예측에 대한 통계를 반환합니다.

일괄 처리 쿼리

다음 단계는 일괄 처리 예측 쿼리에서 SELECT FROM <model> PREDICTION JOIN(DMX)을 사용하는 것입니다. 다음은 일괄 처리 문의 일반적인 예입니다.

SELECT TOP <number> <select list> 
FROM [<mining model name>]
PREDICTION JOIN
OPENQUERY([<datasource>],'<SELECT statement>')
  AS [<input alias>]
ON <on clause, mapping,>
WHERE <where clause, boolean expression,>
ORDER BY <expression>

단일 쿼리의 경우와 같이 코드의 처음 두 줄에서는 예측 생성에 사용할 마이닝 모델의 이름과 쿼리가 반환하는 마이닝 모델의 열을 정의합니다. TOP <number> 문은 쿼리가 <number>로 지정한 수 또는 결과만 반환하도록 지정합니다.

코드의 다음 줄에서는 예측의 토대가 되는 원본 데이터를 정의합니다.

OPENQUERY([<datasource>],'<SELECT statement>')
  AS [<input alias>]

원본 데이터를 검색하는 방법에는 여러 가지가 있지만 이 자습서에서는 OPENQUERY를 사용합니다. 사용 가능한 옵션에 대한 자세한 내용은 <source data query>를 참조하십시오.

다음 줄에서는 마이닝 모델의 원본 열과 원본 데이터 열 간의 매핑을 정의합니다.

ON <column mappings>

WHERE 절은 예측 쿼리가 반환하는 결과를 필터링합니다.

WHERE <where clause, boolean expression,>

선택 사항인 코드의 마지막 줄에서는 결과를 정렬할 기준 열을 지정합니다.

ORDER BY <expression> [DESC|ASC]

TOP <number> 문과 ORDER BY를 함께 사용하여 반환되는 결과를 필터링할 수 있습니다. 예를 들어 이 예측에서는 예측의 정확도 예상률을 기준으로 정렬된 상위 10명의 자전거 구매자를 반환합니다. [DESC|ASC] 구문을 사용하여 결과 표시 순서를 조정할 수 있습니다.

일괄 처리 예측 쿼리를 만들려면

  1. 개체 탐색기에서 Analysis Services 인스턴스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 가리킨 다음 DMX를 클릭합니다.

    비어 있는 새 쿼리가 포함된 쿼리 편집기가 열립니다.

  2. 일괄 처리 문의 일반적인 예를 빈 쿼리에 복사합니다.

  3. 다음 내용을

    <select list> 
    

    다음 구문으로 바꿉니다.

    SELECT
      TOP 10
      t.[LastName],
      t.[FirstName],
      [Decision Tree].[Bike Buyer],
      PredictProbability([Bike Buyer])
    

    TOP 10은 쿼리가 상위 10개의 결과만 반환하도록 지정합니다. 이 쿼리의 ORDER BY 문은 예측의 정확도 예상률을 기준으로 결과를 정렬하여 가능성이 가장 높은 상위 10개의 결과만 반환되도록 합니다.

  4. 다음 내용을

    [<mining model>] 
    

    다음 구문으로 바꿉니다.

    [Decision Tree]
    
  5. 다음 내용을

    OPENQUERY([<datasource>],'<SELECT statement>')
    

    다음 구문으로 바꿉니다.

      OPENQUERY([Adventure Works DW2008R2],
        'SELECT
          [LastName],
          [FirstName],
          [MaritalStatus],
          [Gender],
          [YearlyIncome],
          [TotalChildren],
          [NumberChildrenAtHome],
          [Education],
          [Occupation],
          [HouseOwnerFlag],
          [NumberCarsOwned]
        FROM
          [dbo].[ProspectiveBuyer]
        ') AS t
    
  6. 다음 내용을

    <ON clause, mapping,> 
    WHERE <where clause, boolean expression,>
    ORDER BY <expression>
    

    다음 구문으로 바꿉니다.

    [Decision Tree].[Marital Status] = t.[MaritalStatus] AND
      [Decision Tree].[Gender] = t.[Gender] AND
      [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
      [Decision Tree].[Total Children] = t.[TotalChildren] AND
      [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
      [Decision Tree].[Education] = t.[Education] AND
      [Decision Tree].[Occupation] = t.[Occupation] AND
      [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
      [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
    WHERE [Decision Tree].[Bike Buyer] =1
    ORDER BY PredictProbability([Bike Buyer]) DESC
    

    확률이 가장 높은 결과가 먼저 나열되도록 하려면 DESC를 지정합니다.

    이제 전체 문이 다음과 같아야 합니다.

    SELECT
      TOP 10
      t.[LastName],
      t.[FirstName],
      [Decision Tree].[Bike Buyer],
      PredictProbability([Bike Buyer])
    FROM
      [Decision Tree]
    PREDICTION JOIN
      OPENQUERY([Adventure Works DW2008R2],
        'SELECT
          [LastName],
          [FirstName],
          [MaritalStatus],
          [Gender],
          [YearlyIncome],
          [TotalChildren],
          [NumberChildrenAtHome],
          [Education],
          [Occupation],
          [HouseOwnerFlag],
          [NumberCarsOwned]
        FROM
          [dbo].[ProspectiveBuyer]
        ') AS t
    ON
      [Decision Tree].[Marital Status] = t.[MaritalStatus] AND
      [Decision Tree].[Gender] = t.[Gender] AND
      [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
      [Decision Tree].[Total Children] = t.[TotalChildren] AND
      [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
      [Decision Tree].[Education] = t.[Education] AND
      [Decision Tree].[Occupation] = t.[Occupation] AND
      [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
      [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
    WHERE [Decision Tree].[Bike Buyer] =1
    ORDER BY PredictProbability([Bike Buyer]) DESC
    
  7. 파일 메뉴에서 다른 이름으로 DMXQuery1.dmx 저장을 클릭합니다.

  8. 다른 이름으로 저장 대화 상자에서 해당 폴더로 이동한 다음 파일 이름을 Batch_Prediction.dmx로 지정합니다.

  9. 도구 모음에서 실행 단추를 클릭합니다.

    쿼리에서 고객 이름, 각 고객의 자전거 구입 여부 예측 및 예측 사항의 발생 확률을 포함하는 테이블이 반환됩니다.

이 단원은 Bike Buyer 자습서의 마지막 단계입니다. 이제 생성된 마이닝 모델 집합을 사용하여 고객 간 유사성을 조사하고 잠재 고객이 자전거를 구입할 것인지 여부를 예측할 수 있습니다.

Market Basket 시나리오에서 DMX를 사용하는 방법은 Market Basket DMX 자습서를 참조하십시오.