특성
고친 사람 github-actions[bot]
특성은 머신러닝 모델이 대상을 판단할 때 근거로 삼는 값입니다. 모델은 회원이나 메일을 직접 보지 못하고 이 값들만 봅니다. 그래서 무엇을 특성으로 고르느냐가 모델이 배울 수 있는 것의 한계를 정합니다. 일상어로 그냥 성질을 뜻하는 특성과는 다른 머신러닝의 용어입니다.
쉽고 빠른 이해
무슨 일을 하는 물건인가 — 모델이 대상을 보고 답을 낼 때 들여다보는 값입니다. 떠날 회원을 맞히는 모델이라면 「마지막 접속 뒤 지난 날수」와 「문의 건수」가 특성입니다.
왜 이렇게 하나 — 모델은 회원도 메일도 직접 읽지 못하고 숫자만 다룹니다. 대상을 숫자 몇 개로 옮겨 적어야 모델이 배울 수 있습니다.
어떻게 도나
- 원본 기록에서 답과 관계가 있을 법한 값을 골라 계산합니다
- 숫자가 아닌 값은 숫자로 바꾸고, 크기가 들쭉날쭉한 값은 폭을 맞춥니다
- 한 건의 값들을 정해 둔 순서로 늘어놓아 모델에 넣습니다
대가 — 고른 값에 없는 정보는 모델이 끝내 모릅니다. 답이 정해진 뒤에야 채워지는 값을 잘못 넣으면 시험에서는 잘 맞히다가 운영에 올리면 무너집니다. 여기서 시험은 훈련에 안 쓴 과거 기록으로 모델의 성적을 재 보는 일입니다.
사람이 안 고르는 경우 — 사진이나 소리처럼 사람이 값을 골라 적기 어려운 데이터는 딥러닝 모델이 특성을 스스로 만듭니다.
상세
중고차 시세를 매기는 감정사를 떠올려 봅시다. 감정사는 차를 분해해 보지 않습니다. 연식, 주행거리, 사고 이력처럼 몇 가지만 확인하고 값을 매깁니다.
머신러닝 모델도 대상의 모든 것을 보지 않습니다. 대상 하나를 값 몇 개로 옮겨 적습니다. 모델은 그 값만 보고 답을 냅니다. 이렇게 옮겨 적은 값 하나하나를 특성이라고 부릅니다.
이 절은 어느 서비스에서 이번 달에 떠날 회원을 맞히는 예 하나를 끝까지 씁니다. 이 예로 특성이 표의 어디에 놓이는지, 숫자가 아닌 값을 어떻게 바꾸는지, 어떤 값을 특성으로 골라야 하는지를 차례로 봅니다.
표의 칸 — 특성과 레이블
모델을 가르치려면 과거 기록을 모은 표가 있어야 합니다. 이 표를 훈련 데이터라고 부릅니다. 표의 한 줄은 대상 하나입니다. 이 예에서는 회원 한 명입니다.
| 회원 | 마지막 접속 뒤 지난 날 | 문의 건수 | 요금제 | 떠났나 |
|---|---|---|---|---|
| 1 | 45 | 3 | 기본 | 떠남 |
| 2 | 3 | 2 | 프리미엄 | 남음 |
| 3 | 12 | 5 | 가족 | 남음 |
| 4 | 60 | 0 | 기본 | 떠남 |
표의 칸은 두 종류입니다. 회원을 묘사하는 칸이 특성입니다. 위 표에서는 지난 날수, 문의 건수, 요금제 세 칸이 특성입니다.
맨 오른쪽 칸은 모델이 맞혀야 할 답입니다. 이 답을 레이블이라고 부릅니다.
모델은 이 표를 보고 특성과 레이블 사이의 규칙을 세웁니다. 이 과정을 훈련이라고 합니다.
훈련을 마친 모델은 레이블이 없는 새 회원의 특성만 받아 맨 오른쪽 칸을 채웁니다. 이 일을 예측이라고 합니다. 예측할 때 모델 손에 있는 것은 특성뿐입니다.
분야마다 같은 칸을 다른 이름으로 부릅니다. 통계에서는 설명 변수나 독립 변수라고 부릅니다. 영어로는 feature 라서 실무에서는 「피처」라고도 합니다. 이 편은 특성으로 통일합니다.
특성 벡터
모델에 넣을 때는 한 줄의 특성 값을 정해 둔 순서대로 늘어놓습니다. 이렇게 늘어놓은 것을 특성 벡터라고 부릅니다. 순서를 정해 두는 까닭은 모델이 값을 이름이 아니라 몇 번째 칸인지로 알아보기 때문입니다.
회원 1의 특성 벡터는 [45, 3, 기본] 꼴이 됩니다. 그런데 「기본」은 숫자가 아니라서 이대로는 넣을 수 없습니다. 이 문제는 다음 소절에서 풉니다.
특성의 개수를 차원이라고도 부릅니다. 특성이 두 개면 회원 한 명은 평면 위의 점 하나로 볼 수 있습니다. 가로축이 지난 날수, 세로축이 문의 건수인 평면입니다.
이 평면에 과거 회원들을 찍으면, 특성이 쓸모 있을 때 떠난 회원의 점과 남은 회원의 점이 어느 정도 갈려 모입니다. 모델이 하는 일은 두 무리를 가르는 선을 긋는 일로 볼 수 있습니다. 이 선이 결정 경계입니다.
숫자가 아닌 특성
특성 값은 크게 둘로 갈립니다. 문의 건수처럼 크기를 견줄 수 있는 값을 수치형 특성이라고 합니다. 요금제처럼 몇 가지 이름 가운데 하나를 고르는 값을 범주형 특성이라고 합니다.
범주형 특성은 이대로 모델에 넣을 수 없습니다. 기본을 1, 프리미엄을 2, 가족을 3으로 바꾸면 숫자는 됩니다. 그런데 엉뚱한 뜻이 붙습니다. 모델은 가족이 기본의 세 배라거나 프리미엄이 둘 사이 한가운데라고 읽게 됩니다.
흔히 쓰는 해법은 범주마다 칸을 하나씩 따로 만드는 것입니다. 회원의 요금제에 해당하는 칸에만 1을 적습니다. 나머지 칸에는 0을 적습니다. 이 방법을 원-핫 인코딩이라고 부릅니다.
| 회원 | 요금제 | 기본 | 프리미엄 | 가족 |
|---|---|---|---|---|
| 1 | 기본 | 1 | 0 | 0 |
| 2 | 프리미엄 | 0 | 1 | 0 |
| 3 | 가족 | 0 | 0 | 1 |
표에서 요금제 한 칸이 세 칸으로 늘었습니다. 세 칸 사이에는 크고 작음이 없으니 엉뚱한 순서가 생기지 않습니다.
대가는 칸 수입니다. 우편번호처럼 범주가 수천 가지인 값을 이렇게 바꾸면 칸도 수천 개가 됩니다.
글도 같은 방식으로 숫자가 됩니다. 스팸 메일을 거르는 모델이라면 낱말마다 칸을 하나씩 둡니다. 그 낱말이 메일에 들어 있으면 그 칸에 1을 적습니다. 낱말 하나하나가 특성이 되는 셈입니다.
폭이 다른 특성
특성마다 값이 오가는 폭이 다릅니다. 지난 날수는 0에서 수백까지 오갑니다. 문의 건수는 대개 열을 안 넘습니다. k-최근접 이웃처럼 두 회원이 얼마나 닮았는지를 거리로 재는 모델에서는 이 차이가 문제가 됩니다.
거리를 계산하면 폭이 큰 지난 날수가 결과를 거의 혼자 정합니다. 문의 건수가 5에서 0으로 바뀌어도 지난 날수가 10 바뀐 것보다 작게 잡힙니다. 그래서 특성마다 폭을 비슷하게 맞춘 뒤에 넣습니다.
폭을 맞추는 대표적인 방법은 둘입니다. 첫째는 표준화입니다. 값에서 평균을 빼고 표준편차로 나눕니다. 표준편차는 값들이 평균에서 흩어진 정도입니다.
가령 지난 날수의 평균이 30일이고 표준편차가 15일이라면 45일은 (45 − 30) ÷ 15 = 1이 됩니다. 평균보다 표준편차 하나만큼 크다는 뜻입니다.
둘째는 정규화입니다. 가장 작은 값을 0으로, 가장 큰 값을 1로 옮깁니다. 나머지 값은 그 사이에 놓입니다. 위 표의 네 회원이라면 3일이 0, 60일이 1이 되고 45일은 0.74쯤이 됩니다.
모든 모델에 이 과정이 필요하지는 않습니다. 결정 트리는 「45일보다 큰가」처럼 값의 크고 작음만 묻습니다. 폭을 맞춰도 크고 작음의 순서는 안 바뀌니 결과도 같습니다.
특성을 고르는 두 기준
무엇을 특성으로 고르느냐에 따라 같은 모델도 맞히는 정도가 크게 달라집니다. 고를 때 따지는 기준은 둘입니다.
첫째, 레이블과 관계가 있어야 합니다. 오래 접속하지 않은 회원이 떠나기 쉽다면 지난 날수는 쓸모 있는 특성입니다. 회원 번호는 떠남과 아무 관계가 없습니다.
관계없는 값을 넣으면 모델이 번호와 결과를 짝지어 외워 버립니다. 그러면 처음 보는 회원 앞에서 틀립니다. 이렇게 훈련 데이터의 우연까지 외우는 현상을 과적합이라고 부릅니다.
둘째, 예측할 때 손에 있는 값이어야 합니다. 해지 사유 칸은 떠남을 거의 완벽하게 맞힙니다. 그런데 이 칸은 회원이 떠난 뒤에야 채워집니다. 아직 안 떠난 회원을 예측할 때는 늘 비어 있습니다.
모델을 운영에 올리기 전에는 훈련에 안 쓴 과거 기록으로 성적을 재 봅니다. 이 일이 시험입니다. 과거 기록에는 해지 사유가 다 채워져 있으니, 이런 값이 훈련에 섞이면 시험 성적은 높게 나옵니다.
그런데 운영에 올리면 이 칸이 늘 비어 있어 모델이 무너집니다. 답의 흔적이 특성으로 새어 들어간 이 실수를 데이터 누수라고 부릅니다.
특성을 만드는 일
쓸모 있는 특성은 원본 기록에 바로 적혀 있지 않은 경우가 많습니다. 데이터베이스에 있는 것은 접속할 때마다 쌓인 시각과 문의 한 건 한 건의 기록입니다. 「마지막 접속 뒤 지난 날수」는 누군가 계산해서 만들어야 하는 값입니다.
아래는 회원 한 명의 원본 기록에서 특성 두 개를 계산해 특성 벡터로 묶는 코드입니다. 오른쪽 주석이 그 줄이 만드는 값입니다.
from datetime import date
today = date(2026, 10, 16)
last_login = date(2026, 9, 1)
tickets = ["환불", "로그인", "결제"]
days = (today - last_login).days # 45
asks = len(tickets) # 3
x = [days, asks] # [45, 3]
마지막 접속 날짜에서 오늘까지의 날수를 셉니다. 문의 기록의 개수도 셉니다. 두 값을 정한 순서대로 묶은 [45, 3] 이 위 표에서 회원 1의 앞쪽 두 칸입니다.
원본 기록에서 쓸 만한 값을 골라 계산하고 다듬는 일을 특성 공학이라고 부릅니다. 앞 소절들에서 본 범주 바꾸기와 폭 맞추기도 이 일에 들어갑니다. 같은 모델이라도 어떤 특성을 만들어 주느냐에 따라 맞히는 정도가 달라집니다.
특성 공학은 훈련과 예측 두 곳에서 다 돕니다. 훈련 때는 과거 회원 기록으로 만든 특성 벡터가 레이블과 함께 들어갑니다. 예측 때는 새 회원 기록으로 만든 특성 벡터만 들어갑니다.
flowchart TD
subgraph TR["훈련 갈래"]
R1["과거 회원 기록"] --> F1["특성 공학 · 날수 세기 · 건수 세기"]
F1 --> V1["특성 벡터 + 레이블"]
end
V1 --> M["모델 · 훈련으로 규칙을 세운다"]
subgraph PR["예측 갈래"]
R2["새 회원 기록"] --> F2["특성 공학 · 날수 세기 · 건수 세기"]
F2 --> V2["특성 벡터만"]
end
V2 --> M
M --> A["예측 · 떠남 또는 남음"]
그림에서 두 갈래는 같은 특성 공학을 거칩니다. 훈련 때와 예측 때 특성을 다르게 계산하면 모델은 배운 적 없는 값을 받게 됩니다.
사진이나 소리처럼 사람이 특성을 골라 적기 어려운 데이터도 있습니다. 딥러닝 모델은 픽셀 값 같은 날것의 입력을 받아, 여러 단계의 계산을 거치며 쓸 만한 특성을 스스로 만들어 냅니다.
사람이 특성을 골라 주는 대신 모델이 데이터에서 특성을 배우는 셈입니다. 이 일을 표현 학습이라고 합니다.
특성이 너무 많을 때
회원 표에 접속 요일, 기기, 지역 같은 칸을 수백 개 붙였다고 해 봅시다. 특성이 많을수록 모델이 더 잘 맞힐 것 같지만 그렇지 않습니다. 레이블과 상관없는 특성은 모델이 우연한 짝을 외울 기회만 늘립니다. 과적합으로 가는 길이 넓어지는 셈입니다.
특성 수가 늘면 다른 문제도 생깁니다. 같은 양의 데이터가 더 넓은 공간에 흩어져 점들 사이가 듬성듬성해집니다. 회원 천 명을 칸 두 개의 평면에 찍으면 점이 빽빽합니다. 칸이 수백 개인 공간에 찍으면 가장 가까운 회원조차 멀리 떨어져 있게 됩니다. 그러면 서로 닮은 대상을 찾기가 어려워집니다. 이 현상을 차원의 저주라고 부릅니다.
그래서 쓸모 있는 특성만 남기고 나머지를 버리기도 합니다. 이 일을 특성 선택이라고 부릅니다.
고를 때 쓰는 단서 가운데 하나가 특성 중요도입니다. 모델이 각 특성에 얼마나 기대는지를 잰 값입니다. 지난 날수가 떠남과 깊이 얽혀 있다면 그 특성의 중요도가 높게 나옵니다.
버리는 대신 여러 특성을 섞어 더 적은 수의 새 특성으로 줄이는 방법도 있습니다. 이 방법을 차원 축소라고 부릅니다.
특성이라는 이름의 다른 쓰임
특성이라는 말은 머신러닝 밖에서도 자주 나옵니다. 대부분은 이 편의 뜻과 이름만 같습니다.
| 쓰임 | 무엇인가 | 이 편의 뜻과 견주면 |
|---|---|---|
| 일상어의 특성 | 어떤 것이 지닌 성질 | 이름만 같다. 따로 풀 기술 용어가 아니다 |
| 품질 특성 | 소프트웨어 품질을 가르는 기준. 성능, 보안성 같은 것 | 이름만 같다. 흔히 품질 속성이라고 부른다 |
| 특성화 테스트 | 기존 코드가 지금 하는 동작을 기록해 두는 테스트 | 이름만 같다. 영어 characterization 을 옮긴 말이다 |
| 제품의 feature | 제품이 제공하는 기능 하나 | 영어 낱말만 같다. 우리말로는 기능이라고 옮긴다 |
마지막 줄이 백엔드 개발자에게 가장 헷갈립니다. 한 팀 안에서 「피처」가 기능 개발을 뜻하기도 하고 모델 입력을 뜻하기도 합니다. 기능 플래그의 피처는 기능입니다. 피처 스토어의 피처는 이 편의 특성입니다.
관련 항목
특성과 함께 훈련 데이터 표를 이루는 요소
훈련 데이터 · 데이터셋 · 표본 · 레이블 · 타깃 · 특성 벡터 · 차원
특성을 받아 답을 내는 모델과 학습 방식
머신러닝 · 모델 · 지도학습 · 분류 · 회귀 · 결정 트리 · 훈련 · 예측 · 결정 경계
특성 값을 모델에 맞게 바꾸는 전처리
전처리 · 원-핫 인코딩 · 범주형 변수 · 수치형 변수 · 표준화 · 정규화 · 결측값
특성을 만들고 고르고 줄이는 작업
특성 공학 · 특성 선택 · 특성 중요도 · 차원 축소 · 주성분 분석 · 표현 학습 · 딥러닝 · 피처 스토어
특성을 잘못 고를 때 터지는 문제
특성과 레이블을 통계에서 부르는 이름
설명 변수 · 독립 변수 · 종속 변수 · 반응 변수
특성이라는 이름이 겹치는 다른 개념
다른 이름: feature · 피처 · 특징