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 성능으로 데이터/문제 어느 쪽이 문제인지 진단 가능
'Today I Learned' 카테고리의 다른 글
| [내일배움캠프 QA/QC 6기] TIL #031 (0) | 2026.06.24 |
|---|---|
| [내일배움캠프 QA/QC 6기] TIL #030 (0) | 2026.06.23 |
| [내일배움캠프 QA/QC 6기] TIL #028 (0) | 2026.06.19 |
| [내일배움캠프 QA/QC 6기] TIL #027 (1) | 2026.06.18 |
| [내일배움캠프 QA/QC 6기] TIL #026 데이터 분석 심화 주차 start (0) | 2026.06.17 |