RyanNerd
라덕'Story
RyanNerd
  • 분류 전체보기 (60) N
    • Study Note (25) N
      • Python (3)
      • R (1)
      • Airflow (7)
      • 통계 (14) N
    • 빅데이터분석기사 (1)
      • 필기 (1)
    • Programmers (28)
      • Python (13)
      • SQL (15)
    • Project (3)
      • Django (3)
    • Mac (2)
    • 맛집 (0)

블로그 메뉴

  • NaverBlog
  • 홈

최근 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
RyanNerd

라덕'Story

Study Note/통계

숫자를 센다? 무조건 '푸아송 회귀'입니다. (feat. 의료 데이터 활용법)

2025. 12. 15. 16:37

데이터를 받았는데 결과값($Y$)이 '횟수(Count)'라면? 고민하지 말고 푸아송 회귀를 떠올려야 합니다. 하지만 모든 횟수 데이터에 쓸 수 있는 건 아닙니다.

오늘은 푸아송 회귀의 정확한 사용 조건과 의료 현장에서의 대표적인 예시, 그리고 주의할 점(과산포)까지 정리해 보겠습니다.

 

1. 언제 쓰는가? : "발생 횟수"를 셀 때

가장 중요한 키워드는 "단위 시간/공간 동안 발생한 사건의 횟수"입니다.

핵심 조건 3가지

  1. 결과값($Y$)이 0 이상의 정수(Non-negative Integer)여야 합니다.
    • $Y = 0, 1, 2, 3 \dots$ (OK)
    • $Y = 1.5, -2, 3.7$ (NO - 이런 데이터는 푸아송 불가능)
  2. 발생 횟수가 드문(Rare) 사건일수록 잘 맞습니다.
    • 예: 희귀병 발병, 교통사고 발생, 기계 고장 등.
  3. 독립성: 한 번의 사건 발생이 다음 사건 발생 확률에 영향을 주지 않아야 합니다.

2. 의료 데이터에서의 대표적인 활용 예시

의료 데이터 분석가라면 아래와 같은 상황에서 반드시 푸아송 회귀를 써야 합니다.

① 병원 이용량 분석

  • 상황: "고혈압 환자의 연간 응급실 방문 횟수 예측"
  • 데이터: 0회, 1회, 2회... (음수 없음, 정수임)
  • 해석: 나이가 10살 많을수록 응급실 방문 횟수가 1.2배 증가한다.

② 역학(Epidemiology) 연구: 발병 건수

  • 상황: "특정 지역의 일주일간 독감 확진자 수 분석"
  • 데이터: A지역 5명, B지역 12명...
  • 활용: 기온, 습도, 백신 접종률($X$)이 확진자 수($Y$)에 미치는 영향 분석.

③ 임상 연구: 증상 발현 횟수

  • 상황: "신약 투여 후 24시간 동안 발작(Seizure) 횟수 비교"
  • 데이터: 0번, 3번, 5번...
  •  

3. 왜 그냥 선형회귀(OLS)를 쓰면 안 될까?

"그냥 $Y$가 숫자니까 선형회귀($Y=ax+b$) 돌리면 안 되나요?" $\rightarrow$ 안 됩니다!

  1. 음수 예측 문제: 선형회귀는 $Y$값의 범위를 제한하지 않습니다. 모델이 "내년 응급실 방문 횟수는 -3회입니다"라고 예측할 수 있습니다. (말이 안 되죠.)
  2. 정수 조건 위배: 선형회귀는 "방문 횟수 1.5회" 같은 소수점을 예측합니다.
  3. 등분산성 위배: 횟수 데이터는 평균이 커질수록 분산도 같이 커지는 성질이 있습니다. (발생 빈도가 높을수록 변동폭도 큼). 이는 선형회귀의 '등분산성 가정'을 깨뜨립니다.

푸아송 회귀는 $Log$를 씌워서 계산하기 때문에 예측값이 항상 양수(+)가 나오도록 보장합니다.

 

4. 꿀팁: "Offset(오프셋)"과 "과산포"

실무에서 푸아송 회귀를 돌릴 때 꼭 체크해야 할 두 가지입니다.

① 관찰 기간이 다를 때? (Offset 활용)

환자 A는 1년 동안 관찰해서 2번 방문했고, 환자 B는 10년 동안 관찰해서 2번 방문했습니다. 둘을 똑같이 "2번"으로 취급하면 안 되겠죠? 이때 관찰 기간(Time)이나 인구수(Population)를 보정해주는 것을 Offset이라고 합니다.

  • 적용: log(Visits / Time) = ... 형태로 모델링하여 "발생률(Rate)"을 분석하게 됩니다.

② 분산이 너무 크다면? (Overdispersion, 과산포)

푸아송 분포의 대전제는 "평균 = 분산"입니다. 하지만 실제 의료 데이터는 대부분 분산이 평균보다 훨씬 큽니다. (어떤 환자는 0번 오는데, 어떤 환자는 100번 옴).

  • 해결책: 이때는 푸아송 대신 음이항 회귀(Negative Binomial Regression)를 써야 합니다.

Tip: R이나 Python 결과에서 Deviance / DF 값이 1보다 훨씬 크면 음이항 회귀로 갈아타세요.

 

요약

  1. 목적: "몇 번(Count)" 발생했는지를 예측할 때 쓴다.
  2. 조건: 결과값 $Y$는 반드시 0 이상의 정수여야 한다.
  3. 주의: 평균보다 분산이 너무 크면(과산포) 음이항 회귀를 쓴다.
  4. 핵심: 기간이나 인구수가 다르면 Offset을 설정해서 "비율(Rate)"을 봐야 한다.

'Study Note > 통계' 카테고리의 다른 글

정확도(Accuracy)의 함정: 민감도, 특이도, 그리고 베이즈 정리  (0) 2025.12.17
분류 문제의 시작, 로지스틱 회귀(Logistic Regression) 완벽 해부  (0) 2025.12.16
직선을 넘어 곡선으로, 그리고 모델의 성적표 AIC  (0) 2025.12.15
회귀분석의 확장: 과적합 방지와 데이터 특성에 맞는 모델링  (0) 2025.12.15
회귀모형의 진단: 잔차, 레버리지, 그리고 쿡의 거리  (0) 2025.12.15
    'Study Note/통계' 카테고리의 다른 글
    • 정확도(Accuracy)의 함정: 민감도, 특이도, 그리고 베이즈 정리
    • 분류 문제의 시작, 로지스틱 회귀(Logistic Regression) 완벽 해부
    • 직선을 넘어 곡선으로, 그리고 모델의 성적표 AIC
    • 회귀분석의 확장: 과적합 방지와 데이터 특성에 맞는 모델링
    RyanNerd
    RyanNerd
    라이언 덕후의 일상 스토리~

    티스토리툴바