03. 상관분석과 회귀분석 (Correlation & Regression)
1. 개요 및 시나리오
상황: “배송이 늦으면 고객이 얼마나 화낼까요?” 직관적으로는 “많이 화낸다”고 알지만, 비즈니스에서는 숫자가 필요합니다.
“배송이 1일 늦어질 때마다 고객 만족도(CSAT)가 평균 0.5점 떨어집니다.”
이렇게 말하려면 **회귀분석(Regression)**이 필요합니다. 두 변수 간의 관계를 숫자(계수)로 표현해봅시다.
2. 데이터 준비
cs_tickets_dummy와 survey_cs_dummy를 조인하여 응답 시간과 만족도 점수의 관계를 봅니다.
BigQuery (SQL)
import seaborn as sns
from scipy import stats
import statsmodels.api as sm
# ... BigQuery client setup3. 상관분석 (Correlation)
먼저 두 변수가 관계가 있는지 봅니다.
❓ 문제 1: 첫 응답 시간과 CSAT의 상관계수
Q. 티켓의 first_response_time(시간 단위)과 설문의 csat_score 간의 피어슨 상관계수를 구하세요.
BigQuery + Python
Hint: TIMESTAMP_DIFF로 시간을 구하고 조인한 데이터를 가져와 Python에서 계산합니다.
(BigQuery의 CORR() 함수를 써도 되지만, 시각화를 위해 가져옵니다.)
정답 코드 보기
# 1. 데이터 추출
query = """
SELECT
TIMESTAMP_DIFF(t.first_response_at, t.opened_at, HOUR) as response_hours,
s.csat_score
FROM `your-project-id.retail_analytics_us.cs_tickets_dummy` t
JOIN `your-project-id.retail_analytics_us.survey_cs_dummy` s ON t.ticket_id = s.related_ticket_id
WHERE t.status = 'solved'
AND s.csat_score IS NOT NULL
"""
df = client.query(query).to_dataframe()
# 2. 상관계수 계산
corr, p_val = stats.pearsonr(df['response_hours'], df['csat_score'])
print(f"상관계수(r): {corr:.4f}")
print(f"P-value: {p_val:.4f}")
# 3. 시각화
sns.scatterplot(x=df['response_hours'], y=df['csat_score'], alpha=0.1)Error: name 'client' is not defined
💡 해석 가이드
- r 값 범위: -1 ~ 1
- -1에 가까울수록: 하나가 늘면 다른 하나는 줄어듦 (음의 상관관계)
- 0에 가까울수록: 관계가 없음
- 보통 이면 뚜렷한 관계, 이면 강한 관계로 봅니다.
4. 단순 선형 회귀 (Simple Linear Regression)
상관관계는 “관련 있다”만 말해주지만, 회귀분석은 “얼마나 영향을 주나”를 말해줍니다. (CSAT = 절편 + 계수 × 응답시간)
❓ 문제 2: 회귀 모델 적합
Q. statsmodels를 사용하여 csat_score를 종속변수(), response_hours를 독립변수()로 하는 선형 회귀 모델을 만드세요.
Python (Common)
정답 코드 보기
# X(설명변수)에 상수항(절편) 추가
X = sm.add_constant(df['response_hours'])
y = df['csat_score']
# 모델 적합
model = sm.OLS(y, X).fit()
# 결과 요약
print(model.summary())Error: name 'df' is not defined
💡 결과 해석 (OLS Summary)
- Coef (계수):
response_hours의 coef를 보세요.- 예: -0.05라면 → “응답이 1시간 늦을 때마다 만족도가 0.05점 떨어진다.”
- P>|t|: 계수의 유의성. 0.05보다 작아야 신뢰 가능.
- R-squared: 설명력. 이 모델이 데이터의 변동을 얼마나 설명하는가 (0~1).
5. 심화: 다중 회귀 (맛보기)
현실은 변수 하나만으로 설명되지 않습니다.
만족도에는 response_hours뿐만 아니라 priority, issue_type 등도 영향을 줍니다.
이걸 다 넣는 것이 **다중 회귀분석(Multiple Regression)**입니다.
(Project 1의 머신러닝 파트에서 더 자세히 다룹니다.)
💡 요약
- 상관분석: 관계의 강도와 방향 ()
- 회귀분석: 인과관계 추정 및 예측 ()
- 데이터 분석가의 무기: “그냥 관련 있어요”가 아니라 “1단위 변할 때 Y가 얼마 변합니다”라고 말할 수 있어야 합니다.
Project 2 완료! 축하합니다! 이제 여러분은 데이터를 탐색하고, 그 결과가 통계적으로 타당한지 검증할 수 있게 되었습니다. 다음 단계에서는 이 모든 데이터를 활용해 미래를 예측하는(AI/ML) 단계로 넘어갑니다.