스플라인 특징(Spline Features)이란? AI에서 구간별 기저로 수치 입력의 곡선 관계를 표현하는 방법
TL;DR
스플라인 특징은 매듭으로 나뉜 구간의 기저함숫값을 새 입력 열로 만드는 방법입니다. 낮은 차수의 조각 다항식을 이어 수치 입력의 곡선 관계를 표현합니다. 변환기는 입력 행렬을 만들고, 뒤의 모델이 계수를 학습합니다. 매듭·차수·절편·외삽을 구분하며 변수 간 곱이나 새 관측값이 자동으로 생기지는 않습니다.[1][2][3]
핵심 3줄 요약
- 핵심 1
구간별 기저를 계산합니다.한 입력값을 여러 기저함숫값으로 바꾸되 같은 표본의 행 수는 유지합니다. - 핵심 2
매듭과 계수는 다릅니다.매듭은 구간을 나누고 기저를 정합니다. 예측에 쓸 계수는 별도 모델이 학습합니다. - 핵심 3
범위 밖 규칙을 확인합니다.상수·선형·주기 외삽은 다른 가정입니다. 매끄러운 곡선도 미래의 정답을 보장하지 않습니다.
이 글에서 다룰 내용
- 스플라인 특징의 한 문장 정의
- 일차 기저 네 개로 살펴보는 작은 계산
- 매듭 선택·기저 평가·모델 결합의 작동 순서
- 차수·매듭 수·절편·외삽의 설정
- 다항 특징·이산화·보간·국소 필터와의 차이
- 수치 예측과 주기 입력의 사용처
- 훈련 자료 분리와 범위 밖 입력의 점검
스플라인 특징을 한 문장으로 정의하면 무엇인가요?
스플라인 특징은 수치 변수의 구간을 나누는 매듭과 다항식 차수를 정한 뒤, 각 입력 위치에서 기저함수의 값을 계산해 새 특징 행렬로 표현하는 변환입니다. 여기서는 B-스플라인 기저를 만드는 scikit-learn의
SplineTransformer
를 중심으로 설명합니다.[1][2]
기저는 곡선을 조합할 때 쓰는 기본 함수입니다. 각 기저에 계수를 곱해 더하면 하나의 곡선이 됩니다. 기저함숫값을 계산하는 단계와 정답에 맞춰 계수를 추정하는 단계는 별개입니다. SciPy의
BSpline
은 매듭·계수·차수를 받아 이런 함수를 표현합니다.[4]
한 줄 정리: 매듭은 입력 축의 위치이고, 기저 열은 그 위치에서 계산한 표현이며, 계수는 뒤 모델이 정하는 비중입니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 설명용 수치 입력 하나를 곡선 모델에 넣는다고 가정해 보겠습니다. 매듭은
[0,1,2,3]
, 차수는 1이고 모든 기저를 남깁니다. 이 조건에서 입력 범위의 양끝에 보조 매듭을 하나씩 더하면 네 개의 일차 B-스플라인 기저가 생깁니다.[1]
입력
x=0.25
는 0과 1 사이의 사분의 일 지점입니다. 이때 네 기저의 값은
[0.75,0.25,0,0]
입니다.
x=1.5
에서는
[0,0.5,0.5,0]
가 됩니다. 각 행에서 가까운 두 기저가 비중을 나눠 갖고 나머지는 0입니다. 두 행 모두 네 값의 합은 1입니다.
설명용 계수를
[10,20,10,30]
으로 직접 정하면 첫 입력의 가중합은 12.5이고 둘째는 15입니다. 이 숫자는 정답 자료로 학습한 결과가 아닙니다. 기저의 값을 계산하는 일과 그 값에 계수를 곱해 예측을 만드는 일을 구별하려고 만든 예시입니다.
위 기저값·가중합·열 수는 SciPy 문서의 재귀 정의를 옮긴 Python 표준 라이브러리 계산으로 검산했습니다. scikit-learn이나 SciPy를 설치해 실행한 결과, 실제 회귀 성능 또는 업무 자료의 측정치는 아닙니다. 이차·삼차 기저는 일차 예시보다 더 넓은 구간에서 겹칩니다.[3][4]
쉬운 예시: 입력 위치에 따라 가까운 기본 함수들이 비중을 나눕니다. 그 비중을 어떤 높이로 조합할지는 예측 모델이 정합니다.
왜 AI에서 스플라인 특징이 중요한가요?
선형 모델로 곡선 효과를 비교합니다
수치 하나와 정답의 관계가 직선에서 벗어날 때, 입력을 기저 열로 바꿔 선형 회귀에 연결하는 방법을 검토할 수 있습니다. 공식 예제는 스플라인 변환과 릿지 회귀를 파이프라인으로 묶습니다. 원래 입력에 대한 모양은 곡선이어도 기저의 계수를 선형으로 결합하는 모델입니다.[3]
일부 구간의 표현을 세밀하게 조절합니다
B-스플라인 기저는 제한된 구간에서만 0이 아닌 값을 갖습니다. 낮은 차수를 유지하고 매듭을 조절하면 구간별 변화를 표현하기 좋습니다. 다만 기저의 지지가 국소적이라는 사실과 한 관측의 영향이 그 구간에만 갇힌다는 주장은 다릅니다. 전체 자료로 계수를 함께 학습하면 다른 구간의 예측도 달라질 수 있습니다.[2][3]
스플라인 특징은 어떤 순서로 작동하나요?
1. 입력 변수마다 매듭을 정합니다
표의 각 열을 수치 변수로 보고 매듭 위치를 정합니다. 자동 설정은 훈련 입력의 범위나 분위수를 참고하고, 직접 배열로 지정할 수도 있습니다. 이 구현의
fit
은 정답
y
를 무시하지만 입력값을 보고 매듭을 정하므로 평가 자료까지 함께 넣어 맞추지 않습니다.[1][5]
2. 각 행에서 기저함숫값을 계산합니다
입력 위치마다 여러 기저를 평가해 한 행에 나란히 놓습니다. 하나의 기저가 모든 입력 범위에서 계속 영향을 주는 거듭제곱 열과 달리 B-스플라인은 국소 지지를 갖습니다. 매듭을 고정한 뒤 새 입력에는 같은 기저를 적용합니다. 새 자료마다 매듭부터 다시 맞추면 열의 뜻이 바뀝니다.[2][3]
3. 행렬을 예측 모델에 전달합니다
회귀 모델은 기저 열의 계수를 정답과 비교하며 추정합니다. 변환기만 실행하면 수치 예측이나 분류가 끝나는 것은 아닙니다. 여러 입력 열은 각각 변환되며 변수끼리의 곱 항은 자동 생성되지 않습니다. 두 변수의 결합 효과가 필요하면 별도 설계와 평가가 필요합니다.[1][2]
실전 팁: 원본 열 순서·매듭·차수·외삽 규칙과 뒤 모델을 함께 저장하세요. 같은 이름의 변환기라도 설정이 다르면 출력 열의 뜻도 달라집니다.
주요 설정과 결과는 어떻게 읽나요?
degree와 n_knots는 다른 크기입니다
확인한 API의 기본값은
degree=3
,
n_knots=5
입니다. 차수는 구간별 다항식의 차수이고 매듭 수는 기본 구간 배치의 크기입니다. 비주기 설정에서 모든 기저를 포함하면 변수 하나의 열 수는
n_knots + degree - 1
입니다. 기본 조합은 일곱 열이고 입력 두 개면 열네 열입니다.[1]
각 변수에서 마지막 기저를 제외하면 같은 두 입력은 열두 열입니다. 주기 설정은 변수당 기저 수가
n_knots - 1
로 달라집니다. 출력 크기는 기본 매듭 수와 차수, 주기 여부, 기저 제외 여부를 함께 보고 계산합니다. 문서의
n_features_out_
와 실제 행렬 폭도 대조합니다.[1]
uniform과 quantile은 매듭 배치가 다릅니다
knots="uniform"
은 변수의 최솟값부터 최댓값까지 같은 간격으로 기본 매듭을 놓습니다.
knots="quantile"
은 분위수에 맞춰 배치하므로 관측이 몰린 곳에 매듭이 더 모일 수 있습니다. 매듭 수가 같아도 위치는 달라집니다. 직접 지정한 배열에는 경계 매듭도 포함하며 내부 보조 매듭과 구별합니다.[1]
include_bias는 1로 채운 열 하나가 아닙니다
기본
include_bias=True
에서는 기저를 모두 남깁니다. 범위 안에서 기저들의 합이 1이므로 선형 조합으로 상수 효과를 표현합니다. 모든 출력 열이 각각 1이라는 의미는 아닙니다.
include_bias=False
는 변수마다 마지막 기저 하나를 빼므로 뒤 모델의 별도 절편 설정과 함께 봅니다.[1][4]
extrapolation은 범위 밖의 처리 규칙입니다
기본
extrapolation="constant"
는 경계에서의 기저값을 범위 밖으로 유지합니다.
extrapolation="linear"
는 선형 연장을,
extrapolation="error"
는 범위 밖 입력의 오류를 선택합니다. 이런 규칙은 관측되지 않은 구간을 처리하는 가정이지 실제 정답의 형태를 확인한 결과가 아닙니다.[1][3]
extrapolation="continue"
는 바깥 다항식 조각을 이어갑니다.
extrapolation="periodic"
은 첫 매듭과 마지막 매듭의 차이를 주기로 삼아 연결합니다. 주기는 되풀이 간격을 아는 경우에 직접 지정하는 편이 좋습니다. SciPy
BSpline
의 기본
extrapolate=True
를 이 변환기의 상수 기본값과 혼동하지 않습니다.[1][3][4]
스플라인 특징과 헷갈리는 용어는 무엇이 다른가요?
다항 특징은 전역 거듭제곱과 곱을 만듭니다
기존 다항 특징 글은 같은 행의 거듭제곱과 변수 간 곱을 명시적인 열로 펼칩니다. 스플라인 특징은 매듭으로 나뉜 구간의 기저를 계산합니다. 매듭 위치와 범위 밖 연결을 정하는 질문은 전체 차수와 상호작용 항을 고르는 질문과 다릅니다.[2][3]
이산화는 구간 소속을 나타냅니다
특징 이산화는 연속값을 구간으로 나눠 표시합니다. 스플라인은 낮은 차수에서도 여러 기저가 겹쳐 중간 위치를 표현할 수 있습니다. 다만 차수 0은 예외로, 같은 매듭 배치를 쓰는 구간 원-핫 표현과 연결됩니다. 모든 스플라인을 매끈한 곡선이라고만 설명하지 않습니다.[2]
보간 함수나 신호 평활화와는 출력이 다릅니다
보간은 주어진 점 사이의 값을 정하는 문제입니다. 스플라인 특징을 릿지 회귀에 연결했다고 모든 훈련점을 정확히 통과하지는 않습니다. 사비츠키–골레이 필터는 이동 창에서 이웃 신호를 맞춰 평활화하거나 미분합니다. 이 글의 변환은 행별 입력 표현을 만들며 신호값을 그 자리에서 필터링하는 작업은 아닙니다.[3]
비교 정리: 다항 특징은 거듭제곱·곱 열, 스플라인 특징은 구간별 기저 열, 이산화는 구간 표현입니다. 곡선 예측과 평활화는 그다음에 무엇을 계산하는지까지 봅니다.
실전에서는 어디에 쓰이나요?
수치 입력의 완만한 변화와 기준 모델
온도나 경과 시간 같은 수치 입력과 결과의 관계를 낮은 차수 기저로 표현하는 실험을 설계할 수 있습니다. 직선 모델·다항 특징 모델과 같은 분할에서 비교하고 구간별 오류를 살핍니다. 이는 가능한 활용 방식이며 이 글에서 실제 센서 자료의 개선을 측정했다는 주장은 아닙니다.
반복 주기를 아는 입력의 연결
주기 스플라인은 한 주기의 끝과 시작을 연결할 때 검토합니다. 공식 예제는 알려진 주기를 매듭 배열에 명시합니다. 단순히 날짜를 숫자로 바꿨다고 주기가 자동으로 맞춰지는 것은 아닙니다. 반복 간격과 입력 단위를 고정하고 경계 양쪽에서 기저와 예측을 따로 확인합니다.[1][3]
스플라인 특징을 적용할 때 어떤 순서로 확인하나요?
1. 원본 입력과 분할을 먼저 고정합니다
숫자의 단위·허용 범위·결측 처리·예측 시점의 가용성을 적습니다. 범주 코드를 연속 위치로 오해하지 않습니다. 훈련·검증·테스트를 나눈 뒤 훈련 자료에서 매듭을 맞춥니다. 시간 순서가 중요한 자료는 미래 입력으로 과거의 변환 설정을 고르지 않도록 분할부터 점검합니다.[5]
2. 작은 입력에서 열의 의미를 대조합니다
앞의 일차 예시로 행 수·기저값 합·0이 아닌 열을 확인합니다. 학습 범위 양끝과 바로 바깥의 값을 넣어 외삽 규칙도 비교합니다. 모든 기저를 남긴 경우의 합 1 검사는 범위 안에서 적용하며 마지막 기저를 뺀 출력에 똑같이 요구하지 않습니다. 열 이름과 실제 폭도 저장합니다.[1][4]
3. 변환과 모델 전체를 함께 평가합니다
매듭 수·차수·규제를 고를 때 파이프라인 전체를 교차 검증에 넣어 각 훈련 폴드에서 매듭과 계수를 다시 맞춥니다. 변환기를 전체 자료에 먼저 맞춘 뒤 모델만 교차 검증하면 평가 쪽 입력 분포가 매듭 선택에 반영될 수 있습니다. 최종 테스트 자료는 선택이 끝날 때까지 남겨 둡니다.[5]
사용할 때 무엇을 주의해야 하나요?
첫째, 매듭을 늘리는 일을 정확도 개선과 같게 보지 않습니다. 차수와 매듭 수가 과하면 과적합이 생길 수 있습니다. 훈련 오차뿐 아니라 관측이 드문 구간의 오류도 확인하고 규제와 기저 수를 함께 비교합니다.[1][3]
둘째, 국소 기저가 외삽의 안전성을 보장하지 않습니다. 상수 유지가 맞는 업무도 있고 추세를 놓치는 업무도 있습니다. 주기 설정도 반복 가정이 틀리면 잘못된 구간을 이어 붙입니다. 범위 밖 입력은 별도로 표시하고 적용 조건을 검토합니다.[3]
셋째, 스플라인이 변수 간 상호작용을 자동으로 배우는 것은 아닙니다. 이 변환기는 열마다 독립된 기저를 만듭니다. 뒤의 모델 종류에 따라 결합 효과를 다루는 방식이 달라지므로 입력 변환의 기능을 전체 모델의 능력과 섞지 않습니다.[2]
넷째, 보기 좋은 곡선을 원인이나 신뢰구간으로 읽지 않습니다. 매끄러움은 표현 방식의 성질입니다. 표본 수·오류·분포 변화와 불확실성은 별도 평가 대상이며 새로운 자료가 부족하다는 문제를 기저 열의 증가로 해결했다고 말하지 않습니다.
주의: 스플라인 특징의 출력은 새 입력 행렬입니다. 좋은 예측, 정확한 보간, 안전한 자동 결정이나 충분한 관측 자료가 함께 생기는 것은 아닙니다.
자주 묻는 질문
Q1. 스플라인 특징을 만들면 표본 수가 늘어나나요?
아닙니다. 같은 입력 행을 여러 기저 열로 표현합니다. 입력값 하나가 네 숫자로 바뀌어도 독립적인 관측이 네 개가 되지는 않습니다. 특징의 차원과 표본 수를 나눠 봅니다.
Q2. 매듭과 학습 계수는 같은 값인가요?
매듭은 입력 축에서 구간을 나누는 위치입니다. 계수는 기저함수를 어떤 비중으로 합칠지 정합니다. 변환기를 맞추는 단계와 정답으로 회귀 계수를 학습하는 단계는 별개입니다.[1][4]
Q3. include_bias=True이면 1인 열이 추가되나요?
다항 특징의 상수 열과 다르게 읽어야 합니다. 스플라인 기저 전체의 합이 1이어서 상수 효과를 표현합니다. False이면 변수마다 마지막 기저를 빼며 뒤 모델의 절편까지 자동으로 꺼지지는 않습니다.[1]
Q4. 차수를 올려야만 곡선이 더 유연해지나요?
매듭의 수와 위치도 유연성을 바꿉니다. 공식 예제는 삼차를 유지하며 매듭 수를 조절하는 접근을 설명합니다. 무조건 차수를 올리기보다 같은 분할에서 매듭 수·규제·구간별 오류를 비교합니다.[3]
Q5. 두 수치 변수의 곱도 자동으로 만들어 주나요?
SplineTransformer는 각 입력 변수를 따로 변환하므로 자동 상호작용 항을 만들지 않습니다. 개별 기저와 변수 간 결합 표현을 구별합니다. 필요한 결합은 별도 설계하고 자료가 충분한지 평가합니다.[2]
Q6. 기본 설정이면 범위 밖에서 곡선을 계속 연장하나요?
기본은 경계의 기저값을 유지하는 상수 외삽입니다. 다항식 조각의 연장은 continue, 반복 연결은 periodic 설정입니다. 범위 안의 적합이 좋더라도 이 규칙이 새 구간의 정답과 맞는지는 따로 확인합니다.[1][3]
출처
마무리
스플라인 특징은 매듭과 차수로 정한 기저를 계산해 수치 입력을 새 열로 바꿉니다. 낮은 차수로 구간별 곡선 관계를 표현하되 매듭 위치·기저값·계수·예측을 구분하면 변환 단계의 역할이 분명해집니다.
처음에는 일차 기저의 작은 계산부터 확인해 보세요. 실제 자료에서는 훈련 입력으로만 매듭을 맞추고 뒤 모델과 함께 검증합니다. 열 수가 늘었다는 사실보다 구간별 예측 오류와 범위 밖 실패를 기준으로 채택 여부를 정합니다.
