스파르타클럽 내일배움캠프 QA/QC 5기 04/14 TIL
2026. 4. 14. 20:18ㆍ내일배움캠프 TIL
오늘은 머신러닝의 이해와 라이브러리 활용 기초 1-3까지와 통계학 기초 2챕터를 들었다.
머신러닝의 이해와 라이브러리 활용 기초
머신러닝이란?
머신러닝 관련 용어 정리
- AI(인공지능): 인간의 지능을 요구하는 업무를 수행하기 위한 시스템
- Machine Learning(머신러닝): 관측된 패턴을 기반으로 의사결정을 하기 위한 알고리즘
- Deep Learning(딥러닝): 인공신경망을 이용한 머신러닝
- Data Science: AI를 포괄하여 통계학과 컴퓨터공학을 바탕으로 발전한 융합학문
- Data Analysis: 데이터 집계, 통계 분석, 머신러닝을 포함한 행위
- 포함관계: AI ⊃ 머신러닝 ⊃ 딥러닝
머신러닝의 정의
머신러닝은 기술 통계 등을 통해 집계된 정보로 의사결정을 하던 과거와 달리, 데이터 수집·처리 기술의 발전으로 대용량 데이터의 패턴을 인식하고 이를 바탕으로 예측·분류하는 방법론이다.
머신러닝이 발전한 이유
- 인간은 데이터를 기반으로 한 의사결정을 내리고 싶어한다.
- 통계: 모집단의 성질을 표본집단으로부터 알기 위한 추론 방법
- 데이터 처리 기술의 발전(저장매체 가격 하락 등)으로 대용량 데이터 활용이 가능해졌다.
- 통계는 소수에서 다수를 추정하지만, 머신러닝은 과거 데이터로부터 미래를 예측한다.
머신러닝의 종류
학습 방식에 따른 분류
- 지도 학습(Supervised Learning): 문제와 정답을 모두 알려주고 학습 → 예측, 분류
- 비지도 학습(Unsupervised Learning): 답을 가르쳐주지 않고 학습 → 연관 규칙, 군집
- 강화 학습(Reinforcement Learning): 보상은 최대화·벌은 최소화하는 방향으로 행위를 강화 → 보상
머신러닝 적용 분야
- 금융: 신용평가, 사기탐지, 주식 예측
- 헬스케어: 질병 예측, 환자 데이터 분석
- 이커머스: 고객 구매 패턴 분석, 추천 시스템, 가격 최적화, 장바구니 분석
- 자연어처리: 번역, 챗봇, 텍스트 분석
- 이미지 & 영상처리: 얼굴인식, 이미지 생성
실습 환경 (Visual Studio Code)
머신러닝 대표 소프트웨어
- Visual Studio Code (vscode): Microsoft가 제공하는 소스 코드 에디터. 다양한 언어와 extension 제공. 로컬 자원 사용.
- Google Colab: Google이 만든 Jupyter Notebook 환경. 무료 GPU 제공하지만 리소스 제한 있음.
- Anaconda: Python/R 패키지·의존성 및 배포를 편리하게 해주는 오픈소스 패키지. 데이터 과학에 특화.
Jupyter Notebook
- Data Science를 위한 오픈소스 웹 어플리케이션
- 코드 작성, 시각화, Markdown 문서 작성 가능
- 구성요소: Code Cell, Markdown Cell
- 실험 기반 연구의 노트 형태로 개발됨 (cell 기반)
통계학 기초
모집단과 표본
정의
- 모집단(Population): 관심의 대상이 되는 전체 집단
- 표본(Sample): 모집단에서 추출한 일부
표본을 사용하는 이유
- 현실적 제약: 비용·시간 절약, 접근성 문제 해결
- 대표성: 잘 설계된 표본은 모집단 특성을 반영, 무작위 추출로 편향 최소화
- 데이터 관리: 처리 용이성, 품질 관리 수월
- 모델 검증 용이: 표본에 잘 맞는 모델은 모집단에도 잘 맞을 가능성이 높음
조사 방법
- 전수조사: 모집단 전체 조사 (비용·시간 多)
- 표본조사: 표본만 조사 (대표성 확보 필요)
파이썬 실습
import numpy as np
import matplotlib.pyplot as plt
# 모집단 생성
population = np.random.normal(170, 10, 1000)
# 표본 추출
sample = np.random.choice(population, 100)
plt.hist(population, bins=50, alpha=0.5, label='population', color='blue')
plt.hist(sample, bins=50, alpha=0.5, label='sample', color='red')
plt.legend()
plt.show()
- np.random.normal(loc, scale, size): 정규분포 난수 생성 (평균, 표준편차, 크기)
- np.random.choice(a, size, replace, p): 배열에서 임의 샘플링
- plt.hist의 주요 인자: bins(구간 수), alpha(투명도), label(범례), color(색상)
표본오차와 신뢰구간
표본오차 (Sampling Error)
- 표본에서 계산된 통계량과 모집단의 진짜 값 간의 차이
- 표본 크기가 클수록 표본오차는 작아짐
- 무작위 추출 방법으로 표본오차를 줄일 수 있음
신뢰구간 (Confidence Interval)
- 모집단의 특정 파라미터(평균, 비율 등)에 대해 추정된 값이 포함될 것으로 기대되는 범위
- 계산 공식: 신뢰구간 = 표본평균 ± z × 표준오차
- 95% 신뢰수준의 z-값은 1.96
- 일반적으로 95% 신뢰수준을 많이 사용
파이썬 실습
import scipy.stats as stats
sample_mean = np.mean(sample)
sample_std = np.std(sample)
# 95% 신뢰구간 계산
conf_interval = stats.t.interval(0.95, len(sample)-1,
loc=sample_mean,
scale=sample_std/np.sqrt(len(sample)))
- stats.t.interval(alpha, df, loc, scale)
- alpha: 신뢰 수준 (예: 0.95)
- df: 자유도 (n-1)
- loc: 표본 평균
- scale: 표본 표준오차 (표준편차 / √n)
정규분포
특징
- 종 모양의 대칭 분포
- 평균을 중심으로 좌우 대칭
- 평균에서 멀어질수록 빈도 감소
- 표준편차는 분포의 퍼짐 정도를 나타냄
사용 예시
- 키, 몸무게
- 큰 집단의 시험 점수
파이썬 실습
normal_dist = np.random.normal(170, 10, 1000)
plt.hist(normal_dist, bins=30, density=True, alpha=0.6, color='g')
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)
plt.plot(x, p, 'k', linewidth=2)
plt.show()
긴 꼬리 분포 (Long Tail Distribution)
특징
- 데이터 대부분이 분포의 한쪽 끝에 몰려 있고, 반대쪽으로 긴 꼬리가 이어짐
- 비대칭 (정규분포와 다름)
- 파레토 분포, 지프의 법칙, 멱함수 등을 포함
사용 예시
- 소득 분포 (일부 부유층이 큰 비중 차지)
- 온라인 쇼핑 (롱테일 현상: 상위 20%가 매출의 80% 차지)
- 도서 판매 (베스트셀러 + 다수의 비인기 도서)
파이썬 실습
long_tail = np.random.exponential(1, 1000)
plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='b')
plt.show()
스튜던트 t 분포
특징
- 모집단 표준편차를 모르고, **표본 크기가 작은 경우(보통 30 미만)**에 사용
- 정규분포와 유사하지만 표본 크기가 작을수록 꼬리가 두꺼워짐
- 자유도가 커질수록 정규분포에 가까워짐
사용 예시
- 작은 표본의 평균 비교 (t검정)
- 소규모 임상 약물 시험
파이썬 실습
t_dist = np.random.standard_t(df=10, size=1000)
plt.hist(t_dist, bins=30, density=True, alpha=0.6, color='r')
x = np.linspace(-4, 4, 100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.show()
카이제곱분포
특징
- 자유도(K)에 따라 모양이 달라짐
- 독립변수가 '완벽하게 서로 다른 질적 자료'일 때 활용
- 범주형 데이터 분석에 사용
사용 예시
- 독립성 검정: 두 범주형 변수 간의 관계 확인 (예: 성별과 후보 지지율의 관계)
- 적합도 검정: 관측값이 특정 분포에 해당하는지 검정 (예: 노란색 완두와 녹색 완두가 3:1 비율인지)
파이썬 실습
chi2_dist = np.random.chisquare(df=2, size=1000)
plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='m')
x = np.linspace(0, 10, 100)
p = stats.chi2.pdf(x, df=2)
plt.plot(x, p, 'k', linewidth=2)
plt.show()
이항분포
특징
- 성공/실패 두 가지 결과를 가지는 실험을 n번 반복했을 때 성공 횟수의 분포
- 이산형 분포 (연속된 값을 갖지 않음)
- 실험 횟수(n)와 성공 확률(p)로 정의됨
사용 예시
- 동전 던지기 (앞면이 나오는 횟수)
- 품질 관리 (불량품 수)
파이썬 실습
binom_dist = np.random.binomial(n=10, p=0.5, size=1000)
plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
plt.show()
푸아송 분포
특징
- 단위 시간/면적당 발생하는 사건의 수를 모델링
- 이산형 분포
- 평균 발생률 λ를 가진 사건이 주어진 시간/공간에서 몇 번 발생하는지 나타냄
- λ가 충분히 크면 정규분포에 근사
- 예: 1시간 동안 콜센터에 전화 10건이 오면 λ = 10
사용 예시
- 콜센터 전화 건수
- 특정 도로의 교통사고 수
- 수신 문자 메시지 수
- 웹사이트 방문자 수
파이썬 실습
from scipy.stats import poisson
lambda_value = 4
x = np.arange(0, 15)
poisson_pmf = poisson.pmf(x, lambda_value)
plt.bar(x, poisson_pmf, alpha=0.6, color='b')
plt.xlabel('Number of Events')
plt.ylabel('Probability')
plt.show()
분포 정리
분포들 간의 관계
- 데이터 수가 매우 많아지면 정규분포에 수렴 (중심극한정리)
- 데이터 수가 많으면 묻지도 따지지도 말고 정규분포로 가정
- 데이터가 적을 경우 상황에 맞는 분포 선택
- 롱테일 분포는 데이터가 많아도 정규분포가 되지 않음
상황별 분포 선택 가이드
상황 사용 분포
| 데이터 수가 충분하다 | 정규분포 |
| 데이터 수가 작다 | 스튜던트 t 분포 |
| 일부 데이터가 전체에 큰 영향을 미친다 | 롱테일 분포 (파레토 분포) |
| 범주형 데이터의 독립성·적합도 검정 | 카이제곱 분포 |
| 결과가 두 개(성공/실패)만 나오는 상황 | 이항 분포 |
| 특정 시간·공간에서 발생하는 사건 | 푸아송 분포 |
핵심 정리
- 연속형 분포: 정규분포, 스튜던트 t 분포, 롱테일 분포, 카이제곱분포
- 이산형 분포: 이항분포, 푸아송분포
'내일배움캠프 TIL' 카테고리의 다른 글
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/16 TIL (0) | 2026.04.16 |
|---|---|
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/15 TIL (1) | 2026.04.15 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/13 TIL (0) | 2026.04.13 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/09 TIL (0) | 2026.04.09 |
| 스파르타클럽 내일배움캠프 QA/QC 5기 04/03 TIL (0) | 2026.04.03 |