학습 데이터 만들기 관련 권장사항

이 페이지에서는 AutoML Tables 데이터세트의 데이터를 합칠 때 고려해야 하는 몇 가지 기본 개념을 소개합니다. 모든 내용을 다루지는 않습니다.

소개

잘 설계된 데이터 세트는 최종 머신러닝 모델의 품질을 높입니다. 이 페이지의 가이드라인을 이용하면 데이터세트와 모델의 품질을 개선할 수 있습니다.

머신러닝 모델용 학습 데이터 제작 경험이 있다면 걱정하지 않아도 되는 작업 목록을 확인하세요. AutoML Tables는 사용자를 대신해 많은 데이터 준비 작업을 수행합니다.

데이터 준비 권장사항

대상 유출 방지

타겟 유출은 예측 요청 시 사용할 수 없는 예측 정보가 학습 데이터에 있을 때 발생합니다. 타겟 유출로 인해 모델은 뛰어난 평가 능력을 보이지만 실제 데이터 관련 성능은 떨어질 수 있습니다

예를 들어 내일 가게에서 아이스크림이 얼마나 많이 팔릴지 알고 싶다고 가정해 보겠습니다. 이 경우 아직 발생하지 않은 내일의 기온을 모르기 때문에 학습 데이터에 대상 날짜의 기온은 포함할 수 없습니다. 하지만 전날 예측한 기온은 사용 가능하며, 이 기온을 예측 요청에 포함할 수도 있습니다.

학습-제공 편향 방지

학습/제공 편향은 예측 요청에 사용한 데이터를 생성했을 때와 다른 방식으로 학습 데이터를 생성하면 발생합니다.

예를 들어 평균값을 사용하는 경우, 학습 목적으로는 10일 동안의 평균을 계산하고 예측을 요청할 때는 지난달의 평균을 계산하는 식입니다.

학습 데이터 생성 방법과 제공 데이터(예측 생성에 사용할 데이터) 생성 방법 간의 차이가 학습-제공 편향을 유발하지 않도록 검토하는 것이 일반적으로 필요합니다.

학습-제공 편향 및 데이터 분포

학습-제공 편향은 데이터 분할 학습, 검증, 테스트 시 데이터 분포에 따라 발생할 수도 있습니다. 데이터가 프로덕션에 배포될 때 모델이 보게 될 데이터 분포와 모델이 학습된 데이터세트의 데이터 분포 간에는 종종 차이가 목격됩니다. 예를 들어 프로덕션 단계에서는 학습 중 표시된 사용자가 아닌 완전히 다른 사용자 그룹에 모델을 적용하거나 최종 학습 데이터가 기록된지 30일이 지난 후 예측을 수행할 때 모델을 사용할 수 있습니다.

최상의 결과를 얻으려면, 학습 데이터세트와 프로덕션 단계에서 예측을 수행하는 데 사용하는 데이터 간의 차이가 모델을 만드는 데 사용되는 데이터 분할 분포에 정확하게 반영되어야 합니다. AutoML Tables은 비단조 예측을 생성할 수 있으며, 프로덕션 데이터가 학습 데이터와 완전히 다른 분포에서 샘플링된다면 비단조 예측의 신뢰성은 매우 낮아집니다.

또한 프로덕션 데이터와 학습 데이터 사이의 차이는 검증 데이터 분할과 학습 데이터 분할 사이의 차이뿐 아니라 테스트 데이터 분할과 검증 데이터 분할 사이의 차이에 반영되어야 합니다.

예를 들어 향후 30일간의 사용자 평생 가치(LTV)를 예측하려면 학습데이터의 데이터가 분할되고 30일 후에 검증 데이터의 데이터가 분할되어야 하고, 검증 데이터의 데이터 분할되고 30일 후에 테스트 데이터의 데이트가 분할되었는지 확인해야 합니다.

마찬가지로 신규 사용자에 대한 일반화된 예측을 수행하도록 모델을 조정하려면 특정 사용자의 데이터가 학습 데이터의 단일 분할에만 포함되도록 해야 합니다. 예를 들어 user1과 관련된 모든 행은 학습 데이터 분할에 있고, user2와 관련된 모든 행은 검증 데이터 분할에 있으며, user3와 관련된 모든 행은 테스트 데이터 분할에 있습니다.

시간 신호 제공

데이터의 기본 패턴이 시간 경과에 따라 바뀔 가능성이 높다면(시간이 지나면서 무작위로 분포되지 않는다면) 해당 정보를 AutoML Tables에 입력해야 합니다. 이 작업은 다음과 같이 여러 가지 방법으로 수행할 수 있습니다.

  • 데이터의 각 행에 타임스탬프가 있다면 데이터 세트를 만들 때 열이 포함되어 있고, 데이터 유형이 Timestamp이며, 시간 열로 설정되었는지 확인합니다. 이 순서 지정은 가장 최근의 데이터를 테스트 데이터로, 가장 오래된 데이터를 학습 데이터로 분할하는 데 사용합니다. 자세히 알아보기

  • 시간 열에 고유 값이 많지 않은 경우 시간 열을 사용하는 대신 수동 분할을 통해 데이터를 분할해야 합니다. 그렇지 않으면 각 데이터 세트에 충분한 수의 행이 포함되지 않아 학습이 실패할 수 있습니다.

  • 시간 정보가 단일 열에 포함되어 있지 않다면 수동 데이터 분할을 사용해 가장 최근의 데이터를 테스트 데이터로, 가장 오래된 데이터를 학습 데이터로 사용하면 됩니다.

필요한 곳에 정보 명시

일반적으로 AutoML Tables를 사용해 모델을 만들 때는 특성 추출을 수행할 필요가 없습니다. 하지만 특정 데이터 기본 요소에서는 모델 품질을 개선하기 위해 특성을 추출해야 합니다.

예를 들어 데이터에 경도와 위도가 포함된다면 이러한 열은 특수 계산 없이 숫자로 취급됩니다. 위치나 거리가 문제의 신호를 제공한다면, 정보를 명시적으로 제공하는 특성을 추출해야 합니다.

일부 데이터 유형은 특성 추출을 요구할 수도 있습니다.

  • 경도/위도
  • URL
  • IP 주소
  • 이메일 주소
  • 전화번호
  • 기타 지역 코드(예: 우편번호)

계산된 데이터나 집계된 데이터를 하나의 행에 포함

AutoML Tables 단일 행의 입력 데이터만 사용하여 해당 행의 타겟 값을 예측합니다. 특정 행의 예측 값을 결정하는 데 유용한 다른 행 또는 소스에서 데이터를 계산하거나 집계한 경우 해당 데이터를 소스 행과 함께 포함하세요. 새 열로 인해 타겟 유출 또는 학습-제공 편향이 발생하지 않도록 유의하세요.

예를 들어 다음 주의 제품 수요를 예측하려면 다음과 같은 값이 포함된 열을 포함하여 예측 품질을 개선할 수 있습니다.

  • 제품과 동일한 카테고리에서 재고가 있는 총 상품 수
  • 제품과 동일한 카테고리에서 재고가 있는 상품의 평균 가격
  • 예측이 요청된 경우 알려진 휴일 이전까지 남은 일 수
  • 기타 등등

또 다른 예로, 특정 사용자가 제품을 구매할지 여부를 예측하려면 다음과 같은 값이 포함된 열을 포함하여 예측 품질을 개선할 수 있습니다.

  • 특정 사용자의 기존 평균 전환율 또는 클릭률
  • 현재 사용자의 장바구니에 있는 제품 수

null 값을 빈 문자열로 표시

데이터가 특수 문자나 숫자를 사용하여 null 값을 나타낸다면 AutoML Tables에 문제가 있을지도 모릅니다. 값이 무슨 뜻인지 알 수 없기 때문입니다. CSV에서 가져오고 있다면 빈 문자열로 null 값을 나타내야 합니다. BigQuery에서는 NULL 값을 사용하세요.

가급적 값 누락 방지

데이터에 누락된 값이 있는지 확인하고 가능하면 수정하세요. 또는 열을 null 허용으로 설정한 경우에는 값을 비워 두세요.

공백을 사용하여 텍스트 분리

AutoML Tables는 텍스트 문자열을 토큰화하며, 개별 단어에서 학습 신호를 도출할 수 있습니다. 또한 공간을 이용해 단어를 구분합니다. 다른 문자로 구분한 단어는 단일 항목으로 처리됩니다.

예를 들어 'red/green/blue' 텍스트를 입력하면 'red', 'green', 'blue'로 토큰화되지 않습니다. 이러한 개별 단어가 모델 학습에서 중요한 역할을 한다면 텍스트를 'red green blue'로 변환한 다음 학습 데이터에 포함해야 합니다.

범주형 특성이 정확하고 정제되었는지 확인

데이터 불일치 때문에 카테고리가 잘못 분할될 수 있습니다. 예를 들어 데이터에 'Brown'과 'brown'이 있으면 AutoML Tables는 사용자 의도와 달리 두 값을 별개의 카테고리로 사용합니다. 철자가 틀려도 비슷한 결과가 발생합니다. 학습 데이터를 만들기 전에 범주형 데이터에서 이러한 불일치를 모두 제거했는지 확인하세요.

균형이 맞지 않는 클래스에 특히 주의

균형이 맞지 않는 클래스(하나 이상의 결과에서 차지하는 비율이 매우 드문 분류 문제)가 있다면 다음 팁을 사용해 보세요.

소수 범주에 충분한 학습 데이터 제공

한 클래스에 데이터 행이 많지 않다면 모델 품질이 저하됩니다. 따라서 가능하면 모든 클래스에 데이터 행을 100개 이상 제공해야 합니다.

수동 분할 사용 고려

AutoML Tables는 테스트 데이터세트의 행을 무작위로(하지만 확정적으로) 선택합니다. 균형이 맞지 않는 클래스에서는 데이터세트의 소수 범주가 아주 적은 상태로(또는 아예 없는 상태로) 끝날 수 있으며, 이로 인해 학습이 실패합니다.

균형이 맞지 않는 클래스가 있다면 수동 분할을 할당하여 결과에서 차지하는 비율이 적은 행이 모든 분할에 포함되도록 할 수 있습니다.

편향 방지

학습 데이터가 예측 대상인 전체 잠재 데이터를 대표하는지 확인하세요. 예를 들어 고객이 전 세계에 거주한다면 한 국가의 학습 데이터만 사용하면 안 됩니다.

충분한 학습 데이터 제공

학습 데이터(행)를 충분히 제공하지 않으면 결과 모델이 제대로 작동하지 않을 수 있습니다. 모델 학습에 사용하는 특성(열)이 많을수록 많은 데이터(행)를 제공해야 합니다. 분류 모델의 바람직한 목표는 열보다 행을 10배 이상 확보하는 것입니다. 회귀 모델에서는 열보다 행이 최소 50배 이상이어야 합니다.

데이터세트에는 언제나 행이 1,000개 이상 있어야 합니다.

다른 사전 처리와 변환은 모두 AutoML Tables가 처리하게 하기

위에서 언급한 상황이 아니라면, AutoML Tables가 특성 추출을 수행하게 하세요. AutoML Tables는 사용자의 기본 데이터에 액세스할 때 최상의 성능을 발휘합니다. AutoML Tables가 대신 수행하는 데이터 준비를 참조하세요.

AutoML Tables가 대신 데이터 준비

이 섹션에는 AutoML Tables가 자동으로 수행하는 데이터 학습에 대한 일반적인 요구사항이 나와 있습니다. 사용자의 학습 데이터에는 이러한 계산을 포함하지 않아도 됩니다. 사실 이러한 변환 작업을 직접 수행하여 학습 데이터에 포함하면 결과 모델의 품질이 떨어질 수도 있습니다.

열 유형에 따라 각 특성 열에는 다음과 같은 자동 변환이 적용됩니다.

열 유형 변환
숫자
  • float32로 변환된 값입니다.
  • 값의 z_score입니다.
  • 분위수를 기준으로 한 값의 버킷 색인입니다. 버킷 크기는 100입니다.
  • 값이 0 이상일 때 log(값+1)입니다. 그렇지 않으면 이 변환이 적용되지 않고 누락된 값으로 간주됩니다.
  • 값이 0 이상일 때 log(값+1)의 z_score입니다. 그렇지 않으면 이 변환이 적용되지 않고 누락된 값으로 간주됩니다.
  • 값이 null인지 여부를 나타내는 불리언 값입니다.
  • 잘못된 숫자 입력이 있는 행(예: float32로 파싱할 수 없는 문자열)은 학습 및 예측에 포함되지 않습니다.
  • 극한 값/이상점 값에는 어떤 특별한 처리도 제공되지 않습니다.
숫자 배열
  • N = {1, 2, 4, 8, all}인 경우 마지막 N개 항목의 평균에 적용되는 모든 숫자 변환입니다. 따라서 가장 많이 강조되는 항목은 배열의 시작점이 아니라 끝쪽에 있는 항목입니다.
  • 빈 배열의 평균은 0으로 처리됩니다.
범주형
  • 대소문자, 구두점, 맞춤법, 시제 등의 변경 없이 있는 그대로의 범주형 문자입니다.
  • 카테고리 이름을 사전 조회 색인으로 변환하고 색인별 임베딩을 생성합니다.
  • 학습 데이터세트에서 5회 미만으로 나타나는 카테고리는 '알 수 없는' 카테고리로 취급됩니다. '알 수 없는' 카테고리는 자체 특수 조회 색인을 가져와 임베딩을 생성합니다.
범주형 배열
  • N = {1, 2, 4, 8, all}인 경우 마지막 N개 항목의 배열에 있는 각 요소에 대해 카테고리 이름은 사전 조회 색인으로 변환하고 색인별 임베딩을 생성합니다. 평균 값을 사용하여 모든 요소의 임베딩을 단일 임베딩으로 결합합니다.
  • 빈 배열의 임베딩은 0으로 취급됩니다.
텍스트
  • 대소문자, 구두점, 맞춤법, 시제 등의 변경 없이 있는 그대로의 텍스트입니다.
  • 텍스트를 여러 개의 단어로 토큰화하고 이러한 단어에서 1-gram 및 2-gram을 생성합니다. 각 n-gram을 사전 조회 색인으로 변환하고 색인별 임베딩을 생성합니다. 평균 값을 사용하여 모든 요소의 임베딩을 단일 임베딩으로 결합합니다.

    토큰화는 유니코드 스크립트 경계를 기반으로 합니다.

  • 누락된 값은 자체 조회 색인을 가져와 임베딩을 생성합니다.
  • 검색 제외 단어에는 어떤 특별한 처리도 제공되지 않으며 삭제되지 않습니다.
텍스트 배열
  • 배열의 모든 텍스트 값을 공백 문자(" ")를 구분자로 사용하여 단일 텍스트 값으로 연결한 후 결과를 단일 텍스트 값으로 처리합니다. 텍스트 열에 변환을 적용합니다.
  • 빈 배열의 임베딩은 0으로 취급됩니다.
타임스탬프
  • 숫자 열에 변환을 적용합니다.
  • 연도, 월, 일, 주를 결정합니다. 타임스탬프의 각 값을 범주형 열로 처리합니다.
  • 잘못된 숫자 값(예: 일반적인 타임스탬프 범위에 포함되지 않은 값 또는 극한 값)에는 어떤 특별한 처리도 제공되지 않으며 삭제되지 않습니다.
  • 잘못된 숫자 입력이 있는 행(예: 잘못된 타임스탬프 문자열)은 학습 및 예측에 포함되지 않습니다.
타임스탬프 배열
  • 배열의 마지막 N개 항목 평균에 숫자 열의 변환을 적용합니다. 이때 N = {1, 2, 4, 8, all}입니다. 즉, 가장 많이 강조되는 항목은 배열의 끝쪽에 있는 항목입니다.
구조체
  • 구조체 값은 필드로 자동 평면화됩니다. 평면화된 필드는 열 유형에 따라 다르게 처리됩니다.

Null 또는 누락된 값

데이터 세트 스키마에서 열에 대한 null 허용 여부를 설정하여 학습 데이터에 대해 null 값을 처리하는 방법을 선택할 수 있습니다. 자세한 내용은 데이터 세트 만들기를 참조하세요.

null 값이 null 비허용 열에 표시되면 전체 행이 학습에서 제외됩니다.

null 허용 열의 null 값은 값이 null이거나 누락되었음을 나타내는 특수 표시기 변수로 표시됩니다. 범주형 및 텍스트 변환의 경우 표시기가 포함됩니다.

AutoML Tables는 다음을 null 값으로 처리합니다.

  • BigQuery NULL 값

  • NaN 또는 무한한 숫자 값

  • 빈 문자열. AutoML Tables는 문자열에서 공백을 제거하지 않습니다. 따라서 공백 문자(" ")는 null 값으로 간주되지 않습니다.

  • NaN 또는 무한한 숫자 값으로 변환 가능한 문자열

    • 'NAN'의 경우 대소문자를 무시하며 선택적으로 결과 앞에 플러스 또는 마이너스 부호를 배치합니다.
    • 'INF'의 경우 대소문자를 무시하며 선택적으로 결과 앞에 플러스 또는 마이너스 부호를 배치합니다.
  • 누락된 값

다음 단계