Today I Learned

[내일배움캠프 QA/QC 6기] TIL #029

JiJi0406 2026. 6. 22. 21:08

001

오늘의 코드카타

39. 최대공약수와 최소공배수

 

문제 설명

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

 

제한조건

  • 두 수는 1이상 1000000이하의 자연수입니다.

 

입출력 예

n m return
3 12 [3, 12]
2 5 [1, 10]

 

더보기
def solution(n, m):
    for i in range(min(n, m),0,-1):
        if n % i == 0 and m % i == 0: # 최대공약수는 두 수를 나눴을 때 나머지가 0이 되는 공통적인 수
            break # 찾으면 반복문 멈춤! 완전 초반에 배웠던 걸 이제야 써보네
    return [i, (n*m)/i] # 최소공배수 공식은 검색해서 찾음...ㅎㅎ

 


 


002

오늘 학습한 내용

데이터 분석 심화 주차 D+4

 

[ 기초 통계 ] 

 

1. 정규성 검정

대부분의 통계 검정(t-test, ANOVA 등)은 데이터가 정규분포를 따른다는 전제로 돌아감
→ 검정 전에 먼저 정규성 검정으로 확인해야 함

 

Shapiro-Wilk Test
가장 널리 쓰는 정규성 검정 방법

  • 귀무가설: 데이터가 정규분포를 따른다

 

Q-Q 플롯


데이터가 정규분포를 따르는지 시각적으로 확인하는 방법

  • 점들이 직선에 가까우면 정규성 만족
  • 선에서 멀리 떨어진 점 많으면 정규성 불만족

 

검정 이름만 알고 언제 쓰는지 모르면 의미 없음! 프로젝트할 때 플로우차트 보고 찾아가는 연습 필요함

 

 

2. 비모수 검정

정규성 깨졌거나, 데이터 수 적거나, 순위형 자료(등급/만족도 등)일 때 씀

명칭 다 외울 필요 x 
→ 평균 대신 순위(rank) 기반 비교

 

① 종류

  • Mann-Whitney U Test : 독립 2집단 → mannwhitneyu()
  • Wilcoxon Test : 대응 2집단(사전-사후 변화 등등..) → wilcoxon()
  • Kruskal-Wallis Test : 독립 3집단 이상 → kruskal()
  • Chi-square Test : 범주형 독립성 (ex. 나이에 따른 과목 선호 차이...) → chi2_contingency()

p < 0.05면 집단 간 차이 통계적으로 유의미

 

 

3. 분산분석(ANOVA) 

3개 이상 집단 평균 차이를 검증하는 기법
t-검정을 여러 번 하면 1종 오류가 누적 → ANOVA는 한 번에 검증해서 이 문제 방지

- 기본 가정(각 그룹): 정규성, 등분산성, 독립성

 

F-값
F = 집단 간 분산 / 집단 내 분산
F값 클수록 그룹 간 차이가 유의함

 

일원 분산분석 (One-Way ANOVA)
독립변수 1개(범주형) → 종속변수 1개(연속형) (영향 분석)

 

ⓐ 예시
작업 교대조별로 불량률간 차이가 있을까?

  • p < 0.05 → 적어도 한 곳 평균 불량 건수 다름 (대립가설 만족)
  • p ≥ 0.05 → 유의한 차이 없음 (귀무가설 만족)

 

4. 사후 분석 (Post-Hoc) 

ANOVA에서 "차이 있다"는 결론은 나왔어도 어느 그룹끼리 다른지는 안 알려줌추가 검정 필요!

 

① 방법
Tukey's HSD : 모든 그룹 쌍 비교, 표본 크기 비슷할 때 가장 일반적
(나머지는 그냥 읽고 넘어감... 상황별로 1종 오류 통제 방식이 다르다 정도만 알아두기)

 

② 분석 경로

  • 모수: ANOVA → (유의하면) → Tukey's HSD
  • 비모수: Kruskal-Wallis → (유의하면) → Dunn's Test

③ ANOVA 전제 조건

  • 정규성
  • 등분산성(Levene's test)
  • 독립성
    → 안 맞으면 Kruskal-Wallis로

ⓐ 제조업 예시 - 실제 분석 흐름

신형 의료용 레이저 기기 vs 기존 기기 성능 비교
  • 상황: 새로 개발한 의료기기(신형 A, 신형 B)와 기존에 쓰던 제품(기존 C) 등 총 3개 기기의 '~ 개선율' 평균에 차이가 있는지 ANOVA를 돌림 → 결과: p < 0.05 (세 기기 간 성능 차이 있음!)
  • 사후 분석 결과 예시 (Tukey 검정 수행):
    • 신형 A vs 기존 C: p < 0.05 → 신형 A가 기존 제품보다 개선율이 유의하게 높음! 
    • 신형 B vs 기존 C: p >= 0.05 → 신형 B는 기존 제품과 차이가 없음
    • 신형 A vs 신형 B: p < 0.05 → 신형 A가 B보다도 성능이 우수함
    • 결론: "우리 회사 신형 기기 중 A 모델이 기존 제품 및 B 모델보다 통계적으로 유의미하게 성능이 뛰어납니다"

 

 

 

5. 상관계수와 상관관계 분석

상관계수
공분산을 정규화한 값(-1~+1), 단위 영향 없어서 해석 쉬움

  • +1 가까움 → 양의 선형관계
  • -1 가까움 → 음의 선형관계
  • 0 → 관계 없음

종류

  • 피어슨(Pearson) : 연속형 변수, 정규성 가정 (예: 온도-결함률) → 모수 검정에서 가장 일반적으로 씀, 파이썬 히트맵 기본값도 이거
  • 스피어만, 켄달 타우는 서열형/소규모 데이터용 (자세히 몰라도 됨)

상관관계 ≠ 인과관계 ★
(예: 아이스크림 판매량과 익사사고 둘 다 여름에 증가 → 상관은 있지만 인과 아님)
상관계수만 보고 원인-결과 단정하면 X

(인과추론 관련해서 A/B테스트, DiD, RDD, 도구변수법 같은 방법론들도 나왔는데 이건 나중에 필요할 때 다시 찾아보기로)

 

6. 회귀 분석

① 단순 선형회귀


Y = β₀ + β₁X + ε

  • β₀(절편): X=0일 때 Y값
  • β₁(기울기): X 1 증가할 때 Y 변화량
  • R²(결정계수): 모형 설명력 (0~1)

② 다중 회귀분석
독립변수 2개 이상

 

③ 다중공선성(Multicollinearity) 
독립변수들끼리 상관 강하면 회귀계수 신뢰성↓ → VIF로 진단

  • VIF 10 이상이면 심각, 제거 검토

④ 다중공선성 해결법 3가지

  • 변수 정규화(스케일링) : 단위 맞춤, 근본 해결은 x
  • 변수 제거 : VIF 높은 변수 탈락, 정보 손실 리스크 있음
  • PCA(머신러닝-비지도학습)로 차원 축소 : 다중공선성 원천 차단, 제일 깔끔한 방법인듯?

 

[ 머신러닝 기초 ]

 

1. Feature Importance

Feature Importance

  • 모델이 의사결정할 때 어떤 변수를 가장 중요하게 봤는지 순위를 매기는 것
  • "정확도 95%인 건 알겠는데 모델이 뭘 보고 판단했냐"는 질문에 답하려고 필요함 → 결과만큼 판단 이유도 중요함!!
  • 중요도 0인 변수는 과감히 제거해서 모델 경량화 + 과적합 방지도 가능

산출 원리

  • 선형 모델은 회귀계수 크기로 중요도 판단 (회귀계수 클수록 중요)
  • 트리 기반 모델(Random Forest...)은 불순도 감소 기준 → 어떤 변수로 나눴을 때 정상/이상이 확실하게 갈리는지로 판단 (예: 습도 기준 분할은 여전히 섞임 → 낮은 중요도 / 압력 기준 분할은 완벽히 분리 → 높은 중요도)

⚠️ 주의사항 

  • Feature Importance는 그 변수가 결과와 연관 있다는 것만 보여줄 뿐, 인과관계를 보장하지 않음
  • 힌트로만 쓰고, 실제 조치는 현장 분석 + 도메인 전문가 교차검증 필수

 


이론 X
앞으로 프로젝트할 때 도움이 될 내용들 정리! 

 

 

- ML 프로젝트... 어떻게 접근하지

스케이트보드 전략 (Agile & AI 방식)

  • 이론 다 끝내고 시작하는 Waterfall 방식 대신, 일단 실행 가능한 가장 단순한 결과물부터 만들어보자~
  • "이론 완벽히 끝내고 시작" → 끝이 안 보임.
  • "CSV 불러서 그래프 하나만 그려보자, 모르는 문법은 그때그때 검색" → 결과물이 바로 나옴

AI 튜닝 전략

  • 일단 결과 만들고, 에러 나면 그때 이론 찾아봄 (사후 분석)
  • 이렇게 학습한 이론이 뇌에 더 강하게 박힘

- 프로젝트 협업/관리 가이드

협업 셋팅

  • 팀 공유 드라이브에 폴더 만들고 data/notebooks 폴더 구분, 팀원 편집자 권한 부여
  • 동시 수정 충돌 막으려면 파일명에 이름 적어서 나눠 작업! (예: 01_preprocessing_이름.ipynb)

프로젝트 관리

  • 마일스톤 단위로 진척률 가시화 (예: 데이터셋 확보 20% → 전처리 40% → 베이스라인 모델 70% → 최종 보고서 100%)

 


[ 머신러닝 심화 ]

* 머신러닝 프로세스 (1)

 

1. 머신러닝 학습 과정

학습 (Training)

  • 모델이 데이터 사이의 규칙을 스스로 찾아가는 단계
  • Loss Function(손실 함수)으로 예측값과 실제값 차이를 수치화함 (예: RMSE, MAE) → 오차가 작을수록 모델 성능 good
  • Gradient Descent(경사 하강법)로 오차를 줄이는 방향을 찾아 파라미터를 조금씩 업데이트

특성 공학 (Feature Engineering)

  • 모델이 잘 학습하도록 데이터를 가공하는 작업
  • 스케일링: 온도(20~30)와 압력(1000~2000)처럼 단위 차이 크면 모델이 숫자 큰 쪽을 더 중요하게 착각함 → Min-Max나 표준화로 범위 맞춰줌

튜닝 (Tuning) 

  • 모델이 학습 잘하도록 환경을 설정해주는 단계, 하이퍼파라미터(사람이 직접 정하는 설정값)를 조정하는 과정
  • Grid Search: 후보 값들 격자로 미리 정해놓고 하나씩 다 대입해서 최적의 조합 찾기 → 현장에서 열처리 온도/압력 조합 다 실험해보고 불량률 가장 낮은 조건 찾는 거랑 똑같은 개념

2. 과적합(Overfitting)

과적합이 생기는 이유?

  • 학습 데이터가 부족하면 다양한 패턴을 못 배움
  • 모델이 너무 복잡하면 작은 데이터 변화에도 과하게 반응
  • 너무 오래 학습하면 데이터를 이해하는 게 아니라 외워버림

방지 방법

  • 규제(L1/Lasso는 중요하지 않은 가중치를 0으로, L2/Ridge는 가중치를 전체적으로 작게) → 모델을 다이어트시킴
  • 교차검증(K-Fold)으로 특정 데이터 조각에만 강한 모델이 되는 걸 막음

3. Baseline 모델 ⭐중요

- 처음부터 100점 맞으려고 ㄴㄴ 빠르게 60점짜리 Baseline 만들고, 1점씩 올려가는 과정 필요!!

왜 만듦?

  • 비교 기준점이 있어야 새 모델이 얼마나 좋아졌는지 알 수 있음! (예: "단순 모델보다 5% 올랐으니 복잡한 모델 쓸 가치 있다")
  • 처음부터 어려운 모델에 매달리면 마감 직전까지 결과물이 안 나올 위험 있음 → Baseline부터 빠르게 돌려서 전체 파이프라인작동 확인
  • Baseline 성능으로 데이터/문제 어느 쪽이 문제인지 진단 가능