원-핫 인코딩(One-Hot Encoding)이란? AI가 범주를 숫자로 바꾸는 방법
TL;DR
원-핫 인코딩(One-Hot Encoding)은 색상, 국가, 상품 유형처럼 순서가 없는 범주형 값을 하나만 1이고 나머지는 0인 숫자 벡터로 바꾸는 방법입니다. 예를 들어 빨강, 파랑, 초록을 각각 100, 010, 001처럼 표현하면 모델이 파랑을 빨강보다 크다고 오해할 여지를 줄일 수 있습니다. 다만 범주가 수천 개로 늘면 벡터가 지나치게 길어지고, 학습 때 없던 값이 들어오면 별도 처리 규칙이 필요합니다.
핵심 3줄 요약
- 핵심 1
원-핫 인코딩은 범주마다 자리를 하나씩 만들고 해당 범주의 자리만 1로 표시합니다. - 핵심 2
순서가 없는 값을 임의의 숫자 크기로 표현하는 문제를 줄여 줍니다. 모델은 각 범주에 서로 다른 가중치를 배울 수 있습니다. - 핵심 3
범주가 많으면 열과 메모리 사용량이 커집니다. 이때는 희소 표현, 범주 묶기, 해싱, 임베딩 같은 대안을 함께 검토합니다.
이 글에서 다룰 내용
- 원-핫 인코딩의 한 문장 정의
- 범주형 데이터를 숫자로 바꾸는 이유
- 색상과 고객 문의 채널로 보는 쉬운 예시
- 레이블 인코딩, 멀티-핫 인코딩, 임베딩과의 차이
- AI 개발과 자동화에서 쓰는 맥락
- 처음 보는 범주와 범주 수가 많을 때의 주의점
- 자주 묻는 질문과 공식 출처
원-핫 인코딩을 한 문장으로 정의하면 무엇인가요?
한 문장 정의: 원-핫 인코딩은 유한한 범주형 값마다 벡터의 자리를 정한 뒤, 해당 값의 자리만 1이고 나머지는 0인 숫자 배열로 표현하는 방법입니다.
Google 머신러닝 용어집은 원-핫 인코딩을 한 원소는 1이고 나머지 원소는 모두 0인 벡터로 범주형 데이터를 표현하는 방법이라고 정의합니다. 범주가 세 개라면 벡터 길이도 세 개가 됩니다.
예를 들어 색상 값이 빨강, 파랑, 초록 세 가지라면 빨강은 100, 파랑은 010, 초록은 001로 나타낼 수 있습니다. 여기서 각 자리가 어떤 색을 뜻하는지는 학습과 실제 예측에서 같은 순서로 유지해야 합니다.
이 변환은 범주 사이에 자연스러운 크기나 순서가 없을 때 특히 유용합니다. 빨강을 1, 파랑을 2, 초록을 3으로만 바꾸면 일부 모델은 숫자의 크기와 거리를 실제 관계처럼 받아들일 수 있습니다. 원-핫 인코딩은 각 범주에 독립된 자리를 줘 이런 잘못된 순서 신호를 피합니다.
한 줄 정리: 원-핫 인코딩은 범주의 이름을 단순 번호가 아니라 서로 분리된 0과 1의 자리로 바꾸는 데이터 표현법입니다.
왜 AI를 만들 때 중요한가요?
머신러닝 모델은 대체로 숫자 배열을 입력으로 받습니다. 하지만 실제 업무 데이터에는 결제 수단, 지역, 기기 종류, 상담 유형처럼 글자로 된 범주가 많습니다. 모델이 이 값을 계산하려면 일관된 숫자 표현으로 바꿔야 합니다.
첫째, 없는 순서를 만들지 않습니다. 모바일, PC, 태블릿이라는 기기 유형에 1, 2, 3을 붙이면 태블릿이 모바일보다 세 배라는 관계는 성립하지 않습니다. 원-핫 인코딩은 각 유형을 별도 자리로 나눕니다.
둘째, 모델이 범주별 영향을 따로 배울 수 있습니다. scikit-learn 문서는 여러 선형 모델과 표준 커널을 쓰는 SVM에 범주형 데이터를 넣을 때 원-핫 숫자 배열이 필요하다고 설명합니다. 모델은 모바일 자리, PC 자리, 태블릿 자리에 서로 다른 가중치를 줄 수 있습니다.
셋째, 전처리와 실제 서비스의 일관성을 점검하게 합니다. 학습할 때 정한 범주 목록과 자리 순서가 운영 환경에서도 같아야 합니다. 순서가 바뀌면 같은 010이 전혀 다른 뜻으로 해석될 수 있습니다.
감자나라ai님이 챗GPT나 제미나이 같은 완성된 AI 제품을 사용할 때 원-핫 인코딩을 직접 설정할 일은 드뭅니다. 다만 표 형태의 데이터를 학습시키거나 자동 분류 모델의 입력 구조를 설계하거나 개발 문서에서 범주형 특성 처리를 읽을 때 자주 만나는 기본 용어입니다.
핵심 인사이트: 원-핫 인코딩의 목적은 글자를 숫자로 바꾸는 데 그치지 않습니다. 범주 사이에 실제로 없는 순서와 거리를 모델에 넣지 않는 것이 핵심입니다.
쉬운 예시로 이해해 볼까요?
온라인 쇼핑몰의 고객 문의를 이메일, 채팅, 전화 세 가지 채널로 구분한다고 가정해 보겠습니다.
- 이메일: 100
- 채팅: 010
- 전화: 001
채팅 문의 한 건은 010으로 표현됩니다. 첫 번째 자리는 이메일 여부, 두 번째 자리는 채팅 여부, 세 번째 자리는 전화 여부를 나타냅니다. 한 문의가 한 채널에만 속하므로 정확히 한 자리만 1입니다.
이 값을 이메일 1, 채팅 2, 전화 3으로 바꾸는 방식은 더 짧아 보입니다. 하지만 일부 모델은 3이 1보다 크고 2와 3이 더 가깝다는 수학적 관계를 학습에 반영할 수 있습니다. 문의 채널에는 그런 순서나 거리가 없습니다.
원-핫 인코딩을 쓰면 모델은 각 채널을 별도 특성처럼 봅니다. 예를 들어 전화 문의가 반품 상담과 자주 연결되고 채팅 문의가 배송 조회와 자주 연결된다면 채널마다 다른 가중치를 학습할 수 있습니다.
예시 정리: 세 범주를 1, 2, 3이라는 한 열에 넣는 대신 100, 010, 001이라는 세 자리로 나눠 서로 독립된 선택지임을 알려 줍니다.
원-핫 인코딩은 어떤 순서로 적용하나요?
1. 범주형 열을 고릅니다
상품 유형, 고객 지역, 기기 종류처럼 값이 몇 가지 이름으로 나뉘는 열을 찾습니다. 숫자로 저장돼 있어도 우편번호나 상품 코드처럼 크기 자체에 의미가 없다면 범주형 값일 수 있습니다.
2. 범주 목록을 정합니다
학습 데이터에서 가능한 값을 모아 고정된 목록을 만듭니다. 빨강, 파랑, 초록의 순서를 정했다면 이후 변환과 예측에서도 같은 목록을 사용해야 합니다.
3. 각 범주에 자리를 배정합니다
범주가 세 개면 길이 3인 벡터를 만들고 각 범주에 한 자리씩 배정합니다. 해당 범주의 자리는 1, 나머지는 0으로 표시합니다.
4. 학습 데이터와 운영 데이터에 같은 변환기를 씁니다
학습 코드와 실제 서비스가 서로 다른 범주 순서를 쓰지 않도록 전처리 설정을 모델과 함께 저장합니다. scikit-learn의 OneHotEncoder 같은 도구는 학습한 범주 목록을 재사용할 수 있습니다.
5. 처음 보는 값의 규칙을 정합니다
학습 때 없던 새 범주가 들어오면 오류를 낼지, 미지의 범주로 묶을지, 모두 0으로 처리할지 미리 정해야 합니다. 도구마다 기본 동작과 설정이 다르므로 공식 문서를 확인합니다.
실전 팁: 학습과 예측에서 범주 목록, 자리 순서, 미지 값 처리 방식을 하나의 전처리 파이프라인으로 관리하세요.
비슷한 용어와 무엇이 다른가요?
원-핫 인코딩과 레이블 인코딩
레이블 인코딩은 빨강, 파랑, 초록을 0, 1, 2처럼 하나의 정수로 바꿉니다. 원-핫 인코딩은 범주마다 별도 자리를 만들어 100, 010, 001처럼 표현합니다.
레이블 인코딩이 항상 잘못된 것은 아닙니다. 예측해야 할 클래스 이름을 정수 ID로 관리하거나 순서형 범주를 다룰 때 쓸 수 있습니다. 입력 특성에 없는 순서를 넣을 위험이 있는지는 모델과 데이터 의미를 보고 판단해야 합니다.
원-핫 인코딩과 멀티-핫 인코딩
진짜 원-핫 벡터에는 1이 정확히 하나만 있습니다. 한 상품에 스포츠와 야외라는 태그가 동시에 붙는다면 여러 자리가 1이 될 수 있으며, 이를 멀티-핫 인코딩이라고 합니다. TensorFlow의 CategoryEncoding 문서도 one_hot과 multi_hot 출력 방식을 구분합니다.
원-핫 인코딩과 더미 인코딩
scikit-learn 문서는 one-of-K 또는 dummy encoding을 원-핫 인코딩의 다른 이름으로 소개합니다. 다만 통계 분석에서는 기준 범주 하나를 빼고 나머지 열만 쓰는 방식을 더미 인코딩이라고 부르기도 합니다. 사용하는 도구가 열을 모두 남기는지 하나를 빼는지 설정을 확인해야 합니다.
원-핫 인코딩과 임베딩
원-핫 벡터는 사람이 정한 고정 규칙이며 범주 사이의 유사성을 직접 담지 않습니다. 임베딩은 학습으로 얻은 비교적 짧고 밀집된 벡터로 범주나 토큰 사이의 관계를 표현할 수 있습니다.
범주가 몇 개뿐인 표 데이터에는 원-핫 인코딩이 단순하고 해석하기 쉽습니다. 단어, 상품 ID처럼 범주가 매우 많으면 긴 원-핫 벡터보다 임베딩이 효율적일 수 있습니다.
원-핫 인코딩과 희소 표현
원-핫 벡터는 대부분이 0이므로 희소합니다. 모든 0을 메모리에 저장하지 않고 1이 있는 위치만 기록하는 방식을 희소 표현이라고 합니다. 표현의 뜻은 같지만 저장 방식이 더 효율적일 수 있습니다.
비교 정리: 원-핫은 한 범주를 하나의 1로 표시하고, 멀티-핫은 여러 선택을 여러 개의 1로 표시하며, 임베딩은 학습된 짧은 벡터로 관계를 담습니다.
실전에서는 어떻게 쓰이나요?
첫째, 표 형태의 데이터로 분류나 예측 모델을 만들 때 씁니다. 지역, 결제 수단, 브라우저, 상품군처럼 순서가 없는 열을 모델 입력으로 바꿉니다.
둘째, 텍스트의 단어나 토큰을 설명할 때 등장합니다. 어휘 목록에서 특정 단어 하나를 표시하는 가장 단순한 표현이 원-핫 벡터입니다. 실제 대규모 언어 모델은 긴 원-핫 벡터를 그대로 주요 내부 표현으로 쓰기보다 임베딩으로 바꿔 계산하는 구조를 사용합니다.
셋째, 분류 문제의 정답을 표현할 때도 볼 수 있습니다. 고양이, 개, 새 중 정답이 개라면 010처럼 나타낼 수 있습니다. 다만 프레임워크와 손실 함수가 정수 클래스 ID를 요구하는지 원-핫 배열을 요구하는지는 따로 확인해야 합니다.
넷째, 전처리 파이프라인을 배포할 때 중요합니다. 새 데이터가 들어올 때 범주 순서가 달라지거나 처음 보는 값 때문에 예측이 실패하지 않도록 인코더 설정을 모델과 함께 버전 관리합니다.
다섯째, 데이터 품질 문제를 찾는 데 씁니다. 같은 값을 서울, 서울시, Seoul처럼 제각각 적으면 서로 다른 범주로 인식될 수 있습니다. 인코딩 전에 표기 통일과 결측값 처리가 필요합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 범주가 너무 많으면 벡터가 커집니다. 사용자 ID나 상품 ID가 수십만 개라면 범주마다 열을 하나씩 만드는 방식은 메모리와 계산 비용을 크게 늘립니다. 희소 행렬, 빈도가 낮은 범주 묶기, 해싱, 임베딩을 검토합니다.
둘째, 학습에 없던 값을 처리해야 합니다. 새 상품군이나 새 지역이 들어왔을 때 변환기가 오류를 내지, 미지 범주로 처리할지 정합니다. 모두 0인 벡터를 쓸 경우 다른 의미와 혼동되지 않는지도 확인해야 합니다.
셋째, 범주 목록을 전체 데이터에서 미리 만들지 않습니다. 검증 데이터나 테스트 데이터의 정보를 학습 전처리에 섞으면 데이터 누수가 생길 수 있습니다. 범주와 변환 규칙은 학습 데이터로 맞춘 뒤 같은 변환기를 나머지 데이터에 적용합니다.
넷째, 순서가 있는 범주에는 의미를 따져 적용합니다. 낮음, 보통, 높음처럼 실제 순서가 있는 값은 순서형 인코딩이 더 알맞을 수 있습니다. 원-핫으로 바꾸면 순서 정보를 사용하지 못합니다.
다섯째, 모델 종류에 따라 필요성이 다릅니다. 많은 선형 모델에는 원-핫 인코딩이 유용하지만 일부 트리 기반 모델이나 범주형 데이터를 직접 처리하는 알고리즘은 다른 방식이 더 적합할 수 있습니다.
주의: 원-핫 인코딩은 모든 범주형 데이터에 자동으로 적용하는 정답이 아닙니다. 범주 수, 순서 여부, 새 값 처리, 모델 특성을 함께 봐야 합니다.
자주 묻는 질문
Q1. 원-핫 인코딩은 왜 이름에 핫이 들어가나요?
여러 자리 가운데 활성화된 한 자리만 1로 켜져 있다는 뜻에서 one-hot이라는 이름을 씁니다. 나머지 자리는 모두 0입니다.
Q2. 원-핫 인코딩과 원-샷 프롬프팅은 관련이 있나요?
관련이 없습니다. 원-핫 인코딩은 범주형 데이터를 0과 1의 벡터로 바꾸는 데이터 표현 방법입니다. 원-샷 프롬프팅은 AI에게 예시 하나를 보여 주고 답을 요청하는 프롬프트 방식입니다.
Q3. 범주를 1, 2, 3으로 바꾸면 안 되나요?
항상 안 되는 것은 아닙니다. 값에 실제 순서가 있거나 사용하는 모델이 범주형 값을 별도로 처리한다면 정수 표현을 쓸 수 있습니다. 순서가 없는 범주를 일반 숫자로 넣으면 일부 모델이 잘못된 크기와 거리 관계를 학습할 수 있습니다.
Q4. 원-핫 인코딩을 하면 AI 성능이 항상 좋아지나요?
아닙니다. 잘못된 순서 신호를 줄이는 데 도움이 될 수 있지만 범주가 많으면 입력이 커지고 과적합이나 계산 비용 문제가 생길 수 있습니다. 모델과 데이터에 맞는 인코딩을 검증 데이터로 비교해야 합니다.
Q5. 챗GPT를 사용할 때 원-핫 인코딩을 직접 해야 하나요?
일반 대화나 문서 요약에서는 직접 할 필요가 없습니다. 원-핫 인코딩은 주로 머신러닝 데이터 전처리와 모델 개발에서 쓰입니다. 챗GPT로 표 데이터 분석 코드를 만들거나 모델 입력 방식을 설명할 때 이 용어를 만날 수 있습니다.
출처
마무리
원-핫 인코딩은 색상이나 상품 유형처럼 순서가 없는 범주를 하나만 1인 숫자 벡터로 바꾸는 방법입니다. 모델이 각 범주를 독립된 선택지로 보고 서로 다른 가중치를 배우게 돕습니다.
초보자는 세 가지만 기억하면 됩니다. 범주마다 자리를 하나씩 만들고, 해당 자리만 1로 표시하며, 범주가 많거나 처음 보는 값이 들어오면 별도 대안을 준비해야 합니다.
감자나라ai님이 다음에 범주형 데이터 전처리를 설계한다면 먼저 값에 실제 순서가 있는지 확인해 보세요. 순서가 없다면 원-핫 인코딩이 좋은 출발점이지만, 범주 수와 운영 데이터의 새 값까지 확인해야 안전합니다.
