다항 특징(Polynomial Features)이란? AI에서 입력의 거듭제곱과 곱으로 새 특징을 만드는 방법
TL;DR
다항 특징은 원래 수치 입력의 거듭제곱과 서로의 곱을 계산해 새 입력 열을 만드는 방법입니다. 두 값 x와 y를 이차까지 펼치면 상수·원래 값·제곱·곱을 함께 표현합니다. 선형 모델도 이런 열의 계수를 학습하면 원래 입력의 곡선 관계를 다룹니다. 특징 생성 자체는 예측이나 정답 학습이 아니며 차수·상수 열·상호작용·출력 크기와 외삽을 따로 확인합니다.[1][2][3]
핵심 3줄 요약
- 핵심 1
표본이 아닌 입력 열을 늘립니다. 같은 한 행에서 제곱과 곱을 만들어 모델이 볼 표현을 바꿉니다. - 핵심 2
차수는 지수의 합으로 셉니다. x와 y의 곱은 이차이고 x의 제곱과 y의 곱은 삼차입니다. - 핵심 3
많은 항이 좋은 예측은 아닙니다. 열 수·수치 범위·과적합·관측 밖 예측을 같은 조건에서 점검합니다.
이 글에서 다룰 내용
- 다항 특징의 한 문장 정의
- 두 입력을 여섯 열로 펼치는 쉬운 예시
- 항 선택·곱 계산·모델 결합의 작동 순서
- 차수·상호작용·상수 열·열 이름의 설정
- 피처 엔지니어링·다항 회귀·커널과의 차이
- 작은 기준 모델과 전처리 체크리스트
- 계산량·큰 값·외삽·평가 자료의 주의점
다항 특징을 한 문장으로 정의하면 무엇인가요?
다항 특징은 수치 변수들의 거듭제곱과 곱으로 정한 차수 범위의 항을 계산해, 원래 표본을 더 많은 특징 열로 표현하는 변환입니다.
영문명은 Polynomial Features이며 다항식 특징 또는 다항 특성이라고도 부릅니다. scikit-learn의
PolynomialFeatures
는 지정한 최대 차수 이하의 조합을 만듭니다. 각 행의 입력값으로 계산하며 정답 y는 이 변환의 fit에서 사용하지 않습니다.[1][2]
변환 결과는 새 입력 행렬입니다. 그다음 회귀나 분류 모델이 각 열을 얼마나 반영할지 학습합니다. 원래 변수 사이에 실제 원인 관계가 있는지, 생성한 곱이 업무에 도움이 되는지는 이 계산만으로 결정되지 않습니다.
한 줄 정리: 다항 특징은 모델에 건넬 숫자의 표현을 늘립니다. 예측값과 계수는 뒤에 연결한 모델에서 구합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 수치 입력 두 개
[2,3]
을 한 행으로 준비했다고 가정해 보겠습니다. 실제 업무 자료가 아닌 설명용 숫자입니다. 이차 변환에 상수 열을 포함하면 열의 뜻은
[1,x,y,x**2,x*y,y**2]
이고 값은
[1,2,3,4,6,9]
입니다.[1]
원래 두 열이 여섯 열로 늘었지만 표본은 여전히 한 개입니다. 새로운 고객이나 새 관측값을 생성한 것이 아닙니다. 같은 원본을 더 많은 계산 열로 펼쳤으므로 학습 자료의 독립적인 증거가 여섯 배 늘었다고 말하지 않습니다.
상호작용만 쓰면 같은 변수의 제곱을 빼고
[1,x,y,x*y]
를 남깁니다. 앞의 행은
[1,2,3,6]
이 됩니다. 서로 다른 변수의 곱을 사용한다는 조건이지, 원래 변수와 상수 열까지 자동으로 모두 버린다는 뜻은 아닙니다.[1][2]
설명용으로 예측식을
prediction = 1 + 2*x + 3*y + 4*x*y
라고 정하면 이 행의 계산값은 38입니다. 계수는 직접 정했으며 학습 결과가 아닙니다. 변환된 열에는 계수를 곱해 더할 뿐이지만 원래 x와 y에서는 곱 관계가 들어간 식입니다.
위 전개·열 수·38의 계산은 Python 표준 라이브러리로 검산했습니다. NumPy의 뒤에 설명할 이차원 행렬도 직접 실행해 비교했습니다. scikit-learn 변환기를 실행하거나 실제 회귀 모델을 학습해 성능을 측정한 결과는 아닙니다.
쉬운 예시: 입력 두 칸을 제곱·곱이 적힌 여섯 칸으로 펼칩니다. 어느 칸을 얼마나 쓸지는 별도 모델의 몫입니다.
왜 AI에서 다항 특징이 중요한가요?
작은 모델에 곡선 관계의 후보를 건넵니다
직선 입력만으로 부족한 관계를 표현할 때 제곱과 곱을 후보로 추가합니다. 공식 다항식·스플라인 예제는 변환과 릿지 회귀를 파이프라인으로 묶어 비선형 효과를 다룹니다. 복잡한 신경망을 만들지 않아도 입력 표현을 바꿔 비교할 수 있다는 활용 예입니다.[3]
각 열이 어떤 계산인지 추적합니다
원래 열과 제곱·곱의 대응을 알면 모델에 들어간 값을 다시 계산해 볼 수 있습니다. 다만 항이 많고 서로 비슷하면 계수 해석이 어려워집니다. 곱 항을 넣었다는 사실만으로 두 입력의 상호작용이 실제로 입증됐다고 결론 내리지 않습니다.
다항 특징은 어떤 순서로 작동하나요?
1. 입력 열과 허용할 차수를 정합니다
한 행을 한 표본, 한 열을 한 변수로 맞춥니다. 이차라면 x의 제곱, x와 y의 곱처럼 지수의 합이 2 이하인 항을 고릅니다.
x**2*y
는 지수 합이 3이므로 이차 전체 전개에는 들어가지 않습니다. 최대 차수는 한 변수의 최대 지수만 따로 정한 값과 다릅니다.[1]
2. 같은 행의 값을 곱해 출력 열을 만듭니다
정한 항마다 원래 값을 곱합니다.
x*y
는 같은 행 안의 두 특징을 결합하며 이웃 행이나 미래 시점의 관측을 자동으로 끌어오지 않습니다. 상수 항은 모든 입력 지수가 0인 열이고 값은 항상 1입니다. 출력 열의 순서와 이름을 함께 보관합니다.[1][2]
3. 변환된 행렬을 별도 모델에 연결합니다
변환기가 만든 열을 회귀·분류 모델의 입력으로 사용합니다. 새 표본에도 같은 열 순서와 설정을 적용합니다. 고정된 곱 계산에는 y가 필요 없지만 차수나 사용할 항을 고르는 결정은 정답과 검증 결과를 참고할 수 있어, 최종 평가 자료를 그 선택에 쓰지 않습니다.[1][5]
실전 팁: 원본 열 이름·생성한 항·차수·상수 열 설정을 한 묶음으로 남기세요. 새 입력의 열 순서가 바뀌면 같은 숫자 배열도 다른 의미가 됩니다.
주요 설정과 결과는 어떻게 읽나요?
degree는 최대 차수 또는 차수 범위입니다
확인한 scikit-learn 문서의 기본값은
degree=2
입니다.
degree=(2,2)
처럼 범위를 주면 이차 항만 고릅니다. 그러나 0차 상수의 포함은
include_bias
가 결정하므로 최소 차수를 2로 두었다고 상수까지 자동으로 없어지지는 않습니다.[1]
앞의 두 입력에 범위 2부터 2와 상수 포함을 적용한 설명용 결과는
[1,4,6,9]
입니다. 반대로 최대 이차에서 상수만 빼면
[2,3,4,6,9]
입니다. 최소 차수와 상수 열의 스위치를 따로 확인해야 두 결과를 구별합니다.
interaction_only는 같은 변수의 반복 곱을 제외합니다
interaction_only=True
이면 서로 다른 변수끼리의 항만 만듭니다.
x*y
는 가능하지만
x**2
와
x**2*y
는 제외합니다. 입력이 두 변수뿐이면 최대 차수를 3으로 올려도 서로 다른 세 변수를 곱할 수 없어 삼차 상호작용 항이 생기지 않습니다.[1][2]
include_bias와 모델의 절편을 함께 봅니다
기본
include_bias=True
는 1로 채운 열을 추가합니다. 뒤 모델도 별도 절편을 학습한다면 상수 표현이 겹치는지 검토합니다. 어느 쪽을 끌지는 모델과 규제 조건에 맞춰 정하며, 상수 열을 제외하는 설정이 모든 모델의 절편까지 없애는 것은 아닙니다.[1]
출력 열 수와 지수표를 확인합니다
n_output_features_
는 생성된 열 수이고
powers_
는 각 출력 항의 입력별 지수표입니다.
get_feature_names_out()
으로 열 이름을 확인합니다. 상수 포함 전체 전개에서 입력 2개·삼차는 10열, 입력 20개·삼차는 1,771열, 입력 100개·삼차는 176,851열입니다. 이 수는 조합을 열거해 검산했습니다.[1]
열 수만큼 저장 공간과 뒤 모델의 계산 부담도 달라집니다.
order="C"
와
order="F"
는 밀집 출력의 메모리 순서 설정입니다. 항의 차수나 열 이름을 바꾸는 옵션이 아니며 변환 단계가 빨라도 다음 모델까지 빨라진다고 보장하지 않습니다.[1]
다항 특징과 헷갈리는 용어는 무엇이 다른가요?
피처 엔지니어링·특징 선택·다항 회귀와의 차이
피처 엔지니어링은 입력 설계 전반이고 다항 특징은 그중 거듭제곱·곱을 만드는 구체적 변환입니다. 특징 선택은 후보를 남기는 작업입니다. 다항 회귀는 이런 표현으로 수치를 예측하는 모델링이며 변환기 하나의 호출만으로 회귀 학습이 끝나지는 않습니다.
기존 베이지안 릿지 글은 계수 분포와 예측 표준편차를 다룹니다. 그 모델에 다항 특징을 연결할 수 있지만 특징 생성 자체에는 계수 사후분포나 예측 구간이 없습니다. 입력을 만드는 단계와 불확실성을 추정하는 단계를 나눕니다.
다항 커널·스플라인·국소 필터와의 차이
다항 커널은 확장 공간의 관계를 암묵적으로 다루는 방식과 연결됩니다. 이 글은 실제 입력 열을 만들어 저장합니다. 열이 비슷한 다항식이라는 이유로 계수 가중이나 커널 설정까지 자동으로 같다고 보지는 않습니다. 스플라인은 매듭으로 나뉜 구간의 기저를 사용하며 단순 거듭제곱 열과 다릅니다.[2][3]
사비츠키–골레이 필터는 이웃 구간에 다항식을 맞춰 원래 신호를 평활화하거나 미분합니다. 다항 특징은 표의 각 행에서 입력 열을 만듭니다. 두 방법에 다항식이 등장해도 창을 이동해 신호값을 바꾸는 처리와 같은 작업은 아닙니다.
NumPy의 축별 차수 행렬과의 차이
NumPy의
polyvander2d(x,y,[2,2])
는 x와 y 각각의 최대 지수를 2로 둡니다. 따라서
x**2*y**2
처럼 총차수 4인 항도 포함해 9열이 됩니다. scikit-learn의 총차수 2 전개인 6열과 같은 계약이 아닙니다. 앞 입력의 NumPy 결과는 실제 함수 호출로 확인했습니다.[4]
비교 정리: 다항 특징은 입력 행렬, 회귀는 예측 모델, 커널은 암묵적 관계 계산, SG는 이웃 신호 처리입니다. 같은 다항식이라는 말보다 입력과 출력을 먼저 봅니다.
실전에서는 어디에 쓰이나요?
수치 예측의 작은 기준 모델을 비교합니다
수치 두 개의 개별 효과만 볼 때와 제곱·곱까지 넣을 때를 같은 회귀 모델로 비교하는 실험을 설계합니다. 예를 들어 장치 설정과 처리량의 곡선 관계를 후보로 검토할 수 있습니다. 이 글은 활용 예를 설명하며 실제 장비 자료의 개선을 측정한 결과는 아닙니다.
전처리와 모델의 책임을 나눠 점검합니다
변환된 행의 값이 틀리면 열 순서·단위·곱 계산을 살핍니다. 값이 맞아도 예측이 틀리면 모델과 평가 범위, 자료의 한계를 봅니다. 원본·변환 행렬·모델 출력을 따로 남기면 특징 생성 성공을 업무 성공과 섞지 않습니다.
다항 특징을 적용할 때 어떤 순서로 확인하나요?
1. 원본 열과 크기부터 고정합니다
입력 이름·단위·결측 처리·예측 시점의 가용성을 적습니다. 숫자로 표시한 상품 코드 같은 범주에 무심코 제곱과 곱을 만들지 않습니다. 먼저 낮은 차수의 예상 열 수와 실제 메모리를 확인하고 전개 후 큰 값이나 유효하지 않은 값도 점검합니다.
2. 작은 배열과 열 이름을 대조합니다
두 입력 예시에서 전체 이차·상호작용만·상수 제외·최소 차수를 각각 비교합니다. 0과 음수도 넣어 제곱과 곱의 부호를 확인합니다. 원래 행 수가 유지되고 학습·새 입력의 열 이름 및 지수표가 같은지 검사합니다.
3. 전처리 전체를 나눈 자료에서 평가합니다
스케일링과 규제 모델을 연결한다면 파이프라인 전체를 교차 검증에 넣어 각 훈련 폴드 안에서 통계를 맞춥니다. 테스트 자료에는 저장한 변환을 적용합니다. 고정된 다항 곱셈 자체가 테스트 통계를 배우는 것은 아니지만, 스케일러·차수 선택·특징 선택이 평가 정보를 사용하지 않도록 구분합니다.[5]
사용할 때 무엇을 주의해야 하나요?
첫째, 높은 차수를 자동 개선으로 보지 않습니다. 훈련점에 잘 맞아도 점 사이의 흔들림이나 과적합이 늘 수 있습니다. 차수와 규제는 검증 자료에서 고르고 최종 테스트는 선택이 끝난 뒤 확인합니다. 공식 예제의 곡선 비교를 자신의 성능 결과로 옮겨 적지 않습니다.[1][3]
둘째, 입력 범위 밖 예측을 따로 시험합니다. 거듭제곱은 관측 범위 밖에서 빠르게 커질 수 있습니다. 학습 범위 안의 적합이 외삽의 정확성을 보장하지 않습니다. 새 값이 원래 어느 범위를 벗어났는지 표시하고 무리한 예측을 별도로 검토합니다.[3]
셋째, 크기 변환의 순서와 의미를 기록합니다. 원래 값을 먼저 중심화한 뒤 곱한 항과 원래 곱을 만든 뒤 중심화한 열은 값이 다릅니다. 규제가 걸린 모델에서는 척도가 계수 추정에도 관여하므로 전처리 순서를 임의로 바꾸지 않습니다. 정수 오버플로와 큰 실수값도 따로 검사합니다.
넷째, 곱 항의 계수를 인과 효과로 단정하지 않습니다. 상관된 입력과 여러 항이 같은 패턴을 나눠 설명할 수 있습니다. 예측을 잘 맞힌 조합이 실제 조작의 효과나 업무상 안전한 자동 결정을 보증하지는 않습니다. 민감한 값으로 만든 조합도 입력 검토 대상입니다.
주의: 새 열은 새 증거가 아닙니다. 계산량과 표현력은 늘어도 부족한 표본이나 잘못된 정답, 예측 시점에 모르는 정보가 해결되지는 않습니다.
자주 묻는 질문
Q1. 다항 특징을 만들면 학습 표본도 늘어나나요?
아닙니다. 같은 행에서 입력 열을 늘립니다. 두 값이 여섯 값으로 전개돼도 독립적인 표본 한 개라는 사실은 같습니다. 데이터 증강으로 새 표본을 만드는 작업과 구분합니다.
Q2. degree=2는 각 변수의 제곱을 모두 곱한다는 뜻인가요?
이 구현의 최대 차수는 지수의 합입니다. x와 y의 곱은 이차지만 두 제곱의 곱은 사차입니다. NumPy polyvander2d의 축별 최대 차수와 혼용하지 않습니다.[1][4]
Q3. interaction_only=True이면 원래 입력 열은 없어지나요?
기본 차수 범위에서는 원래 일차 항이 남습니다. 같은 변수의 반복 곱이 제외되는 설정입니다. 상수는 include_bias가 따로 결정하고 최소 차수 범위도 함께 봅니다.[1][2]
Q4. 변환기의 fit에 정답 y가 꼭 필요한가요?
PolynomialFeatures의 fit은 y를 무시합니다. 이 단계는 출력 항의 구성을 정합니다. 뒤의 지도 모델이 정답으로 계수를 학습하는 단계와 다릅니다.[1]
Q5. 곡선 입력을 쓰면 선형 모델이 아닌가요?
원래 입력과 예측의 관계는 비선형일 수 있지만, 변환한 특징의 계수를 선형으로 결합하는 모델일 수 있습니다. 입력에 대한 모양과 계수에 대한 선형성을 나눠 읽습니다.[3]
Q6. 차수를 크게 하면 부족한 자료를 보완하나요?
항이 늘어도 새로운 관측 증거가 생기지는 않습니다. 높은 차수는 열 수·과적합·외삽의 위험을 키울 수 있습니다. 낮은 차수와 같은 분할에서 비교하고 필요한 표본과 실제 오류를 확인합니다.[1][3]
출처
마무리
다항 특징은 원래 입력의 거듭제곱과 곱으로 열을 만드는 변환입니다. 총차수·상호작용·상수 열을 나눠 보고, 변환된 행렬과 뒤 모델의 예측을 구분하면 복잡해진 입력의 뜻을 추적하기 쉽습니다.
처음에는 두 값의 이차 전개부터 확인해 보세요. 실제 자료에서는 열 수·단위·출력 이름·스케일링 순서를 남기고 파이프라인 전체를 분리한 자료로 평가합니다. 더 많은 열보다 새 입력에서의 오류와 관측 범위 밖 실패를 기준으로 채택 여부를 정합니다.
