콘텐츠로 이동

가진 자료를 분석하라 (인공지능 패러다임)

개요

자료 분석의 현대적 접근은 이미 존재하는 자료 — 거래 로그, 센서 측정값, 소셜미디어 게시물, 금융시장 자료 — 에서 출발하여 "이것으로 무엇을 배울 수 있는가?" 라고 묻는다. 수집 과정을 설계하는 대신, 분석가는 알고리즘을 적용해 가용한 자료에서 패턴을 발견하고 예측하며 통찰을 끌어낸다.

핵심 원칙

먼저 자료, 다음에 알고리즘, 마지막에 통찰.

현대적 접근은 디지털 자료와 계산 능력의 폭발적 증가를 활용한다. 자료는 의도적인 연구 설계가 아니라 업무의 부산물로 수집되는 경우가 많다(예: 웹 클릭, 거래, 진료기록).

세 가지 학습 패러다임

1. 지도학습

입력에서 레이블이 붙은 출력으로 가는 사상을 학습한다. "정답"이 알려진 과거 자료로 알고리즘을 훈련시킨 뒤 새 자료에 적용한다.

2. 비지도학습

레이블 없이 자료에 숨은 구조를 발견한다. 군집화, 차원축소, 이상치 탐지가 여기에 속한다.

3. 강화학습

레이블이 붙은 보기가 아니라 보상 신호를 길잡이 삼아, 환경과의 상호작용을 통해 최적의 순차적 의사결정을 학습한다.

세 가지가 전부는 아니다

지도·비지도·강화는 편의상의 삼분법일 뿐 빈틈없는 분류가 아니다. 경계에 놓인 것들을 미리 정리해 두면 뒤에서 혼동이 줄어든다.

  • 준지도학습: 레이블이 붙은 적은 수의 보기와 레이블이 없는 많은 보기를 함께 쓴다. 레이블을 붙이는 비용이 클 때 표준적인 선택이며, 지도학습과 비지도학습의 어느 쪽도 아니다.
  • 자기지도학습: 레이블이 없는 자료에서 목표를 자료 자신으로부터 만들어 낸다(다음 낱말 맞히기, 가린 조각 복원하기). 사람이 붙인 레이블이 없다는 이유로 비지도학습으로 뭉뚱그리는 일이 흔하지만, 일단 목표가 만들어진 뒤의 학습은 입력–목표 쌍에 대한 지도학습이다. 오늘날의 대형 언어모형이 여기에 속한다.
  • 강화학습은 "보상으로 하는 지도학습"이 아니다. 지도학습은 각 입력에 대해 정답이 무엇이었는지를 듣는다. 강화학습은 자신이 고른 행동에 대해 얼마나 좋았는지만 듣고, 고르지 않았던 행동의 결과는 끝내 알 수 없다. 게다가 보상이 여러 단계 뒤에야 돌아오고, 자신의 행동이 다음에 마주칠 자료를 바꾼다.

현대적 접근의 강점

  • 확장성: 설계된 연구로는 수집이 불가능한 수백만~수십억 개의 자료점을 알고리즘이 처리할 수 있다.
  • 유연성: 기계학습과 딥러닝 모형은 분석가가 미리 지정하지 않아도 매우 복잡한 비선형 관계를 포착할 수 있다.
  • 속도: 기존 자료는 몇 달, 몇 년을 기다릴 필요 없이 즉시 분석할 수 있다.
  • 발견: 어떤 연구자도 예상하지 못한 패턴과 관계가 탐색적 분석에서 드러날 수 있다.
  • 비정형 자료: 이미지, 텍스트, 음성, 영상을 대규모로 분석할 수 있다.

이 접근이 가장 잘 맞을 때

  • 대량의 자료가 이미 존재한다.
  • 목표가 인과적 설명이 아니라 예측이다.
  • 자료가 고차원이거나 비정형이다.
  • 분석 속도가 중요하다(예: 실시간 트레이딩, 추천 시스템).
  • 문제가 단순한 통계 모형으로 다루기에는 너무 복잡하다.

한계

  • 인과성: 설계된 실험이 없으면 상관과 인과를 구분하기 어렵다. 관찰자료에서 발견된 연관성은 교란요인 때문일 수 있다. 알고리즘이 잘 해내는 것은 예측이지 개입의 효과가 아니다(12장 상관과 인과).
  • 자료 품질: 자료가 어떻게 수집되었는지 분석가가 통제할 수 없어 편향, 결측값, 측정오차가 생길 수 있다.
  • 해석가능성: 복잡한 모형(심층 신경망, 앙상블)은 정확한 예측을 주면서도 왜 그런지는 설명하지 못할 수 있다.
  • 과적합: 유연한 모형과 넓은 특성 공간에서는 신호가 아니라 잡음을 적합할 위험이 있으며, 교차검증(13.8절)과 정칙화(18장)로 완화한다.
  • 윤리와 프라이버시 문제: 기존 자료(특히 개인정보)를 사용하는 것은 동의, 공정성, 프라이버시에 관한 물음을 낳는다.

크기는 편향을 이기지 못한다

위 한계 중 자료 품질이 왜 다른 것들과 급이 다른지는 숫자로 보는 편이 빠르다. 참 비율이 \(0.50\)인 모집단을 두고, 이미 존재하는 자료의 선택 기제가 한쪽을 아주 조금 더 많이 담아 관측 비율이 \(0.53\)이 되었다고 하자. 편향은 \(3\) 퍼센트포인트, 여론조사에서라면 눈에 띄지도 않을 크기다. 여기서 자료의 크기만 바꾸어 가며 \(95\%\) 신뢰구간을 그린 것이 아래 그림이다.

편향된 자료에서 신뢰구간은 좁아지지만 참값에서 멀어지고, 유효 표본 크기는 포화한다

왼쪽 그림에서 주황 띠는 가진 자료의 구간이고 파란 띠는 같은 크기의 무작위 표본의 구간이다. 무작위 표본은 크기와 무관하게 참값을 \(94\)–\(96\%\) 담는다. 가진 자료는 다르다. \(n = 1{,}000\)에서 구간은 \([0.499,\ 0.561]\)이고 참값을 담는 비율이 \(51\%\), \(n = 3{,}000\)에서 \([0.512,\ 0.548]\)에 \(8\%\), \(n = 10{,}000\)에서 \([0.520,\ 0.540]\)에 \(0\%\)다. 백만 건에서는 구간이 \([0.529,\ 0.531]\)까지 좁아지지만 참값은 그 안에 없다. 자료가 커지면서 커진 것은 정확성이 아니라 자신감이다.

오른쪽 그림은 같은 사실을 다른 화폐로 환산한 것이다. 편향 \(b\)와 표본 크기 \(n\)의 평균제곱오차는 \(b^2 + \sigma^2/n\)이므로, 같은 오차를 내는 무작위 표본의 크기는 \(n_{\text{eff}} = n / (1 + n b^2/\sigma^2)\)이고 이 값은 \(\sigma^2/b^2\)에서 멈춘다. 비율 추정에서 \(\sigma^2 = 0.25\)이므로 편향 \(0.03\)의 상한은 \(278\), 편향 \(0.01\)은 \(2{,}500\), 편향 \(0.001\)이라야 \(250{,}000\)이다. \(3\) 퍼센트포인트 치우친 자료는 백만 건을 모아도 무작위로 뽑은 \(278\)명과 같다. Meng(2018)이 "큰 모집단의 법칙"이라 부른 것의 가장 단순한 형태가 이것이다.

이 그림이 이 패러다임에 특히 아픈 이유는 마지막 한 걸음에 있다. 설계된 표본에서는 각자가 뽑힐 확률을 알기 때문에 가중으로 편향을 되돌릴 수 있다. 가진 자료에는 그 확률이 없다. 누가 자료에 들어왔는지를 정한 기제를 모르므로 자신이 어느 곡선 위에 있는지조차 알 수 없고, \(\sqrt{\hat p(1-\hat p)/n}\)이라는 표준오차는 그 무지에 대해 아무것도 말해 주지 않는다. 이 공식은 선택 기제를 모른 채 계산된 값이며, 자료가 커질수록 더 확신에 차서 틀린 답을 가리킨다.

연습문제

연습문제 1. 어떤 기술 회사의 데이터 과학자가 사용자 100만 명의 클릭스트림 자료에 접근할 수 있다. 도움말 페이지를 본 사용자가 사이트에 30% 더 오래 머문다는 사실을 발견했다. 도움말 페이지를 더 눈에 띄게 만들자고 제안해야 하는가? 추론상의 어려움을 논하라.

풀이

그런 제안은 성급하다. 자료가 (무작위 실험이 아니라) 관찰적이므로, 도움말 페이지 열람과 체류시간의 연관성은 교란요인 때문일 수 있다.

  • 역인과: 이미 더 몰입해 있는(더 오래 머무는) 사용자가 도움말 페이지를 살펴볼 가능성이 높다.
  • 사용자 유형: 도움말 페이지를 탐색하는 헤비 유저는 애초에 이용량이 많은 사람일 수 있다.
  • 난이도: 제품이 헷갈린다고 느끼는 사용자가 도움말 페이지를 찾고 동시에 씨름하느라 오래 머무는 것이지, 도움말이 몰입을 높인 것이 아니다.

인과효과를 확립하려면 회사는 A/B 테스트를 수행해야 한다. 사용자를 도움말 페이지가 눈에 띄는 버전과 현행 버전에 무작위 배정하고 몰입 지표를 비교하는 것이다.

연습문제 2. 탐색적 자료분석(EDA)과 확증적 자료분석(CDA)의 차이를 설명하라. 같은 자료로 둘 다 하는 것이 왜 문제인가?

풀이

탐색적 자료분석은 패턴을 찾고 가설을 만들며 직관을 쌓는다. 사전 지정된 가설 없이 시각화, 요약통계, 유연한 모형 적합을 사용한다.

확증적 자료분석은 사전 지정된 가설을 형식적 통계 절차(p-값, 신뢰구간)로 검정하며, 그 타당성은 자료를 보기 전에 가설이 세워졌다는 데 달려 있다.

같은 자료로 둘 다 하는 것이 문제인 이유는, EDA에서 발견한 패턴이 정의상 바로 그 표본에서 우연히 나타난 패턴이기 때문이다. 같은 자료에서 그 패턴을 다시 검정하면 "유의한" 결과를 얻을 확률이 부풀어 오른다(자료 엿보기 / 이중 사용). 가설이 자료와 독립적으로 지정되었다고 가정하는 p-값은 더 이상 타당하지 않다. 해법은 자료 분할(훈련/시험) 또는 가설의 사전등록이다.

연습문제 3. 어떤 연구자가 소셜미디어 게시물을 수집해, 운동에 대해 게시하는 사용자가 자기보고 행복도가 더 높다는 사실을 발견했다. 이 관찰적 웹 수집 자료에 특유한 편향의 원천 세 가지를 들어라.

풀이
  1. 선택편향(비대표 표본): 소셜미디어 사용자는 일반 인구를 대표하지 않는다. 더 젊고, 더 도시에 살며, 기술에 더 익숙한 쪽으로 치우친다.
  2. 자기표현 편향: 사람들은 긍정적인 내용(운동 성취, 행복한 순간)을 골라 올리고 부정적인 경험은 뺀다. 자료는 실제 행동이나 기분이 아니라 다듬어진 자기 이미지를 반영한다.
  3. 측정편향: 텍스트에서 추출한 "자기보고 행복도"(감성 분석)는 실제 안녕에 대한 잡음 섞인 대리변수다. 반어법, 문화적 규범, 언어의 중의성이 체계적 오차를 만든다.

추가로 교란(사회경제적 지위가 운동 습관과 행복도 모두에 영향)과 결측 자료(불행하거나 활동이 적은 사용자가 게시를 덜 해서 생기는 생존자 편향)도 있다.

연습문제 4. 가용한 자료를 분석할 때 나타나는 "갈래길의 정원" 문제를 설명하라. 이것은 고전적인 p-해킹과 어떻게 다른가?

풀이

"갈래길의 정원"(Gelman & Loken, 2013)은 자료 분석에서 연구자에게 주어진 수많은 자유도를 가리킨다. 변수 정의, 이상치 제거, 하위집단 선택, 모형 명세, 변환 등 각각이 달리 결정될 수도 있었던 선택들이다. 의도적인 p-해킹이 없더라도 연구자는 자료를 본 뒤에 이런 선택을 하며, 의식하든 아니든 흥미로운 결과가 나오는 쪽으로 이끌린다.

고전적인 p-해킹은 여러 분석을 명시적으로 시도한 뒤 유의한 것만 보고하는 행위다. 갈래길의 정원은 더 미묘하다. 연구자는 분석을 한 번만 수행하지만, 그 특정한 분석 자체가 자료에 근거해 방대한 가능성 공간에서 암묵적으로 선택된 것이다. 결과는 마찬가지로 거짓양성률의 상승이지만, 연구자는 하나만 보고했으므로 여러 분석을 시도하지 않았다고 정직하게 믿을 수 있다. 해법은 자료 수집 전에 분석 계획을 확정하는 사전등록이다.

연습문제 5. 어떤 현대 데이터 팀이 모집단 전체를 포괄하는 행정 기록(예: 1년치 모든 신용카드 거래)을 다룬다. 어떤 이들은 N → ∞이면 통계적 추론이 불필요해진다고 주장한다. 겉보기에 모집단 자료가 있더라도 추론적 사고가 여전히 중요한 이유 두 가지를 제시하라.

풀이

(1) 그 자료도 여전히 표본이다 — 다만 다른 초모집단에서 뽑은 표본일 뿐이다. "2024년의 모든 거래"는 "비슷한 조건에서 일어날 수 있었던 모든 거래(미래의 해를 포함해)"라는 암묵적 모집단에서 뽑은 표본이다. 추론은 유한한 표본에서 고정된 모집단으로 일반화하는 것이 아니라, 관측된 과거에서 미래나 다른 그럴듯한 시나리오로 일반화하는 문제다. 관심 있는 변동성은 모두 자료생성 과정에서 나온다.

(2) 진짜 전수조사라 하더라도 인과적 질문과 반사실적 질문은 기술통계로 답할 수 없다. 모든 고객의 정확한 평균 매출을 안다고 해서 가격이 바뀌면 어떻게 될지는 알 수 없다. 반사실에는 명시적인 무작위 실험이나 강한 식별 가정이 필요하며, 자료의 크기는 무관하다.

흔히 언급되는 세 번째 이유: \(N\)이 아무리 커도 누가 자료에 나타나는가에 대한 선택편향은 막아주지 못한다. 행정 기록은 기록되었고 기록으로 남은 것을 반영하며, 비고객과 누락된 거래는 보이지 않는다.

연습문제 6. 외적 타당도는 한 자료에서 얻은 발견이 다른 맥락으로 일반화되는지의 문제다. 어떤 소매업체의 추천 모형이 미국 자료로 학습되었고 이제 EU에 출시되어야 한다. 이 모형이 EU에서 실패할 수 있는 서로 다른 기제 세 가지와 각각에 대한 실용적 완화 전략을 하나씩 제시하라.

풀이

공변량 이동: 사용자 특성의 결합분포가 다르다(연령 분포, 소득, 탐색 패턴). 완화책: 훈련 표본에 가중치를 다시 주어 EU 공변량 분포에 맞추는 중요도 가중, 또는 도메인 적응 방법.

개념 이동 / 다른 사상 \(P(Y \mid X)\): 같은 특성이 다른 결과를 예측한다. 미국과 동등한 프로필의 EU 사용자가 문화적·규제적 차이 때문에 다르게 구매할 수 있다. 완화책: 모니터링과 함께 배포하고, EU 표본이 충분히 쌓이면 현지 자료로 신속히 재학습한다. 미국 특유의 특성 분포를 전제한 수작업 임계값은 피한다.

규제 / 구조적 이동: GDPR이 수집 가능한 자료를 제한하고, 동의 UI가 추론 시점에 사용 가능한 특성을 바꾸며, 국경 간 자료 이동 제한 때문에 미국 인프라에서 EU 자료로 미세조정할 수 없다. 완화책: 특성이 없을 때 우아하게 성능이 저하되는 모형 설계(예: 특성 드롭아웃 훈련, 더 희소한 EU 특성도 쓸 수 있는 계층 모형)와, 지역별 차이에 대한 법무·엔지니어링 검토를 포함한 배포 계획.

밑바탕의 원칙은 이렇다. 학습된 분포 밖에 배포되는 모형은 모니터링, 보정, 그리고 흔히 재학습이 필요하다. 미국에서 학습한 모형을 EU에 대한 정답인 양 다루는 것이야말로 이 패러다임이 부추기는 종류의 오류다.

연습문제 7. 연습문제 4의 갈래길의 정원을 정량화하라. 참 효과가 전혀 없는 자료에서 분석 선택지를 몇 가지만 열어 두어도 "유의한 결과"를 얻을 확률이 얼마나 되는지 계산하라.

풀이
import numpy as np
from scipy import stats

rng = np.random.default_rng(0)

def one_study():
    """참 효과가 전혀 없는 자료 하나에 대해, 그럴듯한 분석 갈래를 모두 시도한다."""
    n = 200
    y = rng.normal(0, 1, n)
    x = rng.normal(0, 1, n)              # x 와 y 는 완전히 독립이다
    male = rng.random(n) < 0.5
    young = rng.random(n) < 0.5

    pvals = []
    for subset in (np.ones(n, bool), male, ~male, young, ~young):   # 부분집단
        for transform in (lambda v: v, np.abs):                     # 변환
            for exclude in (False, True):                           # 이상치 제외
                m = subset & (np.abs(x) < 2) if exclude else subset
                if m.sum() > 20:
                    pvals.append(stats.pearsonr(transform(x[m]), y[m])[1])
    return np.array(pvals)

hits = 0
for _ in range(2000):
    pv = one_study()
    if (pv < 0.05).any():
        hits += 1
print(f"분석 갈래 {len(pv)}가지")
print(f"하나라도 p < 0.05 가 나올 확률: {hits / 2000:.4f}")
print(f"단일 분석만 했다면:             0.0500")

출력:

분석 갈래 20가지
하나라도 p < 0.05 가 나올 확률: 0.4015
단일 분석만 했다면:             0.0500

부분집단 \(5\)가지 \(\times\) 변환 \(2\)가지 \(\times\) 이상치 처리 \(2\)가지 \(=\) 갈래 \(20\)개만으로 거짓양성 확률이 \(5\%\)에서 \(40\%\) 로 뛴다.

\(p\)-해킹과 무엇이 다른가. 이것이 연습문제 4의 핵심이다.

  • \(p\)-해킹은 여러 분석을 실제로 돌려 보고 유의한 것을 고른다. 연구자가 자신이 무엇을 하는지 안다.
  • 갈래길의 정원은 분석을 하나만 한다. 다만 그 하나를 자료를 본 뒤에 골랐다. 연구자는 자신이 정직하다고 느끼며, 실제로 다중검정 보정을 해야 한다는 생각조차 들지 않는다.

그런데 통계적 결과는 같다. "이 자료가 달랐다면 나는 다른 분석을 했을 것"이라면, 실제로 돌린 분석이 하나뿐이어도 유효 검정 횟수는 \(20\)이다. \(p\) 값의 의미는 내가 한 일이 아니라 내가 했을 법한 일 전체에 달려 있다.

왜 가용 자료 분석에서 특히 심한가. 설계된 실험에는 사전에 정한 하나의 결과변수와 하나의 분석이 있다. 클릭스트림 자료에는 수백 개의 변수, 수십 개의 자연스러운 부분집단, 여러 가지 그럴듯한 결과 정의가 있다. 정원의 갈래가 훨씬 많다.

처방은 사전등록(연습문제 6), 자료 분할(탐색용과 확증용을 나눔), 그리고 다중성 보정이다. \(\square\)

연습문제 8. 연습문제 5를 수치로 따져 보라. \(N\)이 커지면 무엇이 해결되고 무엇이 해결되지 않는가?

풀이
import numpy as np
from scipy import stats

rng = np.random.default_rng(0)

print("참 상관이 0.01 인 자료 — 실무적으로는 아무 의미 없는 크기")
print(f"{'n':>10}{'표본 상관 r':>14}{'p 값':>13}{'판정':>10}")
for n in (100, 1_000, 10_000, 100_000, 1_000_000):
    x = rng.normal(0, 1, n)
    y = 0.01 * x + rng.normal(0, 1, n)
    r, p = stats.pearsonr(x, y)
    print(f"{n:>10}{r:>+14.5f}{p:>13.3e}{'유의' if p < 0.05 else '유의 아님':>10}")

출력:

참 상관이 0.01 인 자료 — 실무적으로는 아무 의미 없는 크기
         n       표본 상관 r          p 값        판정
       100      +0.06548    5.175e-01     유의 아님
      1000      +0.05306    9.352e-02     유의 아님
     10000      +0.00834    4.045e-01     유의 아님
    100000      +0.01185    1.776e-04        유의
   1000000      +0.00951    1.933e-21        유의

\(n = 10^6\)에서 상관 \(0.010\)이 \(p = 1.9\times10^{-21}\)로 "유의"하다. 설명되는 분산은 \(r^2 = 0.0001\), 곧 만분의 일이다.

\(N\)이 커지면 해결되는 것: 표집 오차뿐이다. 그리고 그것이 전부다.

해결되지 않는 것 네 가지.

첫째, 유의성과 중요성의 분리. \(N\)이 크면 모든 것이 유의해진다. 검정은 "효과가 정확히 \(0\)인가"를 묻는데, 현실에서 정확히 \(0\)인 효과는 거의 없다. 그래서 \(p\) 값은 표본 크기의 측정치로 전락하고, 효과크기와 신뢰구간만이 정보를 갖는다.

둘째, 편향. 이 장에서 되풀이한 주제다. 행정 기록이 "모집단 전체"라 해도 그것은 기록된 모집단이지 관심 모집단이 아니다. 신용카드 거래 전체는 카드를 쓰지 않는 사람을 담지 못한다. 표집 오차가 \(0\)이어도 편향은 그대로다.

셋째, 초모집단(superpopulation). 작년 거래 전체를 가졌다 해도 우리가 알고 싶은 것은 대개 내년에도 통할 무언가다. 그렇다면 작년 자료는 "가능한 세계들"에서 뽑힌 하나의 표본이며, 불확실성은 여전히 존재한다. 관측된 것이 곧 모집단인 경우는 "작년에 정확히 무슨 일이 있었나"를 묻는 순수 기술통계뿐이다.

넷째, 측정오차와 결측. \(N\)과 무관하다.

실천적 결론. \(N\)이 큰 자료에서는 검정을 덜 하고 추정을 더 해야 한다. "유의한가"가 아니라 "얼마나 큰가, 그 크기가 의사결정을 바꾸는가"를 물어야 한다. \(\square\)

연습문제 9. 연습문제 6의 외적 타당도 문제를 모형화하라. 공변량 이동과 개념 이동을 구분하고, 어느 쪽이 고치기 쉬운지 보여라.

풀이
import numpy as np
from sklearn.linear_model import LinearRegression

rng = np.random.default_rng(1)
n = 20_000

def generate(shift=0.0, concept=False):
    x = rng.normal(shift, 1, n)                  # 공변량 이동: x 의 분포가 바뀐다
    beta = -0.5 if concept else 1.0              # 개념 이동: x→y 관계가 바뀐다
    y = beta * x + 0.3 * x ** 2 + rng.normal(0, 1, n)
    return x.reshape(-1, 1), y

Xtr, ytr = generate()
rmse = lambda m, X, y: np.sqrt(((m.predict(X) - y) ** 2).mean())

naive = LinearRegression().fit(Xtr, ytr)         # 2차항을 빠뜨린 모형
print("선형 모형 (모형이 틀렸다)")
print(f"  같은 분포        {rmse(naive, *generate()):.4f}")
print(f"  공변량 이동      {rmse(naive, *generate(shift=2.0)):.4f}")
print(f"  개념 이동        {rmse(naive, *generate(concept=True)):.4f}")

Xq = np.column_stack([Xtr, Xtr ** 2])
correct = LinearRegression().fit(Xq, ytr)        # 2차항을 넣은 옳은 모형
q = lambda X: np.column_stack([X, X ** 2])
print("\n2차항을 넣은 모형 (모형이 옳다)")
for label, args in [("같은 분포", {}), ("공변량 이동", {"shift": 2.0}),
                    ("개념 이동", {"concept": True})]:
    X, y = generate(**args)
    print(f"  {label:<14} {np.sqrt(((correct.predict(q(X)) - y) ** 2).mean()):.4f}")

출력:

선형 모형 (모형이 틀렸다)
  같은 분포        1.0999
  공변량 이동      2.0143
  개념 이동        1.8585

2차항을 넣은 모형 (모형이 옳다)
  같은 분포          1.0011
  공변량 이동         1.0032
  개념 이동          1.7946

표를 보면 결론이 분명하다.

틀린 모형 옳은 모형
같은 분포 \(1.10\) \(1.00\)
공변량 이동 \(2.01\) \(1.00\) 견딘다
개념 이동 \(1.86\) \(1.79\) 못 견딘다

공변량 이동(\(P(X)\)가 변하고 \(P(Y \mid X)\)는 그대로)은 모형이 옳다면 아무 문제가 없다. 위에서 옳은 모형은 \(x\) 평균이 \(2\)만큼 옮겨져도 성능이 그대로다. 문제가 생기는 것은 모형이 틀렸을 때인데, 원래 분포 범위에서만 근사가 잘 맞기 때문이다. 대응책은 중요도 가중이나 모형 개선, 그리고 외삽 구간을 명시하는 것이다.

개념 이동(\(P(Y \mid X)\) 자체가 변함)은 어떤 재가중으로도 고칠 수 없다. 배워야 할 규칙이 달라졌기 때문이다. 목표 지역의 자료를 새로 얻어 재학습하거나 미세조정하는 수밖에 없다.

EU 출시 사례에 대입하면.

기제 유형 대응
EU 고객의 연령·소득 분포가 다르다 공변량 이동 재가중, 외삽 범위 확인
GDPR로 일부 특성을 못 쓴다 특성 결손 축소된 특성으로 재학습
같은 특성이라도 선호가 다르다 개념 이동 현지 자료로 재학습

셋째가 가장 어렵고 가장 흔하다. 모형을 그대로 옮길 수 있다는 가정 자체가 검증 대상이며, 소규모 현지 실험으로 확인하는 것이 정석이다. \(\square\)

연습문제 10. 가용 자료 분석에서 가장 흔한 실수 중 하나가 평가 설계의 실패다. 사용자 단위로 반복 관측이 있는 자료에서 무작위 분할이 성능을 얼마나 부풀리는지 보여라.

풀이
import numpy as np
from sklearn.ensemble import RandomForestRegressor

rng = np.random.default_rng(2)
users, reps = 400, 25
uid = np.repeat(np.arange(users), reps)
user_effect = rng.normal(0, 3.0, users)[uid]        # 개인차가 크다
x = rng.normal(0, 1, len(uid))
y = user_effect + 0.5 * x + rng.normal(0, 1, len(uid))
F = np.column_stack([x, uid])                      # uid 를 특성으로 넣는다

rmse = lambda m, A, b: np.sqrt(((m.predict(A) - b) ** 2).mean())
fit = lambda tr: RandomForestRegressor(
    n_estimators=100, random_state=0, n_jobs=-1).fit(F[tr], y[tr])

idx = rng.permutation(len(uid))
cut = int(0.8 * len(uid))
r_random = rmse(fit(idx[:cut]), F[idx[cut:]], y[idx[cut:]])

test_users = rng.choice(users, users // 5, replace=False)
te = np.isin(uid, test_users)
r_group = rmse(fit(~te), F[te], y[te])

print(f"무작위 분할 RMSE  {r_random:.4f}   ← 같은 사용자가 학습·평가 양쪽에 있다")
print(f"사용자 분할 RMSE  {r_group:.4f}   ← 처음 보는 사용자")
print(f"성능 과대평가     {r_group / r_random:.2f}배")
print(f"\n아무것도 학습하지 않고 전체 평균만 써도 RMSE {y.std():.4f}")

출력:

무작위 분할 RMSE  1.7574   ← 같은 사용자가 학습·평가 양쪽에 있다
사용자 분할 RMSE  4.0698   ← 처음 보는 사용자
성능 과대평가     2.32배

아무것도 학습하지 않고 전체 평균만 써도 RMSE 3.2200

결과가 뼈아프다. 무작위 분할로는 RMSE \(1.76\)이라는 훌륭한 성능이 나온다. 그런데 처음 보는 사용자에게는 \(4.07\)이고, 이는 아무것도 학습하지 않고 전체 평균만 답하는 것(\(3.22\))보다도 나쁘다.

무슨 일이 일어났는가. 모형은 \(x\)와 \(y\)의 관계를 배운 것이 아니라 사용자 각각의 평균을 외웠다. 같은 사용자의 다른 관측이 학습 자료에 있으면 그 기억이 통하고, 없으면 통하지 않는다.

핵심 질문은 "이 모형을 실제로 어떻게 쓸 것인가"이다.

  • 기존 사용자의 다음 행동을 예측한다면 무작위 분할이 오히려 현실에 가깝다.
  • 신규 사용자에게 쓸 것이라면 사용자 분할이 맞는 평가다.

평가 설계는 통계 문제가 아니라 배포 상황을 그대로 흉내 내는 문제다.

같은 구조의 흔한 누출들.

누출 상황 올바른 분할
그룹 누출 같은 사용자·환자·기기의 반복 관측 그룹 단위 분할
시간 누출 미래 자료로 학습해 과거를 예측 시점 기준 분할
전처리 누출 전체 자료로 표준화·특성선택 후 분할 학습 자료로만 적합
목표 누출 결과 이후에 생성된 특성 사용 시점 기준 특성 정의

마지막 것이 가장 찾기 어렵다. "퇴원 시 처방된 약"으로 입원 결과를 예측하는 모형은 정확도가 놀랍도록 높지만 아무 쓸모가 없다. 성능이 너무 좋으면 기뻐하기 전에 누출을 의심하라. \(\square\)


정리하며

  • 현대적 접근은 풍부한 기존 자료와 강력한 알고리즘을 활용해 예측과 통찰을 끌어낸다.
  • 가장 큰 강점은 확장성과 유연성이며, 고전적 방법이 다루도록 설계되지 않은 문제와 자료 유형을 처리한다.
  • 가장 큰 약점은 설계된 연구 없이 인과적 주장을 하기 어렵다는 점이다.
  • 실무에서 가장 유능한 데이터 과학자는 두 접근을 결합한다. 예측에는 현대적 알고리즘을, 인과적 추론과 불확실성 정량화에는 고전적 원칙을 쓴다.