PolynomialFeatures
1. 개요
1. 개요
특성 공학의 한 기법으로, 기계 학습 모델, 특히 선형 회귀와 같은 선형 모델에 비선형 관계를 모델링할 수 있는 능력을 부여하기 위해 사용된다. 이 기법은 원본 입력 특성들을 바탕으로, 해당 특성들의 거듭제곱항과 교호작용항(상호작용항)을 새로운 특성으로 생성한다. 예를 들어, 두 개의 특성 A와 B가 있을 때, A², B², A×B와 같은 새로운 특성을 만들어 데이터의 복잡한 패턴을 더 잘 포착할 수 있도록 돕는다.
이 변환은 주로 scikit-learn 라이브러리의 sklearn.preprocessing 모듈에서 PolynomialFeatures 클래스로 제공되며, 파이썬 기반의 머신러닝 워크플로우에서 널리 활용된다. 선형 모델은 본질적으로 특성 간의 선형 관계만을 학습할 수 있기 때문에, 비선형적인 데이터 패턴을 다루기 위해서는 이러한 다항식 특성 생성이 필수적인 전처리 단계가 될 수 있다. 이를 통해 모델의 복잡도와 잠재적 예측 성능을 향상시킬 수 있다.
그러나 고차원의 다항식 특성을 무분별하게 생성할 경우, 특성의 수가 기하급수적으로 증가하는 차원의 저주 문제와 모델이 훈련 데이터에 지나치게 맞춰지는 과적합 위험이 따르므로 주의가 필요하다. 따라서 적절한 다항식 차수의 선택과 정규화 기법의 병행 사용이 중요하다. 이 기법은 다양한 회귀 분석 문제와 분류 문제의 전처리 과정에서 활용된다.
2. 기본 원리
2. 기본 원리
PolynomialFeatures는 기계 학습의 특성 공학 과정에서 사용되는 변환기로, 입력 데이터의 특성들 간의 다항식 조합을 생성하는 것이 기본 원리이다. 이는 본질적으로 선형 회귀와 같은 선형 모델이 데이터 내에 존재할 수 있는 비선형 관계를 포착할 수 있도록 돕기 위해 설계되었다. 선형 모델은 특성들 간의 곱셈이나 거듭제곱과 같은 상호작용을 직접적으로 고려하지 못하므로, PolynomialFeatures는 원본 특성들을 바탕으로 새로운 특성들을 만들어내어 모델에 제공한다.
구체적으로, 이 변환기는 사용자가 지정한 차수(degree)까지 원본 특성들의 모든 가능한 다항식 조합을 생성한다. 예를 들어, 두 개의 입력 특성 X1과 X2가 있고 차수를 2로 설정하면, 변환기는 X1, X2 뿐만 아니라 X1^2, X2^2, 그리고 X1과 X2의 상호작용을 나타내는 X1*X2라는 새로운 특성들을 추가한다. 결과적으로 모델은 이러한 확장된 특성 공간에서 선형 방정식을 학습하게 되지만, 원본 공간에서는 비선형적인 결정 경계나 회귀 곡선을 형성할 수 있게 된다.
이러한 방식은 모델의 표현력을 크게 향상시킬 수 있으며, scikit-learn 라이브러리에서 제공하는 표준 도구로 널리 사용된다. 그러나 생성된 특성의 수는 원본 특성의 수와 지정된 차수에 따라 기하급수적으로 증가할 수 있어, 차원의 저주와 과적합 같은 문제를 초래할 위험이 동반된다. 따라서 PolynomialFeatures의 적용은 모델의 복잡도와 일반화 성능 사이의 균형을 고려하여 신중하게 이루어져야 한다.
3. 주요 매개변수
3. 주요 매개변수
3.1. degree
3.1. degree
degree 매개변수는 PolynomialFeatures 변환기가 생성할 다항식의 최고 차수를 결정한다. 이 값은 양의 정수로 지정되며, 기본값은 2이다. 예를 들어, degree=2로 설정하면 원본 특성들 간의 2차항(제곱항)과 교호작용항(두 특성의 곱)이 생성된다. degree 값을 높일수록 더 복잡한 고차 다항식 특성들이 생성되어, 데이터에 존재할 수 있는 더 복잡한 비선형 관계를 모델링할 수 있는 잠재력을 제공한다.
그러나 degree 값을 지나치게 높게 설정하는 것은 주의가 필요하다. degree가 높아질수록 생성되는 특성의 수가 기하급수적으로 증가하여 차원의 저주 문제를 야기할 수 있다. 이는 계산 비용을 급격히 증가시키고, 모델이 훈련 데이터에 과도하게 맞춰지는 과적합 위험을 높인다. 따라서 적절한 degree 값은 교차 검증 등의 방법을 통해 데이터의 복잡도와 모델의 일반화 성능을 고려하여 실험적으로 결정하는 것이 일반적이다.
실제 적용에서는 degree=2 또는 degree=3이 가장 흔히 사용되며, 이는 많은 실제 문제에서 충분한 비선형성을 포착하면서도 계산 효율성을 유지할 수 있기 때문이다. 고차 다항식 특성을 생성한 후에는 특성들의 값 범위 차이가 매우 커질 수 있으므로, 표준화나 정규화와 같은 스케일링 작업을 수행하는 것이 모델 학습의 안정성과 성능에 중요하다.
3.2. interaction_only
3.2. interaction_only
interaction_only는 PolynomialFeatures 변환기의 주요 매개변수 중 하나로, 다항식 특성 생성 시 각 특성의 자기 자신의 거듭제곱(예: x^2, x^3)을 포함할지 여부를 결정한다. 이 매개변수의 기본값은 False이며, 이 경우 degree 매개변수에 지정된 차수까지 모든 특성의 거듭제곱과 교차항을 생성한다. interaction_only를 True로 설정하면, 특성 간의 순수한 교차항(예: x*y, x*y*z)만 생성하고, 각 특성의 거듭제곱 항(예: x^2)은 생성하지 않는다.
이 매개변수의 설정은 특성 공학의 목적에 따라 달라진다. 순수한 상호작용 효과만을 모델링하고자 할 때 유용하다. 예를 들어, 두 개의 입력 특성 A와 B가 있을 때, A와 B 각각의 제곱항보다는 A와 B의 곱(A*B)이 실제 목표 변수와 더 밀접한 관계를 가질 수 있다. 특히 물리 법칙이나 도메인 지식에서 곱셈 형태의 관계가 명확한 경우, interaction_only=True를 사용하면 불필요한 특성의 증가를 방지하면서 모델의 해석력을 높일 수 있다.
interaction_only 매개변수를 True로 설정하는 것은 차원의 저주를 완화하고 과적합 위험을 낮추는 데에도 기여한다. 불필요한 고차항을 생성하지 않음으로써 최종 특성 공간의 차원을 크게 줄일 수 있어, 계산 효율성과 모델의 일반화 성능을 동시에 개선할 수 있다. 이는 선형 회귀나 로지스틱 회귀와 같은 선형 모델을 사용할 때 중요한 고려 사항이 된다.
3.3. include_bias
3.3. include_bias
include_bias 매개변수는 생성된 다항식 특성 행렬에 편향(절편) 항을 포함할지 여부를 결정한다. 이 매개변수의 기본값은 True로 설정되어 있으며, 이 경우 생성된 특성 행렬의 첫 번째 열로 모든 값이 1인 열이 추가된다. 이 열은 선형 회귀 모델이나 다른 선형 모델에서 사용되는 절편(intercept) 항에 해당한다.
include_bias 매개변수를 False로 설정하면 이 편향 열이 생성되지 않는다. 이는 사용하는 기계 학습 알고리즘이 자체적으로 절편 항을 처리하거나, 사용자가 별도로 절편을 모델링하고자 할 때 유용하다. 예를 들어, scikit-learn의 일부 추정기(estimator)는 fit_intercept 매개변수를 통해 절편 계산을 별도로 제어할 수 있다. PolynomialFeatures의 출력에 편향 열이 이미 포함되어 있다면 이러한 추정기에서 중복으로 절편을 계산할 수 있으므로, include_bias=False로 설정하여 조정해야 할 수 있다.
따라서 include_bias 설정은 전체 특성 공학 파이프라인과 최종 모델의 절편 처리 방식을 고려하여 결정하는 것이 중요하다. 대부분의 경우 편의성을 위해 기본값인 True를 사용하되, 파이프라인 구성에 따라 명시적으로 False를 선택하여 불필요한 중복이나 모델의 해석 복잡성을 피할 수 있다.
4. 특징 생성 예시
4. 특징 생성 예시
PolynomialFeatures는 입력 특성의 조합을 통해 새로운 특성을 생성한다. 예를 들어, 두 개의 입력 특성 X1과 X2가 있을 때, degree=2로 설정하면 원본 특성(X1, X2) 외에 각 특성의 제곱(X1^2, X2^2)과 두 특성의 교차항(X1*X2)이 생성된다. 이는 선형 회귀 분석 모델이 X1과 X2 사이의 곱셈 관계를 포착할 수 있게 해주어, 데이터에 존재할 수 있는 비선형적 상호작용을 모델링하는 데 기여한다.
degree 매개변수를 3으로 높이면 3차항까지 생성된다. 위의 예시에 이어, X1^3, X2^3, X1^2*X2, X1*X2^2와 같은 항이 추가로 생성된다. 이는 데이터의 더 복잡한 곡선 관계를 근사할 수 있는 가능성을 열어주지만, 동시에 생성되는 특성의 수가 급격히 증가한다는 점을 유의해야 한다. interaction_only=True로 설정하면 교차항(X1*X2)만 생성되고, 각 특성의 제곱이나 세제곱 같은 순수 거듭제곱 항은 생성되지 않는다.
생성되는 특성의 구체적인 배열 순서는 기본적으로 오름차순 차수에 따라 정렬된다. 예를 들어, 입력 특성이 [a, b]이고 degree=2, include_bias=False일 때, 생성된 특성 배열은 일반적으로 [a, b, a^2, a*b, b^2] 순이 된다. 이 변환 과정은 특성 공학의 핵심 기법 중 하나로, 지도 학습 알고리즘인 선형 회귀나 로지스틱 회귀 등의 성능을 비선형 문제에서도 끌어올리는 데 널리 활용된다.
입력 특성 (degree=2) | 생성된 다항식 특성 (include_bias=False) |
|---|---|
X1, X2 | X1, X2, X1^2, X1*X2, X2^2 |
A, B, C | A, B, C, A^2, A*B, A*C, B^2, B*C, C^2 |
이 표는 두 가지 간단한 예시를 보여준다. 세 개의 입력 특성이 있고 차수가 2일 경우, 생성되는 특성의 수는 원본 3개에 2차 항 6개를 더해 총 9개가 된다. 이처럼 특성 수는 차수와 원본 특성 수에 따라 조합적으로 증가하므로, 차원의 저주와 과적합 가능성을 항상 염두에 두어야 한다.
5. 사용 시 고려사항
5. 사용 시 고려사항
5.1. 차원의 저주
5.1. 차원의 저주
PolynomialFeatures를 사용하여 특성의 차수를 높이면 생성되는 특성의 개수가 기하급수적으로 증가한다. 이는 차원의 저주라는 현상을 초래한다. 차원의 저주란 특성 공간의 차원이 증가함에 따라 데이터의 밀도가 급격히 희박해져서 모델 학습에 필요한 데이터 양이 폭발적으로 증가하는 문제를 말한다. 예를 들어, 원본 특성이 10개이고 degree=3으로 설정하면, 생성되는 다항식 특성의 수는 수백 개에 달할 수 있다.
이렇게 차원이 폭발적으로 증가하면 몇 가지 심각한 문제가 발생한다. 첫째, 모델의 계산 복잡도가 매우 높아져 학습과 예측에 걸리는 시간이 크게 증가한다. 둘째, 고차원 공간에서는 모든 데이터 포인트가 서로 멀리 떨어져 있는 것처럼 보이게 되어, 모델이 의미 있는 패턴을 학습하기 어려워진다. 셋째, 과적합의 위험이 매우 커진다. 모델이 노이즈까지 학습하여 훈련 데이터에는 매우 정확하게 맞지만, 새로운 데이터에 대한 일반화 성능은 크게 떨어질 수 있다.
따라서 PolynomialFeatures를 적용할 때는 degree 매개변수를 신중하게 선택해야 한다. 무작정 차수를 높이는 것은 오히려 성능을 저하시킬 수 있다. 일반적으로 2차나 3차 정도로 시작하는 것이 권장된다. 또한, 생성된 고차원 특성에 대해 특성 선택 기법을 적용하여 불필요한 특성을 제거하거나, 정규화를 포함한 모델을 사용하여 과적합을 방지하는 전략이 필요하다.
5.2. 과적합 위험
5.2. 과적합 위험
PolynomialFeatures 변환을 사용하면 원본 특성의 고차항과 교호작용항이 생성되어 특성 공간의 차원이 급격히 증가한다. 이로 인해 모델이 훈련 데이터에 지나치게 복잡하게 적응하여 과적합이 발생할 위험이 크게 높아진다. 특히 데이터의 샘플 수에 비해 생성된 특성의 수가 많을 때 이 문제는 두드러진다.
과적합을 방지하기 위해 PolynomialFeatures 사용 시에는 반드시 정규화 기법을 함께 적용하는 것이 일반적이다. 선형 모델의 경우, L1 정규화(Lasso)나 L2 정규화(Ridge)를 결합하여 모델의 복잡도를 제어한다. 또는 교차 검증을 통해 최적의 다항식 차수를 선택하거나, 중요하지 않은 특성을 제거하는 특성 선택 과정을 거치는 것도 효과적인 방법이다.
따라서 이 변환 기법은 모델의 표현력을 높이는 강력한 도구이지만, 그 사용에는 주의가 필요하다. 적절한 정규화 전략 없이 고차수 다항식 특성을 그대로 선형 회귀나 다른 기계 학습 알고리즘에 입력하면, 훈련 데이터에서는 우수한 성능을 보이지만 새로운 테스트 데이터에서는 형편없는 일반화 성능을 보이는 결과를 초래할 수 있다.
5.3. 스케일링 필요성
5.3. 스케일링 필요성
PolynomialFeatures 변환을 적용하면 원본 특성의 곱셈과 거듭제곱으로 인해 생성된 새로운 특성들의 값 범위가 크게 달라질 수 있다. 예를 들어, 원본 특성의 값이 0에서 10 사이인 경우, 그 제곱 특성은 0에서 100 사이의 값을 가지게 되어 스케일 차이가 발생한다. 선형 회귀나 서포트 벡터 머신과 같이 거리 기반의 알고리즘은 이러한 스케일 차이에 민감하게 반응하여, 값의 범위가 큰 특성에 지나치게 가중치를 부여하는 문제가 생길 수 있다.
이를 해결하기 위해 변환 후 스케일링을 수행하는 것이 일반적이다. 표준화나 정규화 등의 스케일링 기법을 적용하여 모든 특성이 비슷한 범위를 갖도록 조정하면, 모델이 각 특성을 공정하게 학습할 수 있다. scikit-learn 라이브러리에서는 Pipeline을 사용하여 PolynomialFeatures 변환과 StandardScaler 같은 스케일링 단계를 순차적으로 결합하는 것이 효율적인 워크플로우로 권장된다.
스케일링은 모델의 수렴 속도를 높이고, 과적합 위험을 줄이며, 최종 예측 성능을 안정화하는 데 기여한다. 따라서 다항식 특성 생성은 비선형 관계를 포착하는 강력한 도구이지만, 이를 효과적으로 활용하기 위해서는 반드시 후속 스케일링 과정을 고려해야 한다.
6. 주요 활용 분야
6. 주요 활용 분야
PolynomialFeatures는 주로 선형 회귀와 같은 선형 모델의 성능을 개선하기 위해 활용된다. 선형 모델은 기본적으로 특성 간의 선형 관계만을 학습할 수 있지만, 실제 데이터에는 비선형 관계가 존재하는 경우가 많다. 이 변환기를 사용해 원본 특성의 다항식 조합(예: 제곱항, 교호작용항)을 생성하면, 선형 모델이 이러한 비선형 패턴을 포착할 수 있는 능력을 얻게 되어 예측 정확도를 높일 수 있다.
주요 활용 분야는 기계 학습 전반의 특성 공학 단계에 걸쳐 있다. 회귀 분석 문제에서는 주택 가격 예측에서 방의 크기와 위치의 복합적 영향, 또는 화학 반응에서 온도와 압력의 상호작용 효과를 모델링하는 데 사용된다. 분류 문제에서도 로지스틱 회귀나 서포트 벡터 머신과 같은 선형 분류기의 결정 경계를 더욱 복잡하고 유연하게 만들어주는 데 적용될 수 있다.
또한, 파이프라인을 구성하여 표준화나 정규화 등의 전처리 단계와 결합하여 사용되는 것이 일반적이다. 이는 생성된 고차항 특성들의 스케일 차이가 모델 학습에 미치는 악영향을 방지하기 위함이다. 교차 검증과 함께 사용될 때는, 생성할 다항식의 최고 차수를 하이퍼파라미터로 튜닝하여 과적합을 방지하는 전략이 수반된다.
이 변환기는 scikit-learn 라이브러리를 통해 널리 접근 가능하며, 데이터 과학과 통계 모델링 프로젝트에서 비선형 관계를 탐색하고 모델의 표현력을 확장하는 핵심 도구로 자리 잡고 있다.
