Skip to Content

03. 상관분석과 회귀분석 (Correlation & Regression)

중급2시간

1. 개요 및 시나리오

상황: “배송이 늦으면 고객이 얼마나 화낼까요?” 직관적으로는 “많이 화낸다”고 알지만, 비즈니스에서는 숫자가 필요합니다.

“배송이 1일 늦어질 때마다 고객 만족도(CSAT)가 평균 0.5점 떨어집니다.”

이렇게 말하려면 **회귀분석(Regression)**이 필요합니다. 두 변수 간의 관계를 숫자(계수)로 표현해봅시다.


2. 데이터 준비

cs_tickets_dummysurvey_cs_dummy를 조인하여 응답 시간만족도 점수의 관계를 봅니다.

import seaborn as sns from scipy import stats import statsmodels.api as sm # ... BigQuery client setup

3. 상관분석 (Correlation)

먼저 두 변수가 관계가 있는지 봅니다.

❓ 문제 1: 첫 응답 시간과 CSAT의 상관계수

Q. 티켓의 first_response_time(시간 단위)과 설문의 csat_score 간의 피어슨 상관계수를 구하세요.

💡

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에 가까울수록: 관계가 없음
  • 보통 r>0.3|r| > 0.3이면 뚜렷한 관계, >0.7> 0.7이면 강한 관계로 봅니다.

4. 단순 선형 회귀 (Simple Linear Regression)

상관관계는 “관련 있다”만 말해주지만, 회귀분석은 “얼마나 영향을 주나”를 말해줍니다. y=β0+β1xy = \beta_0 + \beta_1 x (CSAT = 절편 + 계수 × 응답시간)

❓ 문제 2: 회귀 모델 적합

Q. statsmodels를 사용하여 csat_score를 종속변수(yy), response_hours를 독립변수(xx)로 하는 선형 회귀 모델을 만드세요.

정답 코드 보기

# 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)

  1. Coef (계수): response_hours의 coef를 보세요.
    • 예: -0.05라면 → “응답이 1시간 늦을 때마다 만족도가 0.05점 떨어진다.”
  2. P>|t|: 계수의 유의성. 0.05보다 작아야 신뢰 가능.
  3. R-squared: 설명력. 이 모델이 데이터의 변동을 얼마나 설명하는가 (0~1).

5. 심화: 다중 회귀 (맛보기)

현실은 변수 하나만으로 설명되지 않습니다. 만족도에는 response_hours뿐만 아니라 priority, issue_type 등도 영향을 줍니다. 이걸 다 넣는 것이 **다중 회귀분석(Multiple Regression)**입니다.

(Project 1의 머신러닝 파트에서 더 자세히 다룹니다.)


💡 요약

  • 상관분석: 관계의 강도와 방향 (rr)
  • 회귀분석: 인과관계 추정 및 예측 (y=ax+by = ax + b)
  • 데이터 분석가의 무기: “그냥 관련 있어요”가 아니라 “1단위 변할 때 Y가 얼마 변합니다”라고 말할 수 있어야 합니다.

Project 2 완료! 축하합니다! 이제 여러분은 데이터를 탐색하고, 그 결과가 통계적으로 타당한지 검증할 수 있게 되었습니다. 다음 단계에서는 이 모든 데이터를 활용해 미래를 예측하는(AI/ML) 단계로 넘어갑니다.

Last updated on

🤖AI 모의면접실전처럼 연습하기