데이터 시각화 는 차트, 그래프, 플롯, 대시보드와 같은 시각적 요소를 사용하여 데이터를 그래픽으로 표현하는 것입니다. 이를 통해 복잡한 데이터를 이해관계자나 비전문가가 쉽게 이해하고 의사 결정에 활용할 수 있도록 돕습니다.
머신 러닝 (ML)에서 데이터 시각화는 단순히 대시보드나 보고서를 만드는 것 이상의 의미를 갖습니다. ML 모델을 구축하고, 디버깅 하고, 개선하는 모든 과정을 포함합니다. 학습 전에 데이터를 분석하고 학습 중에 발생하는 상황을 모니터링하며 평가 후 무엇이 잘못되었는지 또는 제대로 되었는지 진단하는 데 사용됩니다. 데이터 시각화는 단순히 데이터를 보여주는 것보다는 조사하는 데 더 중점을 둡니다.
실제로 데이터 시각화와 조사는 서로 겹치는 부분이 많습니다. 훌륭한 머신 러닝 실무자나 데이터 과학 전문가는 데이터 시각화를 활용하여 스스로 문제를 파악하고 모델을 최적화할 뿐만 아니라, 다른 사람들에게 결과를 설명하고 모델 아웃풋에 대한 신뢰를 구축하는 데에도 사용합니다.
머신 러닝에서 데이터 시각화는 모델의 품질, 의사 결정, 그리고 다른 사용자가 여러분의 작업을 얼마나 잘 이해하는지에 직접적인 영향을 미칩니다.
시각화는 원시 데이터를 받는 순간부터 모델의 최종 평가에 이르기까지 전체 머신 러닝 워크플로 에서 실행됩니다. 각 단계에서 시각화가 어떻게 활용되는지 아래에서 살펴보겠습니다. 각 단계에서 언급된 시각화 기법은 이후 섹션에서 자세히 설명합니다.
분석을 시작하기 전에 먼저 어떤 데이터를 다루고 있는지 파악해야 합니다. Missing Values, 일관성 없는 데이터 유형, 중복 레코드를 확인해야 하는데, 이 단계에서 데이터의 구조적 문제를 발견하면 이후 분석에 심각한 악영향을 미칠 수 있기 때문입니다. Missing Values 히트맵, 데이터 유형 분포 차트, 레코드 빈도 플롯 등을 활용하면 데이터를 구축하는 데 시간을 들이기 전에 데이터 상황을 빠르고 정확하게 파악할 수 있습니다.
탐색적 데이터 분석(EDA) 은 히스토그램, 산점도, 상관관계 행렬, 박스 플롯, 페어 플롯 등을 사용하여 데이터 세트의 구조, 분포 및 관계를 이해하는 데 도움을 줍니다. 이를 통해 원시 데이터만으로는 드러나지 않는 패턴, 이상치 및 관계를 파악할 수 있습니다. EDA는 본질적으로 반복적인 과정입니다. 데이터를 시각화하고, 가설을 세우고, 검증하고, 다시 시각화하는 과정을 반복하여 데이터가 무엇을 말하는지 완전히 이해할 때까지 진행합니다.
원시 데이터를 이해한 후에는 모델에 사용할 피처를 변환하고 선택하는 작업을 시작합니다. 이 단계에서 데이터를 시각화하면 변환이 예상대로 작동하는지 확인하고 실제로 유용한 피처를 파악하는 데 도움이 됩니다. 분포도, 피처 중요도 차트 또는 다양한 목표 그룹에서 피처가 어떻게 작용하는지 이해하면 임의적인 전처리를 명확하게 정당화할 수 있는 선택으로 바꿀 수 있습니다.
학습 후, 시각화는 단순히 정확도 수치만으로는 설명할 수 없는 모델의 성능을 진정으로 이해하는 데 필수적입니다. 혼동 행렬, ROC 곡선, 정밀도-재현율 곡선, 잔차 플롯 등은 모델 동작의 다양한 측면을 보여줍니다. 이러한 시각화 툴은 클래스별, 임계값별, 예측값 범위별로 성능을 분석하여 모델의 성능뿐 아니라 성공과 실패 지점까지 파악할 수 있도록 도와줍니다.
머신 러닝에서 사용되는 데이터 시각화 유형을 이해한다는 것은 단순히 차트 이름만 아는 것이 아니라 사용 사례 관점에서 생각하는 것을 의미합니다. 다음은 이를 체계적으로 정리한 내용입니다.
히스토그램은 단일 수치형 피처의 분포를 보여줍니다. x축을 기준으로 값을 여러 구간(bin)으로 나누고, y축에서는 각 구간에 속하는 데이터 포인트의 개수를 나타냅니다. Python 에서는 Matplotlib이나 Seaborn 같은 툴을 사용하여 히스토그램을 그리면 피처가 정규 분포, 오른쪽으로 치우친 분포, 이중봉 분포 또는 균일 분포에 가까운지 등을 빠르게 확인할 수 있습니다.
각 패턴은 서로 다른 전처리 단계를 제시합니다. 예를 들어 제품 가격 히스토그램을 그렸을 때 대부분의 가격이 50달러 미만이지만 500달러까지 이르는 구간이 길게 이어져 있다면, 해당 피처는 모델에 사용하기 전에 로그 변환을 거치는 것이 유용할 수 있습니다.
산점도는 x축과 y축에 두 개의 수치형 변수를 나타내고, 각 데이터 포인트는 점으로 표시됩니다. 산점도는 선형 및 비선형 패턴을 파악하고, 클러스터가 형성되는 위치를 식별하며, 나머지 데이터와 크게 벗어난 이상치를 표시하는 데 유용합니다. 예를 들어 주택 크기와 판매 가격을 그래프로 나타내면 특정 크기 임계값까지는 가격이 꾸준히 상승하다가 그 이후에는 평탄해지는 패턴을 보일 수 있는데, 이는 학습 전에 분석해 볼 가치가 있습니다.
상관관계 행렬은 데이터 세트의 모든 수치형 피처 간의 쌍별 상관관계를 보여줍니다. 히트맵 형태로 표현되며, 각 셀의 색상은 상관관계 강도를 나타냅니다. 이를 통해 다중공선성을 한눈에 파악할 수 있습니다. 상관계수가 0.95 이상인 피처는 중복 정보를 포함하고 있으므로 피처 선택 과정에서 제거 대상으로 고려되는 경우가 많습니다.
상관관계는 선형 관계만 포착하므로, 상관관계가 0에 가깝다고 해서 두 피처가 독립적이라는 의미는 아닙니다. 예를 들어 주택 데이터 세트에서 '총 방 개수'와 '총 침실 개수'는 거의 항상 매우 높은 상관관계를 보이며, 두 변수를 모두 유지해도 모델에 새로운 정보가 추가되지 않습니다.
박스 플롯은 중앙값, 데이터의 주요 범위(사분위 범위) 및 이상치를 보여줌으로써 변수가 어떻게 분포되어 있는지 빠르게 요약해서 보여줍니다. 특히 머신 러닝에서 수치형 피처가 여러 대상 그룹 간에 어떻게 다른지 비교하는 데 유용합니다. 예를 들어 대출금을 갚지 못한 사람들과 그렇지 않은 사람들의 소득을 비교하는 데 사용할 수 있습니다.
페어 플롯은 데이터 세트에 있는 모든 수치형 피처 조합에 대해 산점도 격자를 생성하고, 대각선에는 히스토그램 또는 밀도 플롯을 표시합니다. Seaborn의 pairplot() 함수는 이러한 플롯을 한 줄로 생성합니다. 피처가 10~15개 이하인 데이터 세트의 경우, 페어 플롯은 개별 플롯을 여러 개 그려야 얻을 수 있는 결과를 신속하게 다변량 분석할 수 있도록 해줍니다.
이 컨텍스트에서 '피처'란 데이터 세트의 개별 열(예: 연령, 소득, 구매 빈도)을 의미합니다. 예를 들어 매출 데이터 세트에 대한 페어 플롯을 보면 매출과 판매량은 밀접하게 연관되어 움직이는 반면, 할인율은 둘 다와 큰 상관관계가 없다는 것을 알 수 있습니다. 이러한 인사이트를 통해 어떤 피처를 유지할 가치가 있는지 결정할 수 있습니다.
밀도 플롯은 히스토그램을 부드럽게 표현한 형태입니다. 두 그룹에 걸쳐 특정 피처가 어떻게 분포되어 있는지 비교하는 데 유용합니다. 두 곡선이 멀리 떨어져 있을수록 해당 피처는 예측력이 높다고 볼 수 있습니다. 하지만 곡선이 겹치면 예측력이 떨어집니다.
예를 들어 충성 고객과 이탈 고객의 '구매 빈도' 밀도를 차트로 나타냈을 때 두 선이 명확하게 분리된 봉우리를 형성한다면, 이는 해당 피처가 고객 이탈 예측 모델에 도움이 될 가능성이 높다는 좋은 신호입니다.
모델 학습 후 피처 중요도 점수를 추출하여 막대형 차트로 시각화하면 어떤 피처가 가장 중요한지 확인할 수 있습니다. 의사결정트리 기반 모델이 대표적인 예로, 이러한 중요도 점수를 자연스럽게 제공합니다. 중요도가 매우 낮은 피처는 보통 제거하는 좋습니다. Plotly나 Matplotlib 같은 툴을 사용하면 피처가 많더라도 이러한 차트를 쉽게 생성할 수 있습니다.
이러한 플롯은 변환(스케일링, 인코딩, 로그 변환) 전후의 피처 분포를 비교하여 전처리 단계가 의도한 효과를 달성했는지 확인합니다. 변환이 제대로 되지 않은 피처를 모델에 입력하면 예측 결과가 왜곡될 수 있기 때문에 이러한 비교는 중요합니다. 간단한 비교 플롯을 통해 학습 단계에 이르기 전에 문제를 탐지할 수 있습니다.
학습 곡선은 모델 학습 시각화의 한 유형으로, y축에는 모델 성능(정확도 또는 손실)을, x축에는 학습 세트 크기 또는 학습 반복 횟수를 나타내며, 학습 데이터와 검증 데이터를 별도의 선으로 표시합니다.
이 시각화 자료 하나만으로 가장 흔한 머신 러닝 모델 오류 원인 두 가지, 즉 과적합(학습 성능과 검증 성능 간의 큰 차이)과 과소적합 (두 성능 지표 모두 낮고 빠르게 수렴)을 진단할 수 있습니다. 학습 곡선을 시각화한 후에는 모델 복잡도, 정규화 또는 학습 데이터 크기 조정이 더 이상 추측이 아닌 목표에 맞춰 진행됩니다 .
딥 러닝 모델의 경우, 에포크에 따른 학습 손실과 검증 손실을 그래프로 나타내는 것은 일반적인 관행입니다. 학습 손실이 계속 감소하는 반면 검증 손실이 개선되지 않거나 증가하기 시작하면 학습을 조기에 종료해야 한다는 신호입니다. 이러한 그래프는 일반적으로 TensorBoard와 같은 툴을 통해 학습 중에 실시간으로 생성됩니다.
더 넓게 보자면, 학습 반복 횟수에 따른 모든 지표(정확도, F1 점수, 곡선 아래 면적)를 추적하는 선형 차트는 모델의 진화 과정을 지속적으로 보여줍니다. 이러한 차트는 학습 종료 시점의 단일 지표보다 훨씬 더 유용한 정보를 제공하는데, 최종 결과뿐 아니라 궤적까지 보여주기 때문입니다.
혼동 행렬은 실제 클래스 레이블과 예측 클래스 레이블의 모든 조합을 격자 형태로 보여주는 모델 평가 시각화의 한 종류입니다. 여기에는 참 양성, 참 음성, 거짓 양성, 거짓 음성이 포함되어 있어 모델이 정확히 어디서 맞고 어디서 틀렸는지 정확히 알 수 있습니다.
대부분 분류 지표의 기초가 되며, 정밀도, 재현율, F1 점수 모두 혼동 행렬에서 파생됩니다. 개수 또는 백분율을 나타내는 주석이 있는 히트맵 형태로 표현되는 혼동 행렬은 클래스 수준의 오류를 즉시 파악할 수 있도록 해줍니다. 정확도 측면에서는 '좋아 보이는' 모델이라도 핵심 클래스에 빈 행이 있다면 혼동 행렬에서 이러한 오류를 바로 확인할 수 있습니다.
ROC 곡선은 0부터 1까지의 모든 가능한 분류 임계값에서 참 양성률과 거짓 양성률을 그래프로 나타낸 것입니다. 곡선 아래 면적(AUC)은 모델의 전반적인 판별 능력을 하나의 숫자로 요약합니다. 0.5는 무작위 추측, 1.0은 완벽한 판별을 의미합니다. ROC 곡선은 여러 모델을 비교하거나 거짓 양성 및 거짓 음성의 비용이 서로 다를 때 특히 유용합니다. scikit-learn과 plotly 같은 툴은 ROC 곡선 생성 기능을 내장하고 있습니다.
데이터 세트가 심하게 불균형할 경우, 정밀도-재현율 곡선은 ROC 곡선보다 모델 성능을 훨씬 더 정확하게 보여줍니다. 성능이 뛰어난 분류기는 플롯의 오른쪽 상단으로 치우쳐 높은 정밀도를 유지하면서 재현율도 낮춥니다. 이 플롯은 다양한 결정 임계값에 따라 y축에 정밀도, x축에 재현율을 나타냅니다.
의료 진단이나 사기 탐지와 같이 위험 부담이 큰 분야에서는 드물게 발생하는 오류를 잡아내지 못하는 것이 오경보보다 훨씬 더 큰 피해를 초래할 수 있으므로, 이러한 곡선은 다른 어떤 방법보다 더 많은 정보를 제공합니다.
회귀 모델의 경우, 잔차 플롯은 y축에 예측값과 실제값의 차이(잔차)를, x축에 예측값을 나타냅니다. 잔차는 뚜렷한 패턴 없이 0을 중심으로 무작위로 분포해야 합니다. 잔차가 넓게 퍼지거나, 체계적으로 곡선을 그리거나, 특정 영역에 집중된다면 모델에 구조적인 문제가 있는 것이며, 데이터 간의 관계를 제대로 포착하지 못하고 있는 것입니다.
Matplotlib은 다른 모든 툴의 뼈대가 되는 오픈소스 기반입니다. 'pyplot' 모듈('plt'로 임포트)은 히스토그램, 산점도, 선형 차트, 막대형 차트 등 다양한 표준 플롯을 처리합니다. 최신 라이브러리에 비해 코드가 장황하지만, 이러한 장황함 덕분에 주석, 축 레이블, 그림 레이아웃 및 크기 조정 등 모든 세부 사항을 정밀하게 제어할 수 있습니다.
Seaborn은 Matplotlib 위에 구축되어 상용구 코드를 크게 줄여줍니다. Matplotlib에서 15줄이 필요한 히트맵, 페어 플롯 또는 박스 플롯을 Seaborn에서는 한두 줄로 구현할 수 있습니다. pandas DataFrame에서 직접 읽어오기 때문에 Jupyter Notebook 환경에서 EDA에 가장 적합한 툴입니다.
Plotly는 아웃풋이 상호작용적이어야 할 때 적합한 선택입니다. 차트는 HTML로 렌더링되어 사용자가 데이터 포인트 위에 마우스를 올리면 확대/축소 및 시리즈 전환이 가능합니다. 따라서 대시보드나 웹 보고서를 통해 이해관계자에게 결과를 제시할 때 정적인 이미지보다 훨씬 유용합니다.
NumPy는 그 자체로 시각화 툴은 아니지만, matplotlib과 seaborn이 의존하는 배열 조작 및 x축/y축 데이터 준비를 처리하는 거의 모든 시각화 워크플로의 핵심입니다.
Yellowbrick은 머신 러닝 평가를 위해 특별히 개발되었습니다. scikit-learn을 래핑하여 matplotlib에서 요구하는 수동 연결 작업 없이 단일 함수 호출로 혼동 행렬, ROC 곡선, 학습 곡선 및 피처 중요도 플롯을 생성합니다.
TensorBoard가 딥 러닝 부분을 담당합니다. 학습 중에 실시간 학습 지표, 손실 곡선, 모델 그래프를 스트리밍하여 대규모 데이터 세트와 장시간 실행되는 신경망 작업을 모니터링하는 데 필수적입니다.
효과적인 데이터 시각화는 단순히 적절한 차트를 고르는 것만이 아니라, 조용히 오해를 불러일으키는 패턴을 피하는 데 있습니다.
머신 러닝에서 데이터 시각화는 마무리 단계가 아니라 프로젝트의 모든 단계에 걸쳐 있습니다. 데이터 과학자가 표만으로는 발견하지 못한 문제를 진단하고 지표가 숨긴 모델의 오류를 찾아내며, 이해관계자에게 결과를 전달하고 워크플로의 각 단계에서 신뢰할 수 있는 데이터 기반 의사 결정을 내리는 방법입니다.
모든 단계에서 의도적으로 시각화하는 습관을 들이는 것은 모델의 질과 사고의 명확성을 향상하는 가장 간단하면서도 효과적인 방법 중 하나입니다.
AI 빌더를 위한 차세대 엔터프라이즈 스튜디오인 IBM watsonx.ai로 생성형 AI, 파운데이션 모델 및 머신 러닝 기능을 학습, 검증, 조정 및 배포하세요. 적은 데이터로 짧은 시간 내에 AI 애플리케이션을 구축하세요.
업계 최고의 AI 전문성과 솔루션 포트폴리오를 보유한 IBM과 함께 AI를 비즈니스에 활용하세요.
AI 추가를 통해 중요한 워크플로와 운영을 혁신함으로써 경험, 실시간 의사 결정 및 비즈니스 가치를 극대화합니다.