실무 데이터 분석을 위한 GLM(일반화 선형모형) 이해와 활용
데이터 분석을 하다 보면 “이건 로지스틱 회귀로 돌렸습니다”, “포아송 회귀가 적합합니다” 같은 이야기를 자주 듣습니다. 이름도 어렵고 전혀 다른 기법처럼 보이지만, 사실 이들은 모두 같은 뿌리에서 나온 GLM(Generalized Linear Model, 일반화 선형모형)이라는 큰 틀 안에 있습니다.
GLM은 단순한 이론이 아니라, 실무 데이터를 설명하기 위한 유연한 도구입니다. 고객이 메시지를 열었는지(0/1), 앱을 하루에 몇 번 켰는지(카운트), 결제 금액은 얼마였는지(연속형)… 데이터의 모양은 제각각입니다. 그런데 선형회귀 하나로는 이 모든 것을 설명하기 어렵습니다. GLM은 이때 분포와 링크 함수를 상황에 맞게 조합하여, 현실 데이터에 꼭 맞는 해석을 가능하게 합니다.
이번 글에서는 로지스틱·포아송·감마 회귀를 실제 예제와 Python 코드로 구현해 보면서, “왜 GLM이 실무에서 중요한지”를 살펴보겠습니다.
우리가 가장 먼저 배우는 선형회귀는 이렇게 쓰입니다.
하지만 이 모델은 결과값이 연속형이고, 정규분포를 따르며, 오차가 등분산이라는 가정을 전제로 합니다. 문제는 실무 데이터가 꼭 그렇지 않다는 점입니다.
✔️ 고객이 메시지를 열었는가? → 0/1
✔️ 하루에 앱 실행 횟수는 몇 번인가? → 0, 1, 2, 3,…
✔️ 구매 금액은 얼마인가? → 연속형이지만 한쪽으로 꼬리가 김
이런 다양한 데이터 유형을 다루기 위해 등장한 것이 GLM(일반화 선형모형)입니다. GLM은 크게 두 가지 축으로 선형회귀를 확장합니다.
1. 분포(Distribution) : 결과값이 어떤 확률분포를 따르는가
2. 링크 함수(Link Function) : 결과값을 어떻게 선형식과 연결할 것인가
즉, 데이터를 있는 그대로 바라보고 거기에 맞는 옷을 입히는 방식이 GLM이라고 할 수 있습니다.
✔️ 시나리오
한 패션 커머스 플랫폼의 CRM팀이 주간 캠페인을 준비하고 있습니다. 푸시 메시지 발송 전략을 짤 때 두 가지 고민이 있습니다.
1. 발송 시간 : 오전 9시에 보낼지, 저녁 6시에 보낼지
2. 혜택 정책 : 할인 혜택을 줄지 말지 (여기서는 0% vs 10%)
마케터의 질문은 단순합니다.
어떤 시간대와 혜택 조합에서 고객이 푸시 메시지를 더 잘 열까
이 문제는 결과값이 푸시 메시지 오픈 여부(0/1)이므로, 이항분포 + 로짓(로그오즈) 링크를 적용한 로지스틱 회귀가 적합합니다.
위 이미지는 시간대와 할인율에 따른 푸시 메시지 오픈 여부(0/1)를 기록한 가상의 예제 데이터입니다. 이제 이 데이터를 활용해 GLM의 로지스틱 회귀를 적합하고, 그 결과를 살펴보겠습니다.
✔️ 결과 요약
모델 출력 중 핵심 계수는 다음과 같습니다.
Intercept (절편) = -1.75
저녁 발송 (C(hour)[T.18]) = 1.25
할인 10% (C(discount)[T.10]) = 0.71
✔️ 실무 해석
1. 기준 조건 : 오전 9시 발송 + 할인 없음
오픈율 약 15%
2. 저녁 발송 효과 : 계수 1.25 → exp(1.25) ≈ 3.5배
저녁 발송 시 오즈가 3.5배 상승
오픈율은 약 38%까지 증가
3. 할인 효과 : 계수 0.71 → exp(0.71) ≈ 2.0배
할인 10% 제공 시 오즈가 2배 증가
오픈율은 약 26%까지 증가
4. 저녁 + 10% 할인 동시 적용
(상호작용을 포함하지 않은 주효과 모델 기준) 저녁+10% 할인에서 예측 오픈율은 약 52~55%.
필요시 C(hour)*C(discount) 상호작용을 추가해 결합효과를 별도로 검증
✔️ 시나리오
마케팅팀은 다음과 같은 질문을 하고 있습니다.
1. 푸시 알림을 보낸 날, 사용자가 앱을 더 자주 켜는가?
2. 프로모션이 있는 날, 실행 횟수에 차이가 있는가?
여기서 결과값은 앱 실행 횟수(0,1,2,…)입니다. 이처럼 횟수(count) 데이터는 포아송분포로 설명하는 것이 일반적이고, 이 경우에는 로그 링크 함수를 적용한 포아송 회귀가 적절합니다.
위 이미지는 가상의 예제 데이터 일부를 보여줍니다.
push는 푸시 알림을 보냈는지 여부(0/1)
promo는 프로모션이 있었는지 여부(0/1)
runs는 해당 날 사용자가 앱을 실행한 횟수를 의미합니다.
예를 들어, push=1, promo=0, runs=3이라면 “푸시 알림은 보냈지만 프로모션은 없었고, 사용자가 앱을 세 번 실행했다”는 뜻입니다. 이 데이터 500행을 기반으로, GLM의 포아송 회귀를 적용해 푸시 알림과 프로모션이 앱 실행 횟수에 어떤 영향을 주는지 살펴보겠습니다.
✔️ 결과 요약
출력된 계수 중 핵심은 다음과 같습니다.
Intercept (절편) = 0.4985
→ 기준 조건(푸시 X, 프로모션 X) 일 때의 로그 평균 실행 횟수
→ exp(0.4985) ≈ 1.65회
푸시 알림 효과 (C(push)[T.1]) = 0.5358
→ exp(0.5358) ≈ 1.71
→ 푸시 알림을 보낸 날, 앱 실행 횟수가 71% 증가
프로모션 효과 (C(promo)[T.1]) = 0.3866
→ exp(0.3866) ≈ 1.47
→ 프로모션이 있는 날, 앱 실행 횟수가 47% 증가
포아송 회귀에서 계수(coef)는 로그 스케일이라 직관적으로 해석하기 어렵습니다. 그래서 지수변환(exp(coef))을 해서 사건율비(IRR, Incident Rate Ratio)로 해석합니다.
IRR > 1: 사건(횟수)이 더 자주 발생 → “평균 발생률(λ)이 그 배율만큼 증가”
IRR < 1: 사건이 덜 발생 → “평균 발생률(λ)이 그 배율만큼 감소”
쉽게 말해, IRR은 “조건이 달라졌을 때, 사건이 기준 대비 몇 배 더(혹은 덜) 발생하는가?”를 알려주는 지표입니다
✔️ 실무 해석
1. 기준 조건 (푸시 X, 프로모션 X)
실행 횟수 λ = exp(0.4985) ≈ 1.65회
2. 푸시 알림만 적용
실행 횟수 = 1.65 × 1.71 ≈ 2.8회
3. 프로모션만 적용
실행 횟수 = 1.65 × 1.47 ≈ 2.4회
4. 푸시+프로모션 동시 적용
실행 횟수 = 1.65 × 1.71 × 1.49 ≈ 4.1회
✔️ 시나리오
이번에는 고객의 구매 금액을 예측해 봅니다.
마케팅팀이 궁금한 것은
1. 유료 멤버십 가입 고객과 비가입 고객의 구매 금액에 차이가 있는가?
2. 세션 시간(앱 사용 시간)이 길어질수록 구매 금액도 늘어나는가?
이 문제의 결과값은 구매 금액이며, 음수일 수 없고 오른쪽으로 긴 꼬리를 가지므로, 감마 회귀(Gamma regression) + 로그 링크를 사용합니다
위 이미지는 가상의 예제 데이터 일부를 보여줍니다.
session : 사용자가 앱을 사용한 시간(분)
is_member : 멤버십 가입 여부 (0=비회원, 1=유료 멤버십)
amount : 해당 사용자의 구매 금액
예를 들어, session=200, is_member=1, amount=70이라면 “앱을 약 200분 사용한 멤버십 고객이 평균적으로 70 단위 금액을 결제했다”는 뜻입니다.
이 데이터를 활용해, 세션 시간과 멤버십 여부가 구매 금액에 어떤 영향을 주는지를 GLM(감마 회귀)로 분석해 보겠습니다.
✔️ 결과 요약
Intercept = 3.9126
→ is_member=0(비회원) 그리고 session=0일 때의 기대 구매 금액의 로그
→ exp(3.9126) ≈ 49.9 → 비회원 기준 조건의 평균 구매 금액 ≈ 50
C(is_member)[T.1] = 0.2180
→ exp(0.2180) ≈ 1.24
→ 멤버십 가입 고객은 비회원 대비 평균 구매 금액이 24% 더 높음
session = -2.738e-05 (≈ 0)
→ exp(-0.000027) ≈ 1.00
→ 세션 시간은 구매 금액에 유의한 영향을 주지 않음 (p=0.842)
감마 회귀(로그 링크)의 계수는 로그 스케일이므로 exp(coef)로 평균비(Mean Ratio), 즉 배율 효과를 해석합니다. 평균비 > 1이면 금액이 그 배율만큼 증가, = 1이면 영향 없음, < 1이면 감소를 의미합니다.
예) exp(0.2180) = 1.24 → 멤버십 고객의 평균 구매금액이 24% 높다(평균비 1.24)
여기서는 유료 멤버십 가입 여부만 의미 있는 변수로 나타났습니다.
지금까지 세 가지 예제를 통해 살펴본 것처럼, 일반화 선형모형(GLM)은 데이터의 성격(이항/카운트/연속)에 따라 적절한 분포와 링크 함수를 선택해 해석할 수 있도록 도와줍니다.
✔️ 이항 데이터 (0/1, 예: 푸시 메시지 오픈 여부)
→ 로지스틱 회귀 (이항분포 + 로짓 링크)
→ “특정 조건에서 확률이 얼마나 올라가는가?”
→ expβ=오즈비
✔️ 카운트 데이터 (횟수, 예: 앱 실행 횟수)
→ 포아송 회귀 (포아송분포 + 로그 링크)
→ “조건이 변했을 때 횟수가 몇 배 늘어나는가?”
→ expβ=IRR
✔️ 연속 데이터 (양수 금액, 예: 구매 금액)
→ 감마 회귀 (감마분포 + 로그 링크)
→ “특정 속성이 금액을 몇 % 끌어올리는가?”
→ expβ=평균비/배율
1. 계수(coef) 그대로 보지 말 것
로지스틱은 로짓(로그오즈) → expβ=오즈비
포아송·감마는 로그 링크(평균의 로그) → expβ=배율 효과(포아송: IRR, 감마: 평균비)
2. 유의성(p-value)을 확인할 것
모든 변수가 의미 있는 것은 아님
예제 3에서처럼, 세션 시간은 통계적으로 유의하지 않음 → 실무에서 중요한 요인이 아님을 알려줌
3. 상호작용/모형진단
필요시 C(A)*C(B) 상호작용으로 조합 효과 검증
카운트 데이터 과산포/제로-인플레이션 점검(필요시 GLM-NB·ZIP/ZINB)
로지스틱은 캘리브레이션, 포아송·감마는 잔차/링크 적절성 확인
4. 실무 맥락과 함께 해석할 것
단순히 “통계적으로 유의하다”는 말은 부족
“이 전략은 매출에 직접적 기여를 한다” 또는 “이 지표는 의미 있는 KPI가 아니다”라는 액션 지향적 해석이 필요
이번 글에서는 세 가지 가상의 예제 데이터를 통해 GLM을 어떻게 적용할 수 있는지를 살펴보았습니다. 이항 데이터에는 로지스틱 회귀, 카운트 데이터에는 포아송 회귀, 연속 데이터에는 감마 회귀를 적용함으로써 각 데이터의 특성과 분포에 맞는 분석 방법을 선택할 수 있었습니다.
즉, 실무에서 다루는 데이터의 형태와 분포에 따라 적합한 GLM 기법을 적용하면, 단순한 통계 결과를 넘어 의미 있는 해석을 도출하고 이를 실질적인 비즈니스 성과로 연결할 수 있습니다. GLM은 현장의 의사결정자가 궁금해하는 “무엇이 고객 행동과 매출을 실제로 바꾸는가?”와 같은 질문에도 답할 수 있는 강력한 도구가 될 수 있습니다.
데이터의 형태에 맞는 접근을 선택하는 것만으로도, 숫자 뒤에 숨어 있는 인사이트를 발견하고 더 나은 의사결정을 이끌어낼 수 있을 것입니다.