커널 밀도 추정(KDE)이란? AI에서 관측값 주변의 분포를 부드럽게 추정하는 방법
TL;DR
커널 밀도 추정(Kernel Density Estimation, KDE)은 각 관측값 주변에 작은 커널을 놓고 합쳐 데이터의 확률밀도를 추정하는 방법입니다. 정규분포 하나나 고정된 수의 성분을 먼저 정하지 않고 관측 자료로 분포의 모양을 만듭니다. 대역폭이 곡선의 매끄러움을 좌우하며, 밀도와 확률의 차이·특징 단위·고차원 한계를 함께 확인해야 합니다.
핵심 3줄 요약
- 핵심 1
관측값마다 작은 분포를 놓습니다. 각 커널의 기여를 합쳐 데이터가 많이 모인 위치와 드문 위치를 나타냅니다. - 핵심 2
대역폭이 모양을 조절합니다. 너무 작으면 개별 관측에 민감하고 너무 크면 서로 다른 봉우리가 뭉개집니다. - 핵심 3
밀도는 정답 확률이 아닙니다. 낮은 밀도는 검토할 단서이며, 이상 판정과 군집 이름은 따로 정합니다.
이 글에서 다룰 내용
- 커널 밀도 추정의 한 문장 정의
- 처리 시간 기록으로 보는 쉬운 예시
- 커널·대역폭·밀도를 계산하는 흐름
- 히스토그램·GMM·DBSCAN과의 차이
- 데이터 탐색과 표본 생성의 실전 사용처
- 입력 형태·로그밀도·평가 분할 점검법
- 경계값·차원·데이터 단위의 주의점
커널 밀도 추정을 한 문장으로 정의하면 무엇인가요?
커널 밀도 추정은 관측값을 중심으로 놓은 커널 함수들을 평균해 연속형 데이터의 확률밀도 함수를 추정하는 비모수 방법입니다.
여기서 커널은 관측값 하나가 주변 위치에 얼마나 기여할지 정하는 모양입니다. 가우시안 커널을 쓰면 각 관측값을 중심으로 종 모양 곡선을 놓습니다. 데이터가 모인 곳에서는 여러 곡선이 겹쳐 높아지고, 관측값에서 멀어진 곳에서는 기여가 작아집니다.
비모수라는 말은 조절할 설정이 없다는 뜻이 아닙니다. 분포를 소수의 고정된 모수만으로 제한하지 않는다는 뜻에 가깝습니다. 커널 종류와 대역폭을 선택해야 하며, 기본적인 KDE는 관측 자료가 늘면 분포를 표현하는 데 사용하는 기준점도 늘어납니다.
한 줄 정리: KDE는 데이터가 어디에 얼마나 모이는지를 연속적인 밀도 곡선이나 밀도 지도로 나타내는 방법입니다.
쉬운 예시로 이해해 볼까요?
AI 서비스의 요청 처리 시간을 모았다고 가정해 보겠습니다. 짧은 요청이 모인 구간과 긴 문서 요청이 모인 구간이 있을 수 있습니다. 여기서는 원리 설명을 위한 상황을 가정하며 실제 서비스의 측정 결과를 제시하는 것은 아닙니다.
히스토그램을 그리면 시간을 구간으로 나눈 뒤 각 구간에 들어온 요청 수를 셉니다. 구간의 시작점을 조금 옮기면 막대 모양도 달라집니다. KDE는 고정된 칸을 먼저 채우는 대신 각 처리 시간의 위치에 작은 곡선을 놓고 그 곡선들을 합칩니다.
대역폭을 좁히면 개별 요청 주변의 작은 봉우리가 많이 드러납니다. 대역폭을 넓히면 가까운 봉우리가 합쳐져 전체 흐름이 매끄러워집니다. 어느 모양이 맞는지는 그림이 보기 좋은지만으로 결정하지 않고 새로운 기록의 밀도를 얼마나 잘 설명하는지 함께 봅니다.
쉬운 예시: 각 관측 위치에 같은 모양의 작은 언덕을 놓고 겹친 높이를 읽는다고 생각하면 됩니다. 언덕의 너비를 바꾸는 설정이 대역폭입니다.
왜 AI에서 커널 밀도 추정이 중요한가요?
평균에 가려진 분포 모양을 봅니다
평균 처리 시간이 같아도 한 서비스는 일정한 시간에 끝나고 다른 서비스는 빠른 요청과 느린 요청으로 갈릴 수 있습니다. KDE는 이런 봉우리와 꼬리의 모양을 탐색하는 데 도움이 됩니다. 다만 추정한 곡선의 모든 굴곡이 실제 집단의 차이를 뜻하지는 않습니다.
새 입력의 위치를 밀도로 살펴봅니다
기준 데이터로 분포를 추정한 뒤 새 관측이 높은 밀도 영역에 있는지 확인합니다. 정답 라벨이 부족한 상황에서 검토 대상을 고르는 보조 신호로 쓸 수 있습니다. 드문 정상 사례도 낮은 밀도를 받을 수 있으므로 밀도 점수만으로 이상을 확정하지 않습니다.
분포에서 새 표본을 뽑습니다
KDE를 생성 모델로 사용하면 추정한 분포에서 새로운 수치 표본을 뽑을 수 있습니다. scikit-learn의 공식 예시는 손글씨 데이터를 PCA로 줄인 공간에서 밀도를 학습하고 표본을 생성합니다. 생성 표본의 품질과 원자료와의 유사성은 별도로 검토합니다.
커널 밀도 추정은 어떻게 작동하나요?
관측값과 특징의 단위를 준비합니다
한 행이 하나의 관측인지, 각 열이 어떤 수치를 뜻하는지 먼저 정합니다. 처리 시간과 파일 크기를 함께 넣으면 단위 차이가 거리 계산에 영향을 줍니다. 스케일링을 적용한다면 그 기준은 학습 자료에서 정하고 평가 자료에도 같은 변환을 사용합니다.
각 관측값에 커널을 놓습니다
가우시안 커널은 관측값 가까이에서 높고 멀어질수록 낮아집니다. KDE는 가우시안만 사용하는 방법은 아닙니다. scikit-learn은 tophat·epanechnikov·exponential·linear·cosine 커널도 지원하므로 커널 모양과 대역폭을 구분해서 읽습니다.
대역폭에 맞춰 너비와 높이를 조정합니다
커널을 넓힐 때 높이까지 그대로 두면 전체 면적이 달라집니다. 확률밀도로 쓰는 KDE는 대역폭과 차원에 맞는 정규화를 포함합니다. 기본적인 동일 가중치 추정에서는 각 관측이 같은 비중으로 기여하며, 표본 가중치를 주면 그 기여 비중이 달라집니다.
확인할 위치에서 기여를 합칩니다
새 위치가 들어오면 학습 관측들을 중심으로 한 커널이 그 위치에 기여하는 양을 모읍니다. scikit-learn의 score_samples는 각 입력의 로그밀도를 반환합니다. 점마다의 값을 받는 함수와 전체 로그우도의 합을 반환하는 score를 같은 출력으로 생각하면 안 됩니다.
핵심 인사이트: KDE의 학습은 정해진 수의 중심을 이동시키는 군집 학습과 다릅니다. 관측값을 기준으로 분포를 구성하고 원하는 위치의 밀도를 계산합니다.
대역폭과 밀도 값은 어떻게 읽나요?
작은 대역폭은 세부 변화에 민감합니다
대역폭이 작으면 개별 관측 주변의 봉우리가 두드러집니다. 데이터의 세부 구조를 남길 수 있지만 우연히 모인 표본까지 뚜렷한 패턴처럼 나타낼 위험이 있습니다. 학습 자료의 점수만 높이려고 대역폭을 계속 줄이면 새로운 자료를 설명하는 성능이 나빠질 수 있습니다.
큰 대역폭은 다른 봉우리를 합칠 수 있습니다
대역폭을 늘리면 추정이 매끄러워지는 대신 가까운 여러 집단의 차이가 사라질 수 있습니다. SciPy 문서도 기본 설정의 gaussian_kde가 여러 봉우리를 과도하게 평활화할 수 있다고 설명합니다. 자동 규칙은 시작점이며 모든 데이터에 맞는 정답은 아닙니다.
곡선의 높이와 구간 확률을 구분합니다
확률밀도는 한 위치의 높이입니다. 특정 범위에 들어올 확률은 그 구간 아래의 면적으로 읽습니다. 밀도 값은 1보다 클 수도 있으며 곧바로 퍼센트로 바꿀 수 없습니다. 로그밀도 역시 정답일 확률이나 이상일 확률이 아니므로 출력 이름과 단위를 함께 남깁니다.
커널 밀도 추정과 헷갈리는 용어는 무엇이 다른가요?
히스토그램과 KDE의 차이
히스토그램은 정한 구간마다 관측 수를 모으고 KDE는 관측 위치마다 커널을 놓습니다. 전자는 구간 너비와 시작점에, 후자는 대역폭과 커널에 영향을 받습니다. KDE가 매끄럽다고 더 정확하다고 단정할 수 없으며 원자료와 히스토그램을 함께 보면 과도한 평활화를 찾기 쉽습니다.
가우시안 혼합 모델과 KDE의 차이
GMM은 정한 수의 정규분포 성분에 대해 평균·공분산·혼합 가중치를 학습합니다. 가우시안 KDE는 관측값을 커널의 중심으로 사용하고 대역폭으로 퍼짐을 조절합니다. 둘 다 밀도를 추정하지만 표현 방식과 설정이 다릅니다. KDE의 각 커널을 현실의 군집 하나로 해석하지 않습니다.
DBSCAN과 KDE의 차이
DBSCAN은 이웃이 충분한 점들을 연결해 군집 번호와 노이즈를 구분합니다. KDE의 기본 출력은 공간의 밀도입니다. 둘 다 밀집 정도를 다루지만 KDE만 실행했다고 군집 라벨이나 이상 판정선이 자동으로 만들어지는 것은 아닙니다.
커널 회귀와 KDE의 차이
커널 회귀는 주변 관측의 정답값에 가중치를 주어 특정 입력에서의 출력을 예측하는 데 쓰입니다. KDE는 정답값 없이 입력 데이터 자체의 분포를 추정합니다. 커널이라는 단어가 같아도 예측하려는 대상이 조건부 평균인지 확률밀도인지 확인하면 구분하기 쉽습니다.
관련 개념은 가우시안 혼합 모델 용어 설명에서 이어 볼 수 있습니다. 그 글이 성분별 책임도와 EM 학습을 다룬다면, KDE에서는 관측값별 커널과 평활화 대역폭이 중심 개념입니다.
실전에서는 어디에 쓰이나요?
모델 입력과 운영 기록을 탐색합니다
수치 특징이나 처리 시간의 분포가 한 봉우리인지 여러 봉우리인지 살펴봅니다. 기간별로 비교할 때는 단위와 대역폭, 표시 범위를 맞춥니다. 도구가 매번 자동으로 다른 대역폭을 고르면 데이터 변화와 그림 설정의 변화가 섞여 보일 수 있습니다.
검토할 드문 사례를 고릅니다
정상 참고 자료에서 밀도가 낮은 위치의 입력을 조사 후보로 삼을 수 있습니다. 실제 활용 전에는 알려진 정상·이상 사례로 누락과 오탐을 확인합니다. 원래 드물게 등장하는 유형이 불리해질 수 있으므로 낮은 점수를 받은 이유를 원자료에서 확인합니다.
저차원 표현에서 표본을 생성합니다
차원을 줄인 특징 공간에서 KDE를 학습하고 표본을 뽑아 입력 공간으로 되돌리는 실험에 사용합니다. 이는 분포 모형을 이해하는 예시이지 어떤 데이터든 고품질로 생성한다는 보장은 아닙니다. scikit-learn의 sample은 gaussian과 tophat 커널에서 지원된다는 제약도 확인합니다.
커널 밀도 추정을 적용할 때 어떤 순서로 확인하나요?
1. 입력 모양과 표현을 고정합니다
scikit-learn의 KernelDensity는 표본 수와 특징 수 순서의 행렬을 받습니다. SciPy의 다변량 gaussian_kde는 특징 수와 표본 수 순서로 받으므로 같은 배열을 무심코 넘기면 축의 뜻이 바뀝니다. 결측값·무한값·상수 특징과 특징 순서를 함께 확인합니다.
2. 대역폭의 의미를 문서에서 확인합니다
scikit-learn의 숫자 bandwidth와 SciPy의 숫자 bw_method를 같은 값으로 맞췄다고 같은 추정이 되지는 않습니다. SciPy는 bw_method를 factor로 사용하고 데이터 공분산에 factor의 제곱을 곱해 커널 공분산을 만듭니다. 라이브러리를 바꿀 때는 설정 이름보다 실제 퍼짐을 비교합니다.
3. 학습 밖의 자료로 설정을 비교합니다
여러 대역폭을 별도 평가 자료나 교차 검증에서 비교합니다. 공식 손글씨 예시도 GridSearchCV로 대역폭을 고릅니다. 예시를 운영 평가로 확장한다면 PCA와 스케일링도 각 훈련 분할 안에서 학습해 평가 자료의 정보가 미리 섞이지 않게 합니다.
4. 점수와 실행 조건을 함께 남깁니다
데이터 버전·특징 단위·전처리·커널·대역폭과 라이브러리를 저장합니다. 밀도나 로그밀도 중 무엇을 반환했는지도 기록합니다. 같은 표현과 평가 자료에서 설정을 비교하고, 표본 생성 실험은 난수 시드와 생성 조건을 따로 남깁니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 고차원에서의 한계를 봅니다. 특징 수가 커지면 관측 주변이 성기게 채워져 밀도 추정이 어려워집니다. 긴 임베딩 벡터에 기본 설정을 적용하는 것만으로 신뢰할 만한 밀도 모델이 만들어지지는 않습니다. 차원 축소도 정보를 바꾸므로 후속 목적에 맞게 검증합니다.
둘째, 데이터의 가능한 범위를 확인합니다. 처리 시간은 음수가 될 수 없지만 가우시안 커널은 음수 영역에도 밀도를 줄 수 있습니다. 경계 가까이의 추정과 생성 표본을 살펴보고, 필요한 경우 변환이나 경계 보정을 검토합니다. 양수 영역만 그렸다고 이 문제가 해결되지는 않습니다.
셋째, 서로 다른 단위의 밀도를 그대로 비교하지 않습니다. 초를 밀리초로 바꾸거나 특징 수를 바꾸면 밀도 값의 척도도 달라집니다. scikit-learn은 유클리드 거리에서 밀도 정규화가 올바르다고 명시하므로 다른 거리에서도 동일한 확률밀도 해석이 보장된다고 가정하지 않습니다.
넷째, 특이한 공분산과 계산 비용을 확인합니다. SciPy의 gaussian_kde는 입력 차원보다 낮은 부분공간에 놓인 데이터를 그대로 지원하지 않습니다. 중복 특징과 선형 종속을 점검합니다. 표본과 질의가 많을 때는 트리 계산을 사용하더라도 실행 시간과 저장 비용을 실제 크기에서 측정합니다.
주의: 낮은 밀도는 위험의 확률이 아닙니다. 밀도 그림만으로 데이터를 삭제하거나 사람을 등급화하지 말고 업무 기준과 별도 검증을 거쳐 사용합니다.
자주 묻는 질문
Q1. KDE를 쓰려면 데이터가 정규분포여야 하나요?
아닙니다. 가우시안 커널을 사용해도 전체 분포가 하나의 정규분포라는 가정은 하지 않습니다. 관측값 주변의 여러 커널이 합쳐져 복잡한 모양을 만듭니다. 다만 대역폭이 크면 실제 여러 봉우리가 하나처럼 보일 수 있습니다.
Q2. 대역폭을 자동으로 고르면 검증이 필요 없나요?
필요합니다. Scott이나 Silverman 같은 규칙은 편리한 시작점을 주지만 자료의 모든 특징과 사용 목적을 반영하지는 않습니다. 자동 설정과 주변 후보를 비교하고 별도 자료의 점수와 분포 모양을 함께 확인합니다.
Q3. KDE의 밀도가 1보다 크면 오류인가요?
반드시 오류는 아닙니다. 연속형 분포의 밀도 높이와 구간의 확률은 다릅니다. 전체 영역의 적분이 1이 되도록 정규화하며, 좁은 구간에 몰린 분포에서는 높이가 1을 넘을 수 있습니다. 숫자 자체를 확률로 읽지 마세요.
Q4. KDE로 군집 수를 바로 알 수 있나요?
기본 KDE는 군집 수나 군집 번호를 돌려주지 않습니다. 곡선의 봉우리를 탐색할 수는 있지만 그 수는 대역폭에 따라 달라집니다. 봉우리 수를 현실의 집단 수로 확정하려면 추가 기준과 자료 검토가 필요합니다.
Q5. 새 데이터가 들어오면 다시 학습해야 하나요?
기존 모델로 새 위치의 밀도를 계산하는 일은 다시 학습하지 않아도 가능합니다. 다만 새 관측을 학습 자료에 포함해 분포 자체를 갱신하는 일은 별개입니다. 기존 전처리를 유지해 점수를 계산하고 분포 변화에 따른 갱신 주기를 따로 정합니다.
출처
마무리
커널 밀도 추정은 관측값 주변에 놓은 커널을 합쳐 데이터의 분포를 부드럽게 나타내는 방법입니다. 히스토그램의 구간 경계와 다른 방식으로 분포를 살펴보고 새로운 입력의 밀도를 계산하거나 표본을 생성하는 데 사용합니다.
처음에는 커널 이름보다 대역폭과 데이터 단위를 먼저 확인하세요. 밀도와 확률을 구분하고 학습 밖의 자료로 설정을 비교하면, 매끄러운 그림을 과신하지 않으면서 분포가 알려 주는 단서를 읽을 수 있습니다.
