학습 및 테스트 집합으로 데이터 분할(Analysis Services - 데이터 마이닝)
데이터를 학습 집합과 테스트 집합으로 분할하는 작업은 데이터 마이닝 모델 평가의 중요한 부분입니다. 일반적으로 데이터 집합을 학습 집합과 테스트 집합으로 분할할 경우 대부분의 데이터가 학습에 사용되고 일부분의 데이터만 테스트에 사용됩니다. Analysis Services에서는 테스트 파티션과 학습 파티션이 유사하게 되도록 데이터를 무작위로 샘플링합니다. 학습 및 테스트에 유사한 데이터를 사용하면 데이터 불일치의 영향을 최소화하고 모델의 특징을 보다 잘 이해할 수 있습니다.
학습 집합을 사용하여 모델을 처리한 후에는 테스트 집합에 대한 예측을 만들어 모델을 테스트합니다. 테스트 집합의 데이터에는 예측할 특성의 알려진 값이 이미 포함되어 있으므로 모델의 예측이 올바른지 여부를 쉽게 확인할 수 있습니다.
일반적으로 마이닝 모델의 예측 정확도는 리프트 또는 분류 정확도를 통해 측정됩니다. 리프트 차트 및 기타 정확도 차트에 대한 자세한 내용은 모델 정확도 차트용 도구(Analysis Services - 데이터 마이닝)를 참조하십시오.
데이터 마이닝 구조에 대한 파티션 만들기
SQL Server 2008에서는 마이닝 구조의 수준에서 데이터를 분할합니다. 파티션 크기 및 각 파티션의 데이터에 대한 정보가 구조와 함께 저장되며 이 구조를 기반으로 하는 모든 모델이 학습 및 테스트에 해당 파티션을 사용할 수 있습니다.
다음과 같은 방법으로 마이닝 구조에 파티션을 정의할 수 있습니다.
마이닝 구조를 만들 때 데이터 마이닝 마법사를 사용하여 마이닝 구조 분할
데이터 마이닝 디자이너의 마이닝 구조 탭에서 구조 속성 수정
AMO(Analysis Management Objects) 또는 XML DDL(데이터 정의 언어)을 사용하여 프로그래밍 방식으로 구조 생성 및 수정
데이터 마이닝 마법사를 사용하여 마이닝 구조 분할
기본적으로 마이닝 구조의 데이터 원본을 정의한 후 데이터 마이닝 마법사는 데이터를 학습에 대해 70%, 테스트에 대해 30%로 분할합니다. 이는 데이터 마이닝에 종종 사용되는 비율이지만 Analysis Services에서는 요구 사항에 맞게 이 비율을 변경할 수 있습니다.
마법사를 구성하여 최대 학습 사례 수를 설정하거나 여러 제한을 조합하여 지정한 최대 사례 수까지 최대 사례 비율을 허용할 수도 있습니다. 최대 사례 비율과 최대 사례 수를 모두 지정하면 Analysis Services에서 두 제한 중 보다 작은 값을 테스트 집합의 크기로 사용합니다. 예를 들어 테스트 사례에 대해 30%의 홀드아웃을 지정하고 최대 테스트 사례 수를 1000으로 지정하는 경우 테스트 집합의 크기는 1000개의 사례를 초과하지 않습니다. 이는 보다 많은 학습 데이터가 모델에 추가되더라도 테스트 집합의 크기를 일관되게 유지하려는 경우 유용할 수 있습니다.
다른 마이닝 구조에 대해 같은 데이터 원본 뷰를 사용하고 데이터가 모든 마이닝 구조 및 해당 모델에 대해 대략 같은 방식으로 분할되도록 하려면 무작위 샘플링을 초기화하는 데 사용되는 초기값을 지정해야 합니다. HoldoutSeed의 값을 지정하면 Analysis Services에서 해당 값을 사용하여 샘플링을 시작합니다. 그렇지 않으면 샘플링은 마이닝 구조의 이름에 해시 알고리즘을 사용하여 초기값을 만듭니다.
[!참고]
EXPORT 및 IMPORT 문을 사용하여 마이닝 구조의 복사본을 만들면 내보내기 프로세스에서 새 ID를 만들지만 같은 이름을 사용하므로 새 마이닝 구조가 같은 파티션 정의를 갖게 됩니다. 그러나 두 마이닝 구조가 같은 기본 데이터 원본을 사용하지만 이름이 다를 경우에는 각 마이닝 구조에 대해 생성되는 파티션이 달라집니다.
구조 속성 수정
마이닝 구조를 만들고 처리한 다음 나중에 테스트 파티션을 추가하려는 경우 마이닝 구조의 속성을 수정할 수 있습니다. 데이터가 분할되는 방식을 변경하려면 다음 속성을 편집합니다.
속성 |
설명 |
---|---|
HoldoutMaxCases |
테스트 집합에 포함할 최대 사례 수를 지정합니다. |
HoldoutMaxPercent |
테스트 집합에 포함할 사례 수를 전체 데이터 집합의 비율로 지정합니다. 데이터 집합을 갖지 않으려면 0을 지정합니다. |
HoldoutSeed |
파티션에 대한 데이터를 무작위로 선택할 때 초기값으로 사용할 정수 값을 지정합니다. 이 값은 학습 집합의 사례 수에 영향을 주는 대신 파티션이 반복될 수 있도록 합니다. |
파티션을 기존 구조에 추가하거나 변경하는 경우 구조 및 모든 관련 모델을 다시 처리해야 합니다. 또한 파티션을 추가하면 데이터의 다른 하위 집합에서 모델이 학습되므로 모델의 다른 결과를 볼 수 있습니다.
프로그래밍 방식으로 HOLDOUT 지정
DMX 문, AMO 또는 XML DDL을 사용하여 분할된 데이터 마이닝 구조를 만들 수 있습니다.
DMX DMX(Data Mining Extensions) 언어에서 CREATE MINING STRUCTURE 문은 WITH HOLDOUT 절을 포함하도록 확장되었습니다. CREATE STRUCTURE 문의 구문 및 예는 CREATE MINING STRUCTURE(DMX)를 참조하십시오.
[!참고]
ALTER MINING STRUCTURE 문은 홀드아웃 매개 변수의 사용을 지원하지 않습니다.
ASSL ASSL(Analysis Services Scripting Language)을 사용하여 새로운 분할된 마이닝 구조를 만들고 기존 데이터 마이닝 구조에 파티션을 추가하는 작업을 모두 수행할 수 있습니다. 자세한 내용은 MiningStructure 요소(ASSL)를 참조하십시오.
AMO AMO를 사용하여 파티션을 보고 수정할 수도 있습니다. 자세한 내용은 AMO 개념 및 개체 모델을 참조하십시오.
데이터 마이닝 스키마 행 집합을 쿼리하여 기존 마이닝 구조의 파티션에 대한 정보를 볼 수 있습니다. 이렇게 하려면 DISCOVER ROWSET을 호출하거나 DMX 쿼리를 사용하면 됩니다. 자세한 내용은 데이터 마이닝 스키마 행 집합 또는 데이터 마이닝 스키마 행 집합 쿼리(Analysis Services - 데이터 마이닝)를 참조하십시오.
파티션 정보 사용
기본적으로 학습 및 테스트 파티션에 대한 모든 정보는 기존 파티션을 사용하여 새 모델을 학습하고 테스트할 수 있도록 캐시됩니다. 또한 데이터의 하위 집합에서 모델을 평가할 수 있도록 사용자가 캐시된 홀드아웃 파티션에 적용할 필터를 정의할 수도 있습니다. 자세한 내용은 마이닝 모델에 대한 필터 만들기(Analysis Services - 데이터 마이닝)를 참조하십시오.
사례가 파티션으로 분할되는 방법은 사용자가 홀드아웃을 구성하는 방법과 사용자가 제공한 데이터에 따라 달라집니다. 각 파티션의 사례 수를 확인하거나 학습 및 테스트 집합에 포함된 사례에 대한 세부 정보를 찾으려는 경우 DMX 쿼리를 만들어 모델 구조를 쿼리할 수 있습니다. 예를 들어 다음 쿼리는 모델의 학습 집합에 사용된 사례를 반환합니다.
SELECT * from <structure>.CASES WHERE IsTrainingCase()
테스트 사례만 검색하고 테스트 사례를 마이닝 구조의 열 중 하나로 추가 필터링하려면 다음 구문을 사용합니다.
SELECT * from <structure>.CASES WHERE IsTestCase() AND <structure column name> = '<value>'
홀드아웃 사용의 제한 사항
홀드아웃을 사용하려면 마이닝 구조의 MiningStructureCacheMode 속성을 기본값인 KeepTrainingCases로 설정해야 합니다. CacheMode 속성을 ClearAfterProcessing으로 변경한 다음 마이닝 구조를 다시 처리하면 파티션이 손실됩니다.
시계열 모델과 함께 파티션을 사용할 수 없습니다. 따라서 파티션을 만들고 <token>msCoName</token> 시계열 알고리즘을 사용하여 모델을 만들도록 지정하거나 마이닝 구조의 사례 테이블 또는 중첩 테이블 수준에 KEY TIME 열이 포함되어 있으면 분할을 사용할 수 없습니다.
실수로 테스트에 전체 데이터 집합이 사용되고 학습에는 데이터 집합이 전혀 사용되지 않도록 파티션을 구성할 수 있습니다. 그러나 문제를 수정할 수 있도록 Analysis Services에서 오류가 발생합니다. 테스트를 위해 50%가 넘는 데이터를 홀드아웃한 경우 구조를 처리할 때에도 Analysis Services에 경고가 표시됩니다.
대부분의 사례에서 기본 홀드아웃 값인 30을 사용하면 학습 데이터와 테스트 데이터 간에 균형이 맞춰집니다. 충분한 학습을 제공하기 위해 데이터 집합이 얼마나 커야 하는지, 또는 과도한 적합화(overfitting)를 방지하기 위해 학습 집합이 얼마나 작아야 하는지를 확인할 수 있는 간단한 방법은 없습니다. 그러나 모델을 작성한 후에는 교차 유효성 검사를 사용하여 특정 모델과 관련된 데이터 집합을 평가할 수 있습니다. 자세한 내용은 교차 유효성 검사(Analysis Services - 데이터 마이닝)를 참조하십시오.
AMO 및 XML DDL에서는 앞의 표에 나열된 속성 외에 읽기 전용 속성인 HoldoutActualSize가 제공됩니다. 그러나 구조를 처리할 때까지 파티션의 실제 크기를 정확하게 확인할 수 없으므로 HoldoutActualSize 속성의 값을 검색하기 전에 모델이 처리되었는지 여부를 확인해야 합니다.