여기서 다루는 주제는 다음과 같습니다.
모든 테이블 형식 데이터 모델 권장사항
다음 권장사항은 AutoML 모델을 만드는지 또는 테이블 형식 데이터가 사용되는 커스텀 학습 모델을 만드는지에 따라 적용됩니다.
데이터 유출 방지
데이터 유출은 예측 요청 시 사용할 수 없는 예측 정보가 학습 데이터에 있을 때 발생합니다. 데이터 유출로 인해 모델이 뛰어난 평가 측정항목을 표시하더라도 실제 데이터에서는 제대로 작동하지 않을 수 있습니다.
예를 들어 내일 가게에서 아이스크림이 얼마나 많이 팔릴지 알고 싶다고 가정해 보겠습니다. 이 경우 아직 발생하지 않은 내일의 기온을 모르기 때문에 학습 데이터에 대상 날짜의 기온은 포함할 수 없습니다. 하지만 전날 예측한 기온은 사용 가능하며, 이 기온을 예측 요청에 포함할 수도 있습니다.
또한 여러 데이터 분할에서 동일한 데이터를 사용하는 경우에도 데이터 유출이 발생할 수 있습니다. 시계열 데이터를 사용하는 경우, 동일 날짜의 데이터가 세 가지 데이터 분할 중 하나로만 사용되는지 확인합니다.
학습-제공 편향 방지
학습/제공 편향은 예측 요청에 사용한 데이터를 생성했을 때와 다른 방식으로 학습 데이터를 생성하면 발생합니다.
예를 들어 평균값을 사용하는 경우, 학습 목적으로는 10일 동안의 평균을 계산하고 예측을 요청할 때는 지난달의 평균을 계산하는 식입니다.
학습 데이터 생성 방법과 제공 데이터(예측 생성에 사용할 데이터) 생성 방법 간의 차이가 학습-제공 편향을 유발하지 않도록 검토하는 것이 일반적으로 필요합니다.
학습-제공 편향 및 데이터 분포
학습-제공 편향은 데이터 분할 학습, 검증, 테스트 시 데이터 분포에 따라 발생할 수도 있습니다. 데이터가 프로덕션에 배포될 때 모델이 보게 될 데이터 분포와 모델이 학습된 데이터세트의 데이터 분포 간에는 종종 차이가 목격됩니다. 예를 들어 프로덕션 단계에서는 학습 중 표시된 사용자가 아닌 완전히 다른 사용자 그룹에 모델을 적용하거나 최종 학습 데이터가 기록된지 30일이 지난 후 예측을 수행할 때 모델을 사용할 수 있습니다.
최상의 결과를 얻기 위해서는 모델을 만들기 위해 사용되는 데이터 분할의 배포가 학습 데이터 및 프로덕션 환경에서 예측되는 데이터 사이의 차이를 정확하게 반영하는지 확인합니다. Vertex AI는 비단조 예측을 생성할 수 있으며, 프로덕션 데이터가 학습 데이터와 완전히 다른 분포에서 샘플링된다면 비단조 예측의 신뢰성은 매우 낮아집니다.
또한 프로덕션 데이터와 학습 데이터 사이의 차이는 검증 데이터 분할과 학습 데이터 분할 사이의 차이뿐 아니라 테스트 데이터 분할과 검증 데이터 분할 사이의 차이에 반영되어야 합니다.
예를 들어 향후 30일간의 사용자 평생 가치(LTV)를 예측하려면 학습데이터의 데이터가 분할되고 30일 후에 검증 데이터의 데이터가 분할되어야 하고, 검증 데이터의 데이터 분할되고 30일 후에 테스트 데이터의 데이트가 분할되었는지 확인해야 합니다.
마찬가지로 신규 사용자에 대한 일반화된 예측을 수행하도록 모델을 조정하려면 특정 사용자의 데이터가 학습 데이터의 단일 분할에만 포함되도록 해야 합니다. 예를 들어 user1
과 관련된 모든 행은 학습 데이터 분할에 있고, user2
와 관련된 모든 행은 검증 데이터 분할에 있으며, user3
와 관련된 모든 행은 테스트 데이터 분할에 있습니다.
시간 신호 제공
분류 및 회귀 모델에서 데이터의 기본 패턴이 시간 경과에 따라 바뀔 가능성이 높다면(시간이 지나면서 무작위로 분포되지 않는다면) 해당 정보를 Vertex AI에 제공해야 합니다. 이 작업은 다음과 같이 여러 가지 방법으로 수행할 수 있습니다.
데이터의 각 행에 타임스탬프가 있다면 모델을 학습시킬 때 열이 포함되어 있고, 변환 유형이
Timestamp
이며, 시간 열로 설정되었는지 확인합니다. 이 순서 지정은 가장 최근의 데이터를 테스트 데이터로, 가장 오래된 데이터를 학습 데이터로 분할하는 데 사용합니다. 자세히 알아보기시간 열에 고유 값이 많지 않은 경우 시간 열을 사용하는 대신 수동 분할을 통해 데이터를 분할해야 합니다. 그렇지 않으면 각 데이터 세트에 충분한 수의 행이 포함되지 않아 학습이 실패할 수 있습니다.
시간 정보가 단일 열에 포함되어 있지 않다면 수동 데이터 분할을 사용해 가장 최근의 데이터를 테스트 데이터로, 가장 오래된 데이터를 학습 데이터로 사용하면 됩니다.
필요한 곳에 정보 명시
일부 데이터 기본 요소의 경우 모델 품질을 개선하기 위해 특성을 추출해야 합니다.
예를 들어 데이터에 경도와 위도가 포함된다면 이러한 열은 특수 계산 없이 숫자로 취급됩니다. 위치나 거리가 문제의 신호를 제공한다면, 정보를 명시적으로 제공하는 특성을 추출해야 합니다.
일부 데이터 유형은 특성 추출을 요구할 수도 있습니다.
- 경도/위도
- URL
- IP 주소
- 이메일 주소
- 전화번호
- 기타 지역 코드(예: 우편번호)
계산된 데이터나 집계된 데이터를 하나의 행에 포함
Vertex AI는 단일 행의 입력 데이터만 사용하여 해당 행의 타겟 값을 예측합니다. 특정 행의 예측 값을 결정하는 데 유용한 다른 행 또는 소스에서 데이터를 계산하거나 집계한 경우 해당 데이터를 소스 행과 함께 포함하세요. 새 열로 인해 데이터 유출 또는 학습-서빙 편향이 발생하지 않도록 유의하세요.
예를 들어 다음 주의 제품 수요를 예측하려면 다음과 같은 값이 포함된 열을 포함하여 예측 품질을 개선할 수 있습니다.
- 제품과 동일한 카테고리에서 재고가 있는 총 상품 수
- 제품과 동일한 카테고리에서 재고가 있는 상품의 평균 가격
- 예측이 요청된 경우 알려진 휴일 이전까지 남은 일 수
- 기타 등등
또 다른 예로, 특정 사용자가 제품을 구매할지 여부를 예측하려면 다음과 같은 값이 포함된 열을 포함하여 예측 품질을 개선할 수 있습니다.
- 특정 사용자의 기존 평균 전환율 또는 클릭률
- 현재 사용자의 장바구니에 있는 제품 수
편향 방지
학습 데이터가 예측 대상인 전체 잠재 데이터를 대표하는지 확인하세요. 예를 들어 고객이 전 세계에 거주한다면 한 국가의 학습 데이터만 사용하면 안 됩니다.
테이블 형식 AutoML 모델 권장사항
다음은 AutoML 테이블 형식 모델을 위해 테이블 형식 학습 데이터를 만들기 위한 권장사항입니다.
null 값을 적절하게 표현
CSV에서 가져오고 있다면 빈 문자열로 null 값을 나타내야 합니다. BigQuery에서는 NULL 값을 사용하세요.
데이터가 특수 문자나 숫자를 사용하여 0을 포함한 null 값을 나타내면 이 값이 잘못 해석되어 모델 품질이 저하됩니다.
가급적 값 누락 방지
데이터에 누락된 값이 있는지 확인하고 가능하면 수정하세요. 그렇지 않으면 값을 비워 둘 수 있고 이것이 null 값으로 취급됩니다.
공백을 사용하여 텍스트 분리
Vertex AI는 텍스트 문자열을 토큰화하며, 개별 단어에서 학습 신호를 도출할 수 있습니다. 또한 공간을 이용해 단어를 구분합니다. 다른 문자로 구분한 단어는 단일 항목으로 처리됩니다.
예를 들어 'red/green/blue' 텍스트를 입력하면 'red', 'green', 'blue'로 토큰화되지 않습니다. 이러한 개별 단어가 모델 학습에서 중요한 역할을 한다면 텍스트를 'red green blue'로 변환한 다음 학습 데이터에 포함해야 합니다.
범주형 특성이 정확하고 정제되었는지 확인
데이터 불일치 때문에 카테고리가 잘못 분할될 수 있습니다. 예를 들어 데이터에 'Brown'과 'brown'이 있으면 Vertex AI는 사용자 의도와 달리 두 값을 별개의 카테고리로 사용합니다. 철자가 틀려도 비슷한 결과가 발생합니다. 학습 데이터를 만들기 전에 범주형 데이터에서 이러한 불일치를 모두 제거했는지 확인하세요.
분류 모델의 균형이 맞지 않는 클래스에 특히 주의
균형이 맞지 않는 클래스(하나 이상의 결과에서 차지하는 비율이 매우 드문 분류 문제)가 있다면 다음 팁을 사용해 보세요.
소수 범주에 충분한 학습 데이터 제공
한 클래스에 데이터 행이 너무 적으면 모델 품질이 저하됩니다. 따라서 가능하면 모든 클래스에 데이터 행을 100개 이상 제공해야 합니다.
수동 분할 사용 고려
Vertex AI는 테스트 데이터 세트의 행을 무작위로(하지만 확정적으로) 선택합니다. 균형이 맞지 않는 클래스에서는 데이터 세트의 소수 범주가 아주 적은 상태로(또는 아예 없는 상태로) 끝날 수 있으며, 이로 인해 학습이 실패합니다.
균형이 맞지 않는 클래스가 있다면 수동 분할을 할당하여 결과에서 차지하는 비율이 적은 행이 모든 분할에 포함되도록 할 수 있습니다.
충분한 학습 데이터 제공
학습 데이터를 충분히 제공하지 않으면 결과 모델이 제대로 작동하지 않을 수 있습니다. 모델 학습에 사용하는 열이 많을수록 더 많은 데이터를 제공해야 합니다.
데이터 세트에는 언제나 행이 1,000개 이상 있어야 합니다.
다음 표에는 목표에 따라 제공할 학습 데이터의 양에 대한 몇 가지 휴리스틱이 나와 있습니다.
목표 | 권장되는 최소 학습 데이터 양 |
---|---|
분류 | 열보다 행이 최소 10배 이상 |
예측 | 모델 학습에 사용된 모든 열에 10개 이상의 시계열 |
회귀 | 열보다 행이 최소 50배 이상 |
다른 사전 처리와 변환은 모두 Vertex AI가 처리하도록 하기
위에서 언급한 상황이 아니라면 AutoML 모델을 학습시킬 때 Vertex AI가 특성 추출을 수행하도록 하세요. AutoML은 사용자의 기본 데이터에 액세스할 때 최상의 성능을 발휘합니다. 변환 유형에 따라 AutoML에서 수행되는 모든 변환 목록은 Vertex AI 변환을 참조하세요.
테이블 형식 예측 모델 권장사항
예측 모델을 위한 학습 데이터에는 몇 가지 특수한 고려사항이 있습니다.
데이터 세부사항 선택 시 고려사항
예측 모델을 학습시킬 때 데이터 세부사항 또는 학습 데이터 행 사이의 시간 간격을 지정합니다. 시간, 일, 주, 월 또는 연 단위일 수 있습니다. 또한 1, 5, 10, 15, 30분일 수 있습니다.
데이터 세부사항은 학습 데이터와 모든 일괄 예측 데이터에서 일관되어야 합니다. 일일 세부사항을 지정하고 두 학습 데이터 행 사이에 2일이 있는 경우 Vertex AI는 중간 날짜를 누락된 데이터로 취급하여 모델 성능을 저하시킬 수 있습니다. 동일한 타임스탬프가 있고 동일한 시계열에 있는 여러 행(세부사항에 따라 결정됨)은 학습 시 유효성 검사 오류로 간주됩니다.
일반적으로 데이터 수집 방식에 따라 데이터 세부사항이 결정됩니다.
환경설정 기간에 적절한 값을 찾는 방법
과거(콜드 스타트)로 확장되지 않는 여러 예측 데이터가 있을 것으로 예상되는 경우 환경설정 기간을 0으로 설정합니다. 그렇지 않으면 예측 범위의 크기와 예측 범위의 10배 크기 사이의 환경설정 기간이 적합합니다.
다음 단계에 따라 데이터의 적합한 값을 찾아보세요.
첫 번째 학습 반복을 수행하려면 환경설정 기간과 예측 범위를 동일한 값으로 설정하고 학습 예산을 6시간 이상으로 설정합니다.
학습 예산은 동일하게 유지하면서 모델을 다시 학습시킵니다. 하지만 환경설정 기간의 크기는 예측 범위 크기의 2배로 설정합니다.
두 번째 모델의 평가 측정항목에 상당한 개선이 발생한 것으로 확인되면, 모델을 다시 학습시켜 환경설정 기간을 예측 범위 크기의 5배로 늘립니다. 학습 예산에 비례하여 늘리는 것이 좋습니다(첫 번째 단계에서 10시간 동안 학습했다면 학습 예산을 50시간으로 늘립니다).
개선된 평가 측정항목이 더 이상 표시되지 않거나 결과에 만족할 때까지 환경설정 기간을 계속 늘립니다. 허용 가능한 결과를 산출한 환경설정 기간의 가장 낮은 값으로 되돌립니다.
환경설정 기간을 늘리면 다음과 같은 효과가 있습니다.
학습 시간이 늘어납니다.
환경설정 기간이 클수록 모델이 학습에 더 많은 데이터 포인트를 사용하므로 학습 시간이 늘어납니다.
예측 데이터에 필요한 기록의 양이 늘어납니다.
예측 데이터는 환경설정 기간 값만큼 이전 데이터 포인트를 제공해야 합니다.
데이터 형식 권장사항
넓거나 또는 좁은 형식으로 학습 데이터를 만들 수 있습니다. 회귀 및 분류 모델에서는 넓은 형식이 널리 사용되며 더 쉽게 조합하고 검토할 수 있습니다. 예측 모델의 경우 좁은 형식을 사용하면 데이터와 대상 간에 의도하지 않은 연결(데이터 유출)을 방지할 수 있습니다.
예측 모델을 학습시키기 위한 학습 데이터를 만들 때 각 행은 단일 시계열에 대한 단일 관찰을 나타내야 합니다. 시계열 식별자를 나타내는 열(시계열이 서로 구분되는 방식)과 예측할 값을 나타내는 열(대상)이 있어야 합니다. 그러면 모델 학습을 위해 사용되는 행의 다른 모든 값은 대상의 예측을 요청할 때 존재해야 합니다.
다음의 단순형 및 축약형 샘플 학습 데이터를 고려해 보세요.
날짜 | Widget_1_Demand | Widget_2_Demand | Widget_3_Demand | 프로모션 | 리전 |
---|---|---|---|---|---|
01/01/2019 | 112 | 241 | 0 | 0 | CA |
01/02/2019 | 141 | 219 | 0 | 1 | CA |
01/03/2019 | 149 | 244 | 0 | 0 | CA |
01/01/2019 | 52 | 0 | 43 | 0 | IL |
01/02/2019 | 81 | 0 | 26 | 1 | IL |
01/03/2019 | 89 | 0 | 86 | 0 | IL |
이 테이블은 넓은 형식의 비즈니스 데이터를 날짜별로 표시하지만 현재 형태로는 예측 모델에 사용할 수 없습니다. 단일 타겟 열과 시계열 ID 열이 없으며 특정 날짜에 대해서는 예측 시점에서 다른 위젯에 대한 수요를 알 수 없습니다.
이 테이블을 다음 형식으로 변환할 수 있습니다.
날짜 | 제품 | Region_CA_Demand | Region_IL_Demand | 프로모션 |
---|---|---|---|---|
01/01/2019 | Widget_1 | 112 | 52 | 0 |
01/02/2019 | Widget_1 | 141 | 81 | 1 |
01/03/2019 | Widget_1 | 149 | 89 | 0 |
01/01/2019 | Widget_2 | 241 | 0 | 0 |
01/02/2019 | Widget_2 | 219 | 0 | 1 |
01/03/2019 | Widget_2 | 244 | 0 | 0 |
01/01/2019 | Widget_3 | 0 | 43 | 0 |
01/02/2019 | Widget_3 | 0 | 26 | 1 |
01/03/2019 | Widget_3 | 0 | 86 | 0 |
이제 잠재적 시계열 ID 열인 제품이 생겼습니다. 하지만 이 형식은 리전 중 하나를 예측하는 데만 사용할 수 있으며 예측 시점에서 다른 리전의 데이터를 알아야 합니다.
해결 방법은 각 행이 단일 관찰을 나타내도록 좁은 형식으로 변환하는 것입니다. 시계열과 상관없는 모든 데이터가 각 행에 반복됩니다.
날짜 | 수요 | ID | 프로모션 |
---|---|---|---|
01/01/2019 | 112 | Widget_1_CA | 0 |
01/02/2019 | 141 | Widget_1_CA | 1 |
01/03/2019 | 149 | Widget_1_CA | 0 |
01/01/2019 | 52 | Widget_1_IL | 0 |
01/02/2019 | 81 | Widget_1_IL | 1 |
01/03/2019 | 89 | Widget_1_IL | 0 |
01/01/2019 | 241 | Widget_2_CA | 0 |
01/02/2019 | 219 | Widget_2_CA | 1 |
01/03/2019 | 244 | Widget_2_CA | 0 |
01/01/2019 | 0 | Widget_2_IL | 0 |
01/02/2019 | 0 | Widget_2_IL | 1 |
01/03/2019 | 0 | Widget_2_IL | 0 |
01/01/2019 | 0 | Widget_3_CA | 0 |
01/02/2019 | 0 | Widget_3_CA | 1 |
01/03/2019 | 0 | Widget_3_CA | 0 |
01/01/2019 | 43 | Widget_3_IL | 0 |
01/02/2019 | 26 | Widget_3_IL | 1 |
01/03/2019 | 86 | Widget_3_IL | 0 |
이제 시계열 식별자(ID), 대상 열(수요), 시계열 열(날짜)이 생겼습니다. 또한 각 행은 목표 값을 예측하는 데 사용할 수 있는 단일 관찰을 기반으로 합니다. 프로모션 열은 모델을 학습시키는 특성으로 사용됩니다.
실제로는 이러한 예시보다 더 많은 행과 열이 있습니다. 하지만 여기에 설명된 가이드라인에 따라 데이터 유출을 방지하도록 데이터를 구조화해야 합니다.