사비츠키–골레이 필터(Savitzky–Golay)란? AI에서 구간별 다항식으로 신호를 부드럽게 하는 방법
TL;DR
사비츠키–골레이 필터는 짧은 구간에 다항식을 맞추고 그 값을 사용해 신호를 평활화하는 방법입니다. 단순 이동평균과 달리 구간 안의 곡률을 반영하며 미분값도 구합니다. 다만 모든 봉우리와 경계가 그대로 보존되지는 않습니다. 창 길이·다항식 차수·표본 간격·양끝 처리를 맞추고, 음수 가중치와 미래 표본 사용 여부도 확인합니다.[1][2][3]
핵심 3줄 요약
- 핵심 1
가까운 구간에 곡선을 맞춥니다. 모든 이웃을 똑같이 평균하지 않고 정한 차수의 다항식 값을 읽습니다. - 핵심 2
창과 차수는 다른 설정입니다. 포함할 표본 수와 곡선의 복잡도를 구분하고 미분의 단위도 맞춥니다. - 핵심 3
매끈함이 원본 복원은 아닙니다. 급변 부근의 돌출·양끝 오차·실시간 지연을 별도로 점검합니다.
이 글에서 다룰 내용
- 사비츠키–골레이 필터의 한 문장 정의
- 다섯 표본으로 보는 다항식과 이동평균의 차이
- 구간 선택·최소제곱·평가 위치의 작동 순서
- 창·차수·미분·표본 간격·양끝 처리 설정
- 가우시안·중앙값·회귀 모델과의 차이
- 센서 전처리와 AI 입력의 실전 체크리스트
- 돌출·불규칙 표본·미래 정보 사용의 주의점
사비츠키–골레이 필터를 한 문장으로 정의하면 무엇인가요?
사비츠키–골레이 필터는 일정 간격의 이웃 표본에 낮은 차수의 다항식을 최소제곱으로 맞추고, 정한 위치의 함수값이나 미분값을 계산하는 국소 필터입니다.
영문명은 Savitzky–Golay filter이며 SG 필터로 줄여 부르기도 합니다. 이 글은 SciPy의 1차원 신호 처리를 기준으로 설명합니다. 전체 기록에 다항식 하나를 맞추는 전역 회귀와 달리 구간을 옮겨 위치마다 결과를 만듭니다.[1][2][3]
최소제곱은 관측값과 곡선의 차이를 제곱해 더한 양이 작아지도록 계수를 정하는 계산입니다. 관측점 모두를 반드시 통과하는 보간과는 다릅니다. NumPy의 최소제곱 문서는 행렬 방정식의 오차를 줄이는 해를 설명합니다. 뒤의 작은 배열도 이 원리로 검산합니다.[5]
한 줄 정리: 신호의 작은 구간마다 곡선을 맞추고 그 구간의 값을 다시 읽습니다. 필터 계수를 정하는 계산이며 정답 라벨로 분류기를 학습하는 작업은 아닙니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 위치
[-2,-1,0,1,2]
에서 값
[4,1,0,1,4]
를 측정했다고 가정해 보겠습니다. 실제 센서가 아닌 설명용 배열입니다. 다섯 값을 똑같이 평균하면 가운데 결과는 2입니다. 그러나 이 점들은 정확히 이차 곡선 위에 있고 중심의 원래 값은 0입니다.
창 길이 5와 다항식 차수 2의 중심 평활 계수는
[-3,12,17,12,-3]/35
입니다. 각 값에 대응 계수를 곱해 더하면 0이 되어 이차 곡선의 중심값을 유지합니다. 멀리 있는 두 계수가 음수라는 점도 단순한 양수 평균과 다릅니다.[2]
가운데 표본만 1로 올린
[4,1,1,1,4]
를 넣으면 중심 결과는
17/35
인 약 0.4857입니다. 원래 곡선의 0을 완벽하게 되찾지는 못하지만 표본 하나의 변화가 그대로 1만큼 반영되지도 않습니다. 어느 차이를 잡음으로 볼지는 별도의 가정입니다.
0과 1이 급히 갈리는 계단 배열에는 같은 계수로 약 −0.0857과 1.0857이 나타났습니다. 입력 범위 밖으로 튀는 값이 생긴 것입니다. 곡선을 잘 따른다는 설명을 모든 급격한 변화와 봉우리가 손실 없이 보존된다는 약속으로 바꾸지 않습니다.
이 예시와 미분·양끝 검산은 설치된 NumPy의 최소제곱과 직접 작성한 가중합으로 실행했습니다. SciPy 함수를 호출한 결과나 실제 AI 성능 측정은 아닙니다. 작은 배열의 수학적 확인과 라이브러리 전체 실행을 구분합니다.
쉬운 예시: 다섯 값을 같은 비중으로 섞으면 곡선의 낮은 중심이 올라갑니다. 다항식을 맞추는 계수는 이런 곡률을 반영하지만 급변 구간에는 새로운 돌출이 생길 수 있습니다.
왜 AI에서 사비츠키–골레이 필터가 중요한가요?
입력 곡선과 변화율을 함께 검토합니다
센서의 시간 곡선이나 일정한 간격의 측정값에서 작은 흔들림을 줄이는 전처리 후보로 검토합니다. 단순 평균으로 둔해지는 곡선과 국소 다항식 결과를 나란히 비교하면 어떤 변화가 남는지 살피기 쉽습니다. 이는 활용 설계이며 특정 장비의 잡음 제거 성능을 입증한 결과는 아닙니다.
전처리와 최종 판정을 나눕니다
부드러운 곡선이 분류기의 정답을 더 잘 맞힌다는 보장은 없습니다. 고장 전 짧은 충격이나 드문 봉우리가 필요한 단서라면 평활화가 그 신호를 줄일 수도 있습니다. 원본·처리 결과·후속 AI 오류를 따로 저장해 성능 차이가 생긴 단계를 확인합니다.
사비츠키–골레이 필터는 어떤 순서로 작동하나요?
1. 표본 간격과 짧은 구간을 정합니다
일정 간격의 한 축에서 창에 넣을 표본 수와 다항식 차수를 정합니다. 이 글의 예시는 홀수 창의 중심을 읽습니다. 계수 생성 함수는 평가 위치도 별도로 다루므로 이 예시를 모든 구현이 홀수 길이만 허용한다는 규칙으로 확대하지 않습니다.[2][3]
2. 구간의 다항식 또는 동등한 계수를 구합니다
이웃의 위치와 값에 다항식을 맞춥니다. 균일 격자의 내부 구간은 같은 창·차수·미분 조건에서 같은 가중합 계수를 재사용할 수 있습니다. SciPy의 확인한 구현도 계수를 만든 뒤 축 방향 합성곱을 적용합니다. 매 위치에서 새 학습 모델을 훈련하는 방식은 아닙니다.[3]
3. 평활값이나 미분값을 원래 위치에 놓습니다
평활화라면 맞춘 다항식의 값을 읽고, 미분이라면 해당 차수의 도함수 값을 읽습니다. 결과를 입력 위치와 연결하고 양끝은 정한 별도 규칙으로 채웁니다. 함수 출력이 입력과 같은 모양이어도 모든 위치가 똑같은 이웃 조건으로 계산되지는 않습니다.[1][3]
실전 팁: 처리 곡선 옆에 창 길이·다항식 차수·미분 차수·표본 간격·양끝 규칙을 함께 남기세요. 같은 필터 이름보다 전체 조건이 재현에 중요합니다.
주요 설정과 결과는 어떻게 읽나요?
창 길이와 다항식 차수를 구별합니다
window_length=5
는 다섯 표본을 보는 창이고
polyorder=2
는 이차 다항식입니다. 차수는 창 길이보다 작아야 합니다. 창을 늘리는 일과 차수를 높이는 일은 같은 강도 조정이 아닙니다. 너무 유연한 곡선은 원하지 않은 흔들림까지 따를 수 있습니다.[1][3]
창 길이는 초가 아닌 표본 수입니다. 표본 간격이 0.5초인 다섯 점은 첫 점부터 마지막 점까지 2초를 차지합니다. 같은 다섯 점이라도 측정 간격이 달라지면 실제 관측 범위가 달라집니다. 비교 중 표본 수만 같게 맞추고 같은 시간 범위라고 보고하지 않습니다.
미분 차수와 표본 간격을 함께 맞춥니다
기본
deriv=0
은 평활화이고
deriv=1
은 1차 미분입니다.
delta=0.5
는 표본 사이 간격이며 양수 미분 차수에서 척도에 사용합니다. 이 값을 넣는다고 불규칙한 측정 시각을 자동으로 처리하거나 빠진 시각을 복구하지는 않습니다.[1][3]
시간
[0,0.5,1,1.5,2]
에서 제곱값을 관측한 예시의 가운데 변화율은 2입니다. 표본 간격을 1로 잘못 해석하면 계산상 1이 됩니다. 값이 V이고 시간이 초라면 1차 미분은 V/초입니다. 평활화 출력과 같은 단위라고 표시하지 않습니다.
양끝 다항식 평가와 바깥값 채움을 나눕니다
기본
mode="interp"
는 배열 바깥에 표본을 덧붙이는 대신 양끝의 창에 다항식을 맞춰 끝부분 출력을 계산합니다. 이 모드에서는 창이 처리할 축의 입력 길이보다 길면 안 됩니다. 이름만 보고 빠진 내부 표본을 보간하는 기능으로 읽지 않습니다.[1][3]
mode="nearest"
는 끝값을 반복하고
mode="mirror"
는 끝 표본을 제외한 반사입니다.
mode="constant"
는
cval=0.0
같은 상수로 바깥을 채웁니다. 함수마다 기본 모드가 다르므로 이동평균과 비교할 때도 양끝 규칙을 맞춥니다.[1][4]
처리 축·자료형·계수의 순서를 확인합니다
기본
axis=-1
은 마지막 축입니다. 여러 채널의 시간 기록이라면 실제 시간 축을 지정합니다. float32나 float64가 아닌 입력은 SciPy에서 float64로 변환하며 출력은 입력과 같은 모양입니다. 다른 필터의 정수 출력 기본값과 혼용하면 작은 차이가 사라질 수 있습니다.[1][4]
계수만 구하는 함수의
use="conv"
와
use="dot"
는 적용 순서를 구분합니다. dot 계수는 conv 계수의 역순입니다. 대칭 평활 계수만 시험하면 오류가 가려질 수 있으므로 부호가 있는 미분도 대조합니다. 평가 위치를 바꾸는
pos
도 같은 중심 계수라고 취급하지 않습니다.[2]
사비츠키–골레이 필터와 헷갈리는 용어는 무엇이 다른가요?
이동평균·가우시안 필터와의 차이
단순 이동평균은 창 안의 표본에 같은 비중을 줍니다. 공식 uniform_filter1d는 지정 축에 균일 필터를 적용하며 기본 경계는 reflect입니다. SG의 기본 interp와 다르므로 창만 같게 둔 비교에는 내부 구간과 양끝의 차이가 함께 들어갑니다.[4]
가우시안 필터는 거리별 종 모양의 가중치를 사용합니다. 이 글의 SG는 구간의 다항식을 평가하며 앞의 계수처럼 음수도 포함합니다. 둘 다 부드럽게 만든다는 이유로 같은 창 크기를 같은 주파수 응답이나 같은 보존 능력으로 해석하지 않습니다.
중앙값 필터·전역 회귀와의 차이
중앙값 필터는 이웃값을 순서대로 놓고 가운데를 고르는 처리입니다. 다항식 계수로 선형 결합하는 SG와 달리 값의 순서를 사용합니다. 튀는 표본이 생겼을 때 두 출력이 어떻게 달라지는지 원본과 함께 비교합니다.
전역 다항식 회귀는 선택한 전체 구간에 하나의 곡선을 맞춥니다. SG는 짧은 창을 이동하며 값을 갱신합니다. 미래의 수치를 예측하는 시계열 모델과도 다릅니다. 현재 출력이 이웃 측정값을 이용하는지, 실제로 아직 관측하지 않은 값을 예측하는지 구분합니다.
비교 정리: 이동평균은 같은 비중의 합, 가우시안은 거리별 가중합, 중앙값은 순위 선택, SG는 국소 다항식 평가입니다.
실전에서는 어디에 쓰이나요?
센서·측정 곡선의 전처리 후보를 비교합니다
시간에 따른 측정값을 원본과 겹쳐 보고 봉우리의 높이·위치·폭과 양끝의 변화를 확인하는 활용을 설계합니다. 눈에 덜 흔들리는 결과만 고르지 않고 필요한 짧은 변화가 남는지 표시합니다. 이 글의 작은 계산은 실제 장비의 교정이나 결함 진단을 대신하지 않습니다.
변화율 특징의 기준선을 만듭니다
평활값과 함께 국소 미분 곡선을 AI 입력 후보로 비교할 수 있습니다. 출력 단위와 시간 위치를 고정하고 무처리·이동평균·SG를 같은 평가 자료에서 비교합니다. 미분 계산이 가능하다는 사실과 변화율 특징이 실제 오류를 줄인다는 결론은 별도로 확인합니다.
사비츠키–골레이 필터를 적용할 때 어떤 순서로 확인하나요?
1. 원본과 보존할 변화를 기록합니다
측정 간격·단위·처리 축·결측값과 필요한 사건의 폭을 적습니다. 원본은 덮어쓰지 않습니다. 창·차수·미분·delta·양끝 모드와 사용 버전을 함께 고정합니다. 일정 간격이 아닌 자료는 해당 함수의 가정을 만족하는 별도 전처리나 다른 국소 적합법부터 검토합니다.
2. 작은 배열과 양끝을 시험합니다
상수·직선·이차 곡선·한 점 충격·계단 입력을 각각 넣어 봅니다. 앞 예시의 이차 곡선은 NumPy 국소 적합으로 양끝까지 재현됐지만 다른 경계 규칙에도 그대로 성립한다고 확대하지 않습니다. 결측값이 있으면 정상값으로 간주하지 말고 처리 정책과 영향 범위를 기록합니다.
3. 평가 분할과 실시간 조건을 맞춥니다
훈련·검증·평가 기록을 나눈 뒤 각 구간을 처리합니다. 경계 양쪽을 함께 평활화하면 평가 쪽 표본이 훈련 출력에 섞일 수 있습니다. 실시간 업무라면 중심 창이 요구하는 뒤쪽 표본을 언제 확보하는지, 허용 지연 안에서 가능한지도 확인합니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 봉우리가 항상 보존된다고 기대하지 않습니다. 낮은 차수의 곡선을 재현하는 성질과 모든 실제 사건을 지키는 일은 다릅니다. 좁은 충격이나 급변 부근의 음수·돌출을 확인하고 범위를 강제로 자르면 그 추가 처리도 기록합니다.
둘째, 창을 크게 할수록 좋다고 정하지 않습니다. 여러 사건이 한 창에 들어가면 서로 섞일 수 있습니다. 차수를 무작정 높이는 것도 복원의 보장이 아닙니다. 실제 필요한 사건의 위치와 크기 오류를 기준으로 후보 설정을 비교합니다.
셋째, 중심 창의 미래 표본을 숨기지 않습니다. 다섯 점의 중심 평활값은 뒤쪽 두 점까지 사용합니다. 오프라인 기록에서 가능한 계산이 즉시 응답이 필요한 운영에서도 그대로 가능하지는 않습니다. 성능 평가와 지연 평가에 같은 관측 조건을 적용합니다.
넷째, 모드·축·미분 단위를 생략하지 않습니다. 시간과 채널을 바꾸어 처리하거나 delta를 잘못 정하면 모양이 비슷해도 다른 값을 얻습니다. 창 밖 채움과 양끝 적합의 차이도 중앙부 그래프만으로는 드러나지 않을 수 있습니다.
주의: 매끈한 선은 원래 신호를 복원했다는 증거가 아닙니다. 원본·필터 결과·필요한 사건·후속 AI 오류를 각각 확인합니다.
자주 묻는 질문
Q1. 단순 이동평균과 같은 필터인가요?
아닙니다. 이 글의 다섯 점 이차 SG 계수에는 음수가 있고 가운데 비중도 다릅니다. 이차 곡선 중심의 결과는 0이지만 단순 평균은 2였습니다. 창 길이가 같아도 계산 목적과 계수가 다릅니다.
Q2. 창 길이와 다항식 차수는 같은 값인가요?
창 길이는 포함할 표본 수이고 차수는 곡선의 복잡도입니다. SciPy는 다항식 차수가 창 길이보다 작아야 한다고 안내합니다. 두 설정을 바꾼 효과를 같은 처리 강도로 읽지 않습니다.[1]
Q3. 기본 모드는 양끝에 0을 붙이나요?
기본 interp는 양끝의 창에 다항식을 맞춰 끝부분을 계산합니다. constant와 cval을 사용해 바깥을 0으로 채우는 경로와 다릅니다. 모드 이름과 실제 결과를 함께 확인합니다.[1][3]
Q4. 미분값이 원래 측정값과 같은 단위인가요?
평활값은 원래 값의 단위지만 시간 미분은 시간 간격으로 나눕니다. 1차 미분은 값/시간, 2차 미분은 값/시간²입니다. delta가 가리키는 표본 간격의 단위도 명시합니다.[1][3]
Q5. 음수가 없는 입력이면 출력도 항상 음수가 없나요?
그렇지 않습니다. 일부 계수가 음수여서 계단 같은 급변 부근에는 원래 범위 밖 값이 생길 수 있습니다. 설명용 0과 1의 배열에서도 음수와 1보다 큰 값을 확인했습니다.
Q6. 실시간 입력에 바로 같은 중심 창을 쓸 수 있나요?
중심 뒤의 표본이 필요하므로 그만큼 기다리거나 다른 평가 위치·처리 설계를 검토합니다. 계수 생성기의 pos가 있다고 현재 함수 호출이 자동으로 실시간 인과 필터가 되는 것은 아닙니다. 관측 가능 시점과 지연을 별도로 시험합니다.[2]
출처
마무리
사비츠키–골레이 필터는 짧은 구간의 다항식으로 평활값이나 미분값을 계산하는 방법입니다. 단순 이동평균과 구별하고 창·차수·표본 간격·양끝 처리·계수 순서를 기록하면 결과의 의미가 분명해집니다.
처음에는 다섯 점의 곡선과 계단부터 비교해 보세요. 실제 자료에서는 보존할 사건과 돌출·양끝 변화를 살피고 실시간의 미래 표본 사용도 확인합니다. 그다음 후속 AI 오류를 분리한 자료로 평가하면 매끈함 하나만으로 전처리를 고르는 실수를 줄일 수 있습니다.
