2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 34일차

mingdoremi 2025. 6. 30. 20:59

안녕하세요 오늘은 본캠프 34일차입니다!

요즘 날씨가 너무 덥네요 🥵

 

오늘의 베이직 문제!

1번. 두 도시의 월별 평균 기온 비교

다음 두 도시의 월별 평균 기온 데이터를 사용하여 하나의 그래프에 두 개의 선 그래프를 그려 두 도시의 기온 변화 추이를 비교하고 출력하세요. (x축: 월, y축: 기온, 각 도시별 라벨 명시)

import matplotlib.pyplot as plt
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
city_a_temps = [5, 7, 12, 18, 23]
city_b_temps = [3, 6, 10, 15, 20]

import matplotlib.pyplot as plt

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
city_a_temps = [5, 7, 12, 18, 23]
city_b_temps = [3, 6, 10, 15, 20]

plt.plot(months, city_a_temps, marker='o', label='City A')
plt.plot(months, city_b_temps, marker='o', label='City B')

plt.title('Monthly Average Temperature Comparison')
plt.xlabel('Month')
plt.ylabel('Temperature (°C)')
plt.legend()
plt.grid(True)

plt.show()

 

2번. 두 제품의 연도별 판매량

다음 두 제품의 연도별 판매량 데이터를 사용하여 하나의 그래프에 두 개의 선 그래프를 그려 각 제품의 판매량 추이를 비교하고 출력하세요

import matplotlib.pyplot as plt
years = [2020, 2021, 2022, 2023]
product1_sales = [100, 120, 150, 130]
product2_sales = [80, 110, 130, 160]

import matplotlib.pyplot as plt

years = [2020, 2021, 2022, 2023]
product1_sales = [100, 120, 150, 130]
product2_sales = [80, 110, 130, 160]

plt.plot(years, product1_sales, marker='o', label='Product 1')
plt.plot(years, product2_sales, marker='o', label='Product 2')

plt.title('Annual Sales Comparison')
plt.xlabel('Year')
plt.ylabel('Sales Volume')
plt.legend()
plt.grid(True)

plt.show()

 

3번. 세 학생의 과목별 점수 비교

다음 세 학생의 과목별 점수 데이터를 사용하여 하나의 그래프에 세 개의 선 그래프를 그려 각 학생의 점수 분포를 비교하고 출력하세요.

import matplotlib.pyplot as plt
subjects = ['Math', 'Science', 'English', 'History']
student1_scores = [90, 85, 78, 88]
student2_scores = [75, 88, 92, 80]
student3_scores = [80, 70, 85, 95]

import matplotlib.pyplot as plt

subjects = ['Math', 'Science', 'English', 'History']
student1_scores = [90, 85, 78, 88]
student2_scores = [75, 88, 92, 80]
student3_scores = [80, 70, 85, 95]

plt.plot(subjects, student1_scores, marker='o', label='Student1')
plt.plot(subjects, student2_scores, marker='o', label='Student2')
plt.plot(subjects, student3_scores, marker='o', label='Student3')

plt.title('Student Score Comparison by Subject')
plt.xlabel('Subject')
plt.ylabel('Score')
plt.legend()
plt.grid(True)

plt.show()

 

챌린지 문제!

1번. 저항기 평균 저항값에 대한 단측 가설 검정

 

'전자 부품 생산' 공장에서 생산된 저항기의 실제 저항값이 목표값 100 옴에 미치는지 여부를 통계적으로 확인하고자 합니다. 과거 데이터에 따르면 모표준편차는 2.5 옴으로 알려져 있습니다. 최근 생산된 저항기 40개를 무작위로 추출하여 저항값을 측정했습니다. 표본 평균은 99.2 옴으로 나타났습니다. 이 저항기가 목표값 100 옴에 비해 유의미하게 낮은지 유의수준 alpha=0.05에서 검정하고자 합니다.

위 시나리오에 대한 가설 검정 설명으로 가장 적절한 것은?

 

A. 이 검정은 t-검정을 사용해야 하며, 귀무가설은 "저항기의 평균 저항값 >=100 옴"이다.

B. 이 검정은 단측 검정이며, 만약 검정 통계량의 p-value가 0.06으로 나왔다면, 귀무가설을 기각하고 "저항기의 평균 저항값이 100 옴보다 유의미하게 낮다"고 결론 내릴 수 있다.

C. 이 시나리오에서 1종 오류(Type I Error)가 발생한다면, 이는 실제로 저항기의 평균 저항값이 100 옴보다 유의미하게 낮음에도 불구하고, 차이가 없다고 잘못 결론 내리는 상황이다.

D. 이 검정은 Z-검정을 사용해야 하며, 2종 오류(Type II Error)는 실제로 저항기의 평균 저항값이 100 옴과 같거나 그보다 크지만, 100 옴보다 유의미하게 낮다고 잘못 결론 내리는 상황이다.

 

해설

❌ A (오답): 배터리 충전 효율 시나리오에서는 모표준편차(1.2%)가 알려져 있고 표본 크기가 60(≥30)으로 충분히 크므로 Z-검정을 사용합니다. 새로운 양극재가 효율을 높였는지 보는 것이므로 단측 검정이며, 귀무가설은 "새로운 양극재의 평균 충전 효율 <=92.0" (효과 없거나 더 나쁨)로 설정합니다.

B (오답): p-value 0.06은 유의수준 alpha=0.05보다 크므로 귀무가설을 기각할 수 없습니다. 따라서 "저항기의 평균 저항값이 100 옴보다 유의미하게 낮다"는 결론을 내릴 수 없습니다.

C (오답): 1종 오류는 귀무가설이 실제로는 참인데 이를 기각하는 오류를 의미합니다. 즉, 이 시나리오에서는 "실제로 저항기의 평균 저항값이 100 옴과 같거나 그보다 크지만, 100 옴보다 유의미하게 낮다고 잘못 결론 내리는 상황"입니다. 제시된 설명은 실제로는 대립가설이 참인데 귀무가설을 채택하는 2종 오류에 해당합니다.

⭕️ D (정답): 모표준편차(2.5 옴)가 알려져 있고 표본 크기가 40(≥30)으로 충분히 크므로 Z-검정을 사용해야 합니다. 2종 오류는 실제로 귀무가설이 참인데 이를 채택하는 오류입니다. 이 시나리오에서 귀무가설(H0​)은 '저항기의 평균 저항값이 100 옴보다 크거나 같다' 이므로, 2종 오류는 "실제로 저항기의 평균 저항값이 100 옴과 같거나 그보다 크지만, 통계적으로는 100 옴보다 유의미하게 낮다고 잘못 결론 내리는 상황"이 됩니다. 이는 정확한 설명입니다.

 

2번. 정규성 위반 하에서 신규 촉매제 수율 변화에 대한 평균 차이 검정

'화학 제품 제조사'는 신규 촉매제가 제품 생산 수율에 미치는 영향을 평가합니다. 신규 촉매제를 적용한 생산 배치 15개에서 얻은 수율 데이터가 다음과 같습니다:
[88.5, 90.1, 87.9, 89.2, 91.0, 88.0, 89.5, 90.5, 87.5, 88.8, 90.0, 89.0, 91.2, 88.3, 89.8].
기존 촉매제의 평균 수율은 88.0%였으며, 모표준편차는 알려져 있지 않습니다. 신규 촉매제가 수율을 88.0%와 다르게 만드는지 유의수준 alpha=0.01에서 확인하고자 합니다. 추가로, 이 데이터에 대해 정규성 검정(Shapiro-Wilk Test)을 수행한 결과, p-value가 0.004로 나타났습니다.
위 시나리오에 대한 가설 검정 및 정규성 검정의 설명으로 가장 적절한 것은?

 

A. 이 검정은 모표준편차를 모르고 표본 크기가 작으므로 독립표본 t-검정을 사용해야 한다.

B. Shapiro-Wilk 검정 결과(p-value=0.004)에 따르면, 유의수준 alpha=0.01에서 데이터의 정규성 가정을 기각하므로 t-검정 대신 비모수 검정을 고려해야 한다.

C. 만약 이 검정에서 유의수준 alpha=0.01에서 p-value가 0.008로 나왔다면, 이는 귀무가설을 채택하고 "새로운 촉매제가 수율에 유의미한 변화를 주지 않았다"고 결론 내릴 수 있다.

D. 대립가설은 "새로운 촉매제의 평균 수율 88.0"이며, 이는 단측 검정에 해당한다.

 

해설

❌ A (오답): 모표준편차가 알려져 있지 않고 표본 크기가 15(<30)로 작으므로 단일표본 t-검정을 사용해야 합니다. 독립표본 t-검정은 두 독립적인 그룹의 평균을 비교할 때 사용됩니다.

⭕️ B (정답): Shapiro-Wilk 검정의 귀무가설은 "데이터가 정규분포를 따른다"입니다. p-value 0.004는 유의수준 alpha=0.01보다 작으므로 귀무가설을 기각합니다. 즉, "데이터가 정규분포를 따르지 않는다"고 판단하므로, t-검정의 정규성 가정이 위배되어 비모수 검정(예: Wilcoxon Signed-Rank Test)을 고려하는 것이 적절합니다.

❌ C (오답): 유의수준 alpha=0.01에서 p-value 0.008은 alpha보다 작으므로, 귀무가설을 기각해야 합니다. 따라서 "새로운 촉매제가 수율에 유의미한 변화를 주지 않았다"고 결론 내리는 것이 아니라 "새로운 촉매제가 수율에 유의미한 변화를 주었다"고 결론 내릴 수 있습니다.

❌ D (오답): "수율을 88.0%와 다르게 만드는지"를 확인하는 것이므로 대립가설은 "새로운 촉매제의 평균 수율 !=88.0"인 양측 검정입니다.

 

 
그리고 머신러닝 주요기법 세션을 들었습니다!
 
회귀 vs 분류 : 무엇이 다를까?
 
회귀(Regression): "얼마나?"의 문제
  • 집값 예측: 3억 2천만원
  • 주식 가격 예측: 52,300원
  • 기온 예측: 23.5도

분류(Classification): "무엇인가?"의 문제

  • 이메일 분류: 스팸 vs 정상
  • 의료 진단: 양성 vs 음성
  • 고객 분류: 구매 vs 비구매

핵심 차이점은 예측하려는 값의 종류입니다!

 

분류 문제의 다양한 유형

1. 이진 분류 (Binary Classification)

  • 특징: 2개의 클래스 중 하나를 선택
  • 출력: 0 또는 1, Yes 또는 No
  • 예시:
    • 의료 분야: 암 진단 (양성/음성), 응급환자 분류 (응급/일반)
    • 금융 분야: 대출 승인 (승인/거절), 신용카드 사기 탐지 (정상/사기)
    • 마케팅: 구매 예측 (구매/비구매), 이탈 고객 예측 (이탈/유지)
    • IT 보안: 악성코드 탐지 (정상/악성), 스팸 메일 필터링 (정상/스팸)

2. 다중 분류 (Multi-class Classification)

  • 특징: 3개 이상의 클래스 중 하나를 선택
  • 출력: 여러 범주 중 정확히 하나
  • 예시:
    • 제조업: 제품 불량 유형 분류 (정상/스크래치/변형/파손)
    • 소매업: 고객 등급 분류 (VIP/골드/실버/브론즈)
    • 교통: 교통수단 선택 예측 (도보/자전거/버스/지하철/자동차)
    • 콘텐츠: 뉴스 기사 분류 (정치/경제/사회/문화/스포츠)

로지스틱 회귀 분석이란?

로지스틱 회귀는 점들을 가장 잘 나누는 S자 곡선을 찾아 예/아니오를 판별하는 모델!!

로지스틱 회귀는 종속변수가 범주형(0, 1)일 때 사용하는 회귀분석 방법입니다. 선형회귀의 한계를 극복하고 확률을 예측할 수 있는 강력한 분류 알고리즘입니다. X가 연속형 변수이고, Y가 특정 값이 될 확률이라고 설정한다면, 왼쪽 그림과 같이 선형으로 설명하긴 쉽지 않아 보입니다. 확률은 0과 1사이 인데, 예측 값이 확률 범위를 넘어갈 수 있는 문제가 있죠.

오른쪽 그림처럼 S자 형태의 함수를 적용하면 잘 설명한다

왜 선형회귀로는 분류가 안될까?

확률은 0과 1 사이 값이어야 하는데, 직선 함수는 이 제약을 만족할 수 없습니다.

선형회귀로 이를 예측하면:

  • 공부시간이 매우 적을 때: 확률이 음수가 될 수 있음 ❌
  • 공부시간이 매우 많을 때: 확률이 1을 초과할 수 있음 ❌

로지스틱회귀의 해결책:

  • 시그모이드 함수 사용으로 항상 0~1 사이 값 보장 ✅
  • S자 곡선 형태로 자연스러운 확률 변화 표현 ✅

로지스틱 회귀 분석의 원리

어떤 일이 일어날 가능성을 0 ~ 1 사이 숫자로 표현한다! 로지스틱 회귀의 핵심은 3단계 변환 과정을 이해하는 것입니다. 확률 → 오즈비 → 로짓 → 선형식 순으로 변환됩니다.

 

1단계: 오즈비(Odds Ratio) 이해

이기면 몇 번, 지면 몇 번인지 비율로 바꿔 싸움의 기울기를 본다.

오즈비는 실패확률 대비 성공확률의 비율입니다.

도박사들이 자주 쓰는 개념입니다. 예를 들어 도박이 성공할 확률이 80% 라면, 오즈비는 80%/20% = 4 예요. 다시 해석해보면 1번 실패하면 4번은 딴다는 소리입니다.

 

2단계: 로짓(Logit) 변환

기울기가 너무 가파르니 ‘로그’로 완만하게 펴서 직선처럼 만든다.

하지만 오즈비는 바로 쓸 수 없어요. P는 확률 값으로 0,1사이 값인데, P가 증가할수록 오즈비가 급격하게 증가하기 때문에 너무 확률이 급격하게 증가하고 선형성을 따르지 않게 됩니다. 따라서 로그를 씌워 이 부분을 좀 완화하기로 한다.

로짓 변환의 장점

  • 확률 50% = 로짓 0 (기준점이 명확함)
  • 확률 증가에 따른 완만한 변화
  • 선형회귀 공식에 바로 적용 가능
  • 오즈비와 확률의 관계 / 로짓과 확률의 관계
    • 로짓의 그래프가 더 선형적인 그림을 나타내어 선형회귀의 기본식을 활용할 수 있게 됨
    • 로지스틱”회귀”라고 불리는 이유가 이것

3단계: 로지스틱 함수

로짓을 다시 확률로 변환하는 역함수입니다. → 위의 로짓 함수를 X-Y 축 교체한 것

어떤 실수값이라도 0과 1 사이의 확률로 변환해줍니다.

위 그래프의 확률 - 로짓 그래프 X-Y축을 교체

분류 모델의 평가 지표

혼동행렬(Confusion Matrix) - 분류 성능의 모든 것

혼동행렬은 분류 모델의 성능을 한눈에 볼 수 있는 가장 기본적이고 중요한 도구입니다. 실제값과 예측값의 모든 조합을 표로 나타내어 모델이 어떤 실수를 하는지 정확히 파악할 수 있습니다.

  • 표기법
    • 실제와 예측이 같으면 True / 다르면 False
    • 예측을 양성으로 했으면 Positive / 음성으로 했으면 Negative
  • 해석
    • TP: 실제로 양성(암 환자)이면서 양성(암 환자) 올바르게 분류된 수
    • FP: 실제로 음성(정상인)이지만 양성(암 환자)로 잘못 분류된 수
    • FN: 실제로 양성(암 환자)이지만 음성(정상인)로 잘못 분류된 수
    • TN: 실제로 음성(정상인)이면서 음성(정상인)로 올바르게 분류된 수
  • 지표
    1. 정밀도(Precision): 모델이 양성 1로 예측한 결과 중 실제 양성의 비율(모델의 관점)
      • 거짓 양성(False Positive) 비용이 높을 때
      • 확실한 케이스만 양성으로 분류하고 싶을 때
      • 내가 양성이라고 한 것 중에 진짜 양성은 몇 개?

"틀린 답을 말하는 것이 매우 큰 손실로 이어질 때”

스팸 메일 필터가 일반 메일을 스팸으로 잘못 분류하여 중요한 업무 메일이나 개인적인 연락을 놓치게 되는 상황을 상상해 보세요.

  • 문제점: 만약 스팸 필터의 정밀도가 낮다면, 수많은 정상 메일이 스팸함으로 들어가 사용자에게 큰 불편을 주거나 심각한 정보 손실을 야기할 수 있습니다. 예를 들어, 중요한 계약서나 자녀의 학교 통지문을 받지 못하게 될 수 있습니다.
  • 정밀도의 중요성: 이 경우, 스팸 필터는 "**스팸이라고 판단한 메일은 정말로 스팸이어야 한다"**는 기준이 중요합니다. 즉, 긍정으로 예측한 것(스팸) 중 실제 긍정(실제 스팸)의 비율인 정밀도가 매우 높아야 합니다. 소수의 스팸 메일을 놓치더라도(재현율이 다소 낮더라도), 정상 메일이 스팸으로 분류되는 오류(낮은 정밀도)를 최소화하는 것이 훨씬 중요합니다. 사용자는 스팸함에 들어간 소수의 스팸을 직접 삭제하는 불편함보다 중요한 메일을 놓치는 손실을 더 크게 여길 것입니다.

정밀도 (precision) = TP/TP+FP

 

재현율(Recall): 실제 값이 양성인 데이터 중 모델이 양성으로 예측한 비율(데이터의 관점)

  • 거짓 음성(False Negative) 비용이 높을 때
  • 양성 케이스를 놓치면 안 될 때

"실제로 '그렇다'인 것을 놓치는 것이 매우 큰 손실로 이어질 때”

암 진단 시스템이 환자의 의료 영상을 분석하여 암 여부를 판단하는 상황을 생각해 보세요.

  • 문제점: 만약 이 시스템의 재현율이 낮다면, 실제로 암에 걸린 환자를 "암이 아니다"라고 잘못 진단하여 치료 시기를 놓치게 할 수 있습니다. 이는 환자의 생명과 직결되는 매우 심각한 결과를 초래합니다.
  • 재현율의 중요성: 이 경우, 암 진단 시스템은 "**암 환자는 절대로 놓치지 않고 찾아내야 한다"**는 기준이 중요합니다. 즉, 실제 긍정(실제 암 환자) 중 예측 긍정(암이라고 진단)의 비율인 재현율이 매우 높아야 합니다. 시스템이 일부 암이 아닌 사람을 암으로 오진하더라도(정밀도가 다소 낮더라도, 추가 검사를 통해 걸러낼 수 있으므로), 실제 암 환자를 놓치는 것(낮은 재현율)은 용납할 수 없는 상황입니다. 의료진은 오진으로 인한 추가 검사 부담보다 암 환자를 조기에 발견하는 것을 훨씬 중요하게 생각합니다.

재현율(recall) =  TP/TP+FN

 

f1-Score: 정밀도와 재현율의 조화 평균

  • 정밀도와 재현율 모두 중요할 때
  • 불균형 데이터에서 전반적인 성능 평가
  • 단일 지표로 모델 성능을 요약하고 싶을 때
  • f1-Score = 2 * 정밀도 * 재현율 /정밀도 + 재현율

정확도(Accuracy)

  • 클래스가 균형잡힌 데이터에서 주로 사용
  • 전반적인 모델 성능의 첫 번째 지표
  • 주의: 불균형 데이터에서는 misleading할 수 있음!
  • 정확도(accuracy) = (tp + tn) / (tp + tn + fp + fn)

ROC 커브와 AUC - 임계값에 무관한 성능 평가

ROC 커브는 모든 임계값에서의 모델 성능을 한눈에 보여주는 강력한 시각화 도구입니다. 단일 임계값에 의존하지 않고 모델의 전반적인 분류 능력을 평가할 수 있습니다.

ROC 커브의 핵심 개념

ROC (Receiver Operating Characteristic) 커브

  • X축: False Positive Rate (FPR) = FP / (FP + TN)
    • "실제 음성인 것들 중에서 모델이 양성이라고 잘못 예측한 비율"을 의미합니다.
  • Y축: True Positive Rate (TPR) = TP / (TP + FN) = Recall
    • 실제 양성인 것들 중에서 모델이 양성이라고 올바르게 예측한 비율"을 의미합니다.

임계값을 바꿔가며 점들의 연결

  • ROC 커브는 다양한 임계값에 따라 달라지는 TPR과 FPR 값을 그래프에 점으로 찍어서 연결한 선입니다.
  • 우리 모델은 어떤 대상을 '양성'으로 판단할 때 기준이 되는 확률 임계값을 가지고 있습니다. 예를 들어, "확률이 0.5보다 높으면 양성, 아니면 음성"이라고 정할 수 있죠. 이 임계값을 0.3, 0.4, 0.5, 0.6, 0.7 등으로 바꿔가면서 TPR과 FPR이 어떻게 변하는지 살펴볼 수 있습니다

이상적인 ROC 커브

  • 왼쪽 상단 모서리에 가까울수록 좋은 모델
  • 대각선(랜덤 예측)보다 위쪽에 있어야 함

ROC 커브가 중요한 이유

  1. 임계값 독립적: 다양한 임계값에서의 성능을 모두 고려
  2. 모델 비교 용이: 여러 모델의 성능을 한 그래프에서 비교 가능
  3. 비즈니스 의사결정: TPR과 FPR 트레이드오프를 고려한 임계값 선택

 

 

오늘도 수고하셨습니다!!!!