2026. 4. 23. 09:46ㆍTIL
📢 오늘의 목표
🚩코드카타를 하면서 기본적인 코딩 역량을 키운다.
🚩통계분석에 대해 배우면서 기존에 배웠던 내용과 어떻게 접목 시킬지 고민한다.
🚩라이브 세션을 복습하며 통계 분석 역량과 품질 분석 역량을 키운다.
📅 TIL
❇️통계 라이브세션 복습 1일차
📊통계의 필요성


품질관리는 경험에 의한 판단(직관적 판단)이 아니라 데이터 기반 의사결정을 해야한다.


이중 부트캠프에서는 정리, 분석, 해석 과정 위주로 판단
데이터 분석의 과정
문제 정의(y)> 가설 설정(x1,x2,x3,x4)> 데이터 수집(x1-데이터, x2-데이터...) 에너지의 80%~90%> 분석(EDA,통계적 방법(),머신 러닝/딥 러닝 - XAI) > 결론

통계를 통해 불량 원인을 밝히고, 머신러닝을 통해 탐지를 자동화해서 불량을 자동탐지하고 재발 방지!
📊모집단과 표본
모집단은 전체 집단을 의미하고, 표본은 그 중 대표적으로 추출한 일부 샘플을 의미!


import numpy as np
import pandas as pd
# ── 단순무작위 추출 ──
population = pd.DataFrame({'product_id': range(1, 10001)})
sample = population.sample(n=50, random_state=42)
# ── 층화 추출: 라인별 비례 추출 ──
# A라인 5000개, B라인 3000개, C라인 2000개 → 비례로 25/15/10개 추출
df = pd.DataFrame({
'product_id': range(1, 10001),
'line': ['A']*5000 + ['B']*3000 + ['C']*2000
})
stratified = df.groupby('line', group_keys=False).apply(
lambda x: x.sample(frac=50/10000, random_state=42)
)
print(stratified['line'].value_counts())
# A: 25, B: 15, C: 10
# ── 체계적 추출: 매 200번째 ──
systematic = df.iloc[::200] # 0, 200, 400, ...
print(f"체계적 추출 샘플 수: {len(systematic)}")


샘플의 크기가 부적절하면 편향 현상이 일어나서 객관성 있는 데이터를 취합할 수 없다!
📊변수의 종류와 척도


독립 - 종속
범주 - 연속
범주 - 범주
연속 - 범주
연속 - 연속
데이터의 종류에 따라 나누는 것이 중요하다!
📊중심 경향 측도

산술 평균: 50개 샘플의 치수 평균
가중평균: 라인별 생산량이 다를 때 평균 불량률 계산
절사평균: 상하 5% 제거해서 이상치를 줄인다.

산포도를 잘 보는 것이 중요함
import numpy as np
from scipy import stats
# ── 샘플 데이터: 볼트 길이 50개 ──
np.random.seed(42)
lengths = np.random.normal(loc=10.02, scale=0.02, size=50)
# ── 산술평균 ──
print(f"산술평균: {np.mean(lengths):.4f} mm")
# ── 중앙값 ──
print(f"중앙값: {np.median(lengths):.4f} mm")
# ── 절사평균 (상하 5% 제거) ──
trimmed = stats.trim_mean(lengths, proportiontocut=0.05)
print(f"절사평균: {trimmed:.4f} mm")
# ── 최빈값 (불량 유형) ──
defect_types = ['스크래치']*45 + ['변형']*30 + ['이물질']*15 + ['기타']*10
mode_result = stats.mode(defect_types)
print(f"최빈 불량 유형: {mode_result.mode}")
# ── 가중평균 (라인별 불량률) ──
defect_rates = [0.01, 0.03] # A라인 1%, B라인 3%
production = [8000, 2000] # 생산량
weighted_avg = np.average(defect_rates, weights=production)
simple_avg = np.mean(defect_rates)
print(f"단순평균 불량률: {simple_avg:.1%}")
print(f"가중평균 불량률: {weighted_avg:.1%}")
# ── 기하평균 (공정 수율) ──
yields = [0.95, 0.97, 0.93]
geo_mean = stats.gmean(yields)
print(f"수율 기하평균: {geo_mean:.4f} ({geo_mean:.2%})")
# ── 평균의 함정 시각화 ──
import matplotlib.pyplot as plt
line_a = np.random.normal(10.00, 0.01, 200) # 산포 작음
line_b = np.random.normal(10.00, 0.04, 200) # 산포 큼
fig, axes = plt.subplots(1, 2, figsize=(12, 4), sharey=True)
for ax, data, name in zip(axes, [line_a, line_b], ['A라인 (σ=0.01)', 'B라인
(σ=0.04)']):
ax.hist(data, bins=20, edgecolor='black', alpha=0.7)
ax.axvline(9.95, color='r', linestyle='--', label='LSL')
ax.axvline(10.05, color='r', linestyle='--', label='USL')
ax.axvline(np.mean(data), color='blue', linestyle='-', label=f'평균=
{np.mean(data):.3f}')
ax.set_title(f'{name}\n평균 동일, 산포 다름!')
ax.legend(fontsize=8)
plt.suptitle('평균이 같아도 산포에 따라 불량이 달라진다', fontsize=13)
plt.tight_layout()
plt.show()
📊변수의 종류와 척도
산포가 중요한 이유는 평균은 합격이어도 산포도에 따라 불량이 발생 가능

빨간색 점이 이상치

n말고 n-1(ν)로 나누는 이유는 표본은 모분산을 과소 추정하는 경향이 있아사 베셀 보정을 해줌

왜도: 분포의 비대칭 정도
우편향(양수): 공정 하한에서 불량 다발 가능
좌편향(음수): 공정 상한에서 불량 다발 가능
QAQC 사례: 도금 두께 → 보통 우편향 (얇은 쪽보다 두꺼운 쪽으로 치우침)
첨도: 꼬리 두께
양수(뾰족): 중심에 집중, 하지만 극단값도 존재 가능
음수(납작): 넓게 퍼져 있음
공정 능력 분석 시 첨도가 크면 Cp/Cpk 해석 주의(첨도가 클수록 이상치 발생 가능성 증가)\
import numpy as np
from scipy import stats
np.random.seed(42)
lengths = np.random.normal(loc=10.02, scale=0.02, size=50)
# ── 기본 산포 지표 ──
print(f"범위(Range): {np.ptp(lengths):.4f} mm")
print(f"분산(Var): {np.var(lengths, ddof=1):.6f}")
print(f"표준편차(SD): {np.std(lengths, ddof=1):.4f} mm")
# ── 사분위수 & IQR ──
Q1, Q2, Q3 = np.percentile(lengths, [25, 50, 75])
IQR = Q3 - Q1
print(f"\nQ1={Q1:.4f}, Q2(중앙값)={Q2:.4f}, Q3={Q3:.4f}")
print(f"IQR={IQR:.4f}")
# ── IQR 기반 이상치 탐지 ──
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = lengths[(lengths < lower) | (lengths > upper)]
print(f"이상치 기준: [{lower:.4f}, {upper:.4f}]")
print(f"이상치 개수: {len(outliers)}")
# ── 변동계수(CV) ──
cv = (np.std(lengths, ddof=1) / np.mean(lengths)) * 100
print(f"\n변동계수(CV): {cv:.2f}%")
# ── 왜도 & 첨도 ──
print(f"왜도(Skewness): {stats.skew(lengths):.4f}")
print(f"첨도(Kurtosis): {stats.kurtosis(lengths):.4f}") # Fisher 정의 (정규
=0))
# ── n vs n-1 차이 확인 (베셀 보정) ──
var_pop = np.var(lengths, ddof=0) # 모분산 (n)
var_sam = np.var(lengths, ddof=1) # 표본분산 (n-1)
print(f"\n모분산(ddof=0): {var_pop:.6f}")
print(f"표본분산(ddof=1): {var_sam:.6f}")
print(f"차이: {var_sam - var_pop:.6f} → 표본분산이 약간 더 크다 (보정)")

import numpy as np
from scipy.stats import norm
# ── 공정 능력 지수 계산 ──
USL = 10.05 # 상한 규격
LSL = 9.95 # 하한 규격
np.random.seed(42)
data = np.random.normal(loc=10.02, scale=0.02, size=50)
mu = np.mean(data)
sigma = np.std(data, ddof=1)
Cp = (USL - LSL) / (6 * sigma)
Cpk = min((USL - mu) / (3 * sigma), (mu - LSL) / (3 * sigma))
print(f"공정 평균: {mu:.4f} mm")
print(f"공정 표준편차: {sigma:.4f} mm")
print(f"Cp = {Cp:.3f} {'✓ 능력 있음' if Cp >= 1.33 else '✗ 능력 부족'}")
print(f"Cpk = {Cpk:.3f} {'✓ 합격' if Cpk >= 1.33 else '✗ 중심 치우침 또는 산포
과다'}")
# ── 규격 이탈 확률 (정규분포 가정) ──
p_lower = norm.cdf(LSL, loc=mu, scale=sigma)
p_upper = 1 - norm.cdf(USL, loc=mu, scale=sigma)
print(f"\n규격 하한 이탈: {p_lower:.4%}")
print(f"규격 상한 이탈: {p_upper:.4%}")
print(f"총 불량률 예측: {(p_lower + p_upper):.4%}")
📊데이터 시각화와 EDA

bin 크기에 따라 해석이 달라질 수 있음
QAQC 활용: 치수 분포 + 규격 한계선(USL/LSL)을 함께 표시
규격 안에 들어오는 비율 시각적 확인
쌍봉분포(Bimodal)가 나오면? → 2개 이상의 공정/장비/원자재가 섞여 있을 가능성
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)박스플롯 — 이상치와 산포 한눈에
data = np.random.normal(loc=10.02, scale=0.02, size=200)
USL, LSL = 10.05, 9.95
plt.figure(figsize=(10, 5))
plt.hist(data, bins=25, edgecolor='black', alpha=0.7, color='steelblue')
plt.axvline(LSL, color='red', linestyle='--', linewidth=2, label=f'LSL =
{LSL}')
plt.axvline(USL, color='red', linestyle='--', linewidth=2, label=f'USL =
{USL}')
plt.axvline(np.mean(data), color='blue', linestyle='-', linewidth=2,
label=f'Mean = {np.mean(data):.3f}')
plt.axvline(10.00, color='green', linestyle=':', linewidth=2,
label='Target = 10.00')
plt.xlabel('Length (mm)')
plt.ylabel('Frequency')
plt.title('볼트 길이 분포 + 규격 한계선')
plt.legend()
plt.tight_layout()
plt.show()
# ── 쌍봉분포 예시: 2대 장비가 섞인 경우 ──
equip_a = np.random.normal(9.98, 0.015, 100)
equip_b = np.random.normal(10.04, 0.015, 100)
mixed = np.concatenate([equip_a, equip_b])
plt.figure(figsize=(10, 5))
plt.hist(mixed, bins=30, edgecolor='black', alpha=0.7, color='orange')
plt.axvline(LSL, color='red', linestyle='--', linewidth=2, label='LSL')
plt.axvline(USL, color='red', linestyle='--', linewidth=2, label='USL')
plt.title('쌍봉분포 → 2대 장비가 섞여 있을 가능성!')
plt.legend()
plt.tight_layout()
plt.show()

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
np.random.seed(42)
df = pd.DataFrame({
'length': np.concatenate([
np.random.normal(10.00, 0.015, 50), # A라인
np.random.normal(10.02, 0.020, 50), # B라인
np.random.normal(9.98, 0.030, 50), # C라인
]),
'line': ['A']*50 + ['B']*50 + ['C']*50
})
plt.figure(figsize=(8, 5))
sns.boxplot(x='line', y='length', data=df, palette='Set2')
plt.axhline(y=10.05, color='red', linestyle='--', alpha=0.7, label='USL')
plt.axhline(y=9.95, color='red', linestyle='--', alpha=0.7, label='LSL')
plt.axhline(y=10.00, color='green', linestyle=':', alpha=0.7,
label='Target')
plt.title('라인별 볼트 길이 박스플롯')
plt.ylabel('Length (mm)')
plt.legend()
plt.tight_layout()
plt.show()
# 라인별 기술통계
print(df.groupby('line')['length'].agg(['mean', 'std', 'min', 'max']))

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
temperature = np.random.uniform(170, 200, 100)
hardness = 50 + 1.8 * temperature + np.random.normal(0, 8, 100)
plt.figure(figsize=(8, 5))
plt.scatter(temperature, hardness, alpha=0.6, edgecolors='black',
linewidth=0.5)
plt.xlabel('공정 온도 (℃)')
plt.ylabel('제품 경도 (HV)')
plt.title('공정 온도 vs 제품 경도')
# 추세선 추가
z = np.polyfit(temperature, hardness, 1)
p = np.poly1d(z)
plt.plot(sorted(temperature), p(sorted(temperature)), 'r--', linewidth=2,
label=f'y = {z[0]:.2f}x + {z[1]:.1f}')
plt.legend()
plt.tight_layout()
plt.show()

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
# ── X̄ 관리도 시뮬레이션 ──
# 25개 소그룹, 각 5개 샘플
n_subgroups = 25
subgroup_size = 5
data = np.random.normal(10.00, 0.02, (n_subgroups, subgroup_size))
# 13번째 소그룹부터 평균이 살짝 이동 (공정 이상 시뮬레이션)
data[12:] += 0.015
xbar = data.mean(axis=1) # 소그룹 평균
R = data.ptp(axis=1) # 소그룹 범위
# 관리 한계 계산 (A2=0.577 for n=5)
A2 = 0.577
CL = xbar.mean()
UCL = CL + A2 * R.mean()
LCL = CL - A2 * R.mean()
plt.figure(figsize=(12, 5))
plt.plot(range(1, n_subgroups+1), xbar, 'bo-', markersize=6, label='X̄')
plt.axhline(CL, color='green', linestyle='-', linewidth=2, label=f'CL =
{CL:.4f}')
plt.axhline(UCL, color='red', linestyle='--', linewidth=2, label=f'UCL =
{UCL:.4f}')
plt.axhline(LCL, color='red', linestyle='--', linewidth=2, label=f'LCL =
{LCL:.4f}')
# 관리 이탈 점 강조
for i, val in enumerate(xbar):
if val > UCL or val < LCL:
plt.plot(i+1, val, 'rs', markersize=12, zorder=5)
plt.xlabel('소그룹 번호')
plt.ylabel('소그룹 평균 (mm)')
plt.title('X̄ 관리도 — 13번째부터 공정 이동 감지')
plt.legend(loc='upper left')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

import pandas as pd
import matplotlib.pyplot as plt
# 불량 유형 데이터
defects = pd.Series({
'스크래치': 45,
'변형': 30,
'이물질': 15,
'치수불량': 7,
'기타': 3,
}).sort_values(ascending=False)
cumulative_pct = defects.cumsum() / defects.sum() * 100
fig, ax1 = plt.subplots(figsize=(10, 5))
# 막대그래프
ax1.bar(defects.index, defects.values, color='steelblue',
edgecolor='black')
ax1.set_ylabel('빈도 (건)')
ax1.set_xlabel('불량 유형')
# 누적 비율 꺾은선
ax2 = ax1.twinx()
히트맵 — 상관 행렬 시각화
ax2.plot(defects.index, cumulative_pct.values, 'ro-', linewidth=2,
markersize=8)
ax2.axhline(80, color='gray', linestyle=':', alpha=0.5, label='80% 기준선')
ax2.set_ylabel('누적 비율 (%)')
ax2.set_ylim(0, 110)
ax2.legend()
plt.title('파레토 차트 — 불량 유형별 빈도')
plt.tight_layout()
plt.show()
print(f"상위 2개 유형이 전체 불량의 {cumulative_pct.iloc[1]:.0f}%를 차지")
from scipy import stats
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
data_normal = np.random.normal(10.0, 0.02, 100)
data_skewed = np.random.exponential(0.02, 100) + 9.95 # 우편향
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
stats.probplot(data_normal, dist="norm", plot=axes[0])
axes[0].set_title('정규분포 데이터 → 대각선 위')
stats.probplot(data_skewed, dist="norm", plot=axes[1])
axes[1].set_title('우편향 데이터 → 대각선에서 벗어남')
plt.suptitle('QQ-Plot으로 정규성 시각적 확인', fontsize=13)
plt.tight_layout()
plt.show()

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
np.random.seed(42)
n = 100
temperature = np.random.uniform(170, 200, n)
pressure = np.random.uniform(5, 15, n)
speed = np.random.uniform(50, 100, n)
humidity = np.random.uniform(30, 70, n)
hardness = 50 + 1.8*temperature + 0.5*pressure - 0.1*speed + np.random.normal(0, 5, n)
roughness = 10 - 0.05*speed + 0.02*humidity + np.random.normal(0, 0.5,n)
df = pd.DataFrame({
'온도': temperature, '압력': pressure, '속도': speed,
'습도': humidity, '경도': hardness, '거칠기': roughness
})
plt.figure(figsize=(8, 6))
corr = df.corr()
sns.heatmap(corr, annot=True, fmt='.2f', cmap='RdBu_r', center=0,
vmin=-1, vmax=1, square=True, linewidths=0.5)
plt.title('공정 변수 상관행렬 히트맵')
plt.tight_layout()plt.show()
# 경도와 강한 상관을 보이는 변수 확인
print("\n경도와의 상관계수:")
print(corr['경도'].drop('경도').sort_values(ascending=False))
❇️머신러닝 라이브세션 복습
📊머신러닝의 정의와 필요성

기계학습 또는 머신러닝은 기계(컴퓨터)가 학습을 할 수 있도록 하는 연구분야 를 의미한다. 즉 머신러닝을 통해 인간이 품질검사하는 양을 줄일 수 있다!
인공지능을 소프트웨어적으로 구현하는 머신러닝은 컴퓨터가 데이터를 학습하고 스스로 패턴을 찾아내 적절한 작업을 수행하도록 학습하는 알고리즘을 의미한다.
머신 러닝의 구성요소는 다음과 같음
작업(T): 제품 결함 탐지, 생산 공정 모니터링, 품질 평가 등
성능 지표(P): 정확도, 정밀도, 재현율 등
경험(E): 수집된 생산 데이터, 검사 기록, 공정 센서 데이터 등

머신 러닝은 AI의 종류 중 하나로 스스로 학습하는 인공지능! 딥러닝은 그 중에서 인공 신경망을 이용해 거대 데이터를 학습
품질관리 분야에서 적용 가능성
품질 데이터의 자동 분석, 공정 이상 탐지 및 예측, 결함률 감소와 생산성 향상
📊머신 러닝 학습 종류

지도 학습 (Supervised Learning)
정답이 있는 데이터를 활용해 데이터를 학습,입력 값(X data)이 주어지면 입력값에 대한 Label(Y data)를 주어 학습한다.
분류
→ 컴퓨터가 주어진 데이터를 보고, 미리 정해진 그룹(카테고리) 중 하나로 나누는 작업
입력 데이터: 레이블(정답)이 포함된 데이터가 필요. (지도 학습)
출력 데이터: 입력 데이터를 특정 범주로 분류한 결과.
알고리즘: 로지스틱 회귀, 의사결정트리, 랜덤 포레스트, SVM, 뉴럴 네트워크 등.
이진 분류 (Binary Classification):
설명: 데이터가 두 개의 카테고리(예: "정상" 또는 "비정상")로 분류되는 경우. Ex) 이메일 필터링 (스팸/정상).
다중 분류 (Multiclass Classification):
설명: 데이터가 세 개 이상의 카테고리로 분류되는 경우 .Ex) 이미지 분류 (고양이, 개, 새).
다중 레이블 분류 (Multilabel Classification):
설명: 하나의 데이터가 여러 개의 카테고리를 가질 수 있는 경우.Ex) 영화 장르 분류 (액션, 코미디, 드라마)
회귀
→ 데이터를 기반으로 연속적인 숫자 값을 예측하는 작업
선형 회귀 (Linear Regression)
데이터가 직선 형태로 분포한다고 가정하여 예측.
간단하고 직관적이며, 관계를 설명하는 데 적합.
예시: 집의 크기와 가격 관계를 예측.

다항 회귀 (Polynomial Regression)
데이터를 비선형적으로 모델링할 때 사용.
예시: 곡선 형태로 변하는 데이터의 온도 변화 예측

릿지 회귀(Ridge Regression) / 라쏘 회귀(Lasso Regression)
다중 공선성 문제를 해결하기 위해 규제를 추가한 선형 회귀.
예시: 재무 데이터에서 중요한 변수를 추출하여 미래 수익 예측.

결정 트리 회귀 / 랜덤 포레스트 회귀
의사결정 트리를 기반으로 데이터를 나누어 예측.
예시: 복잡한 데이터에서 공정 품질 예측.


비지도 학습
정의: 비지도 학습은 레이블이 없는 데이터를 분석하여 데이터 간의 관계, 그룹, 패턴 등을 찾는 알고리즘입니다.
목적: 데이터 내부의 숨겨진 구조나 특징을 발견하여, 사람이 알지 못했던 새로운 인사이트를 제공합니다.
특징:
정답이 없기 때문에 정확도보다는 데이터 간의 유사성과 차이를 측정하는 데 중점.
주로 탐색적 데이터 분석(EDA)과 데이터 전처리 단계에서 활용.
클러스터링(Clustering)
데이터를 유사한 그룹으로 묶는 작업입니다.

K-Means, DBSCAN, 계층적 클러스터링으로 시각화 가능
차원 축소(Dimensionality Reduction)
데이터를 더 간결하고 중요한 특징들만 남기는 작업
예시:
수많은 센서 데이터를 몇 가지 중요한 지표로 요약.
대표 알고리즘:
PCA(주성분 분석), t-SNE, UMAP.
연관 규칙 학습(Association Rule Learning)
데이터 간의 상관관계를 발견하는 작업입니다.
예시:
장바구니 분석: "우유를 사면 빵도 살 확률이 높다."
사용자 행동 분석: "특정 영화를 본 사람은 다른 특정 영화를 볼 가능성이 높다."
강화 학습
품질 분야에서 거의 안씀
Scikit-learn

cikit-learn은 창고처럼 "도구가 방마다 나눠져 있고 직접 찾아가야 함"
→ 그래서 from sklearn.model_selection import train_test_split처럼 써야 함.
문제 정의
모델로 해결하고 싶은 문제가 무엇인지 확실하게 정의
타겟이 있는 데이터인지? 그렇지 않은지? (y값)
타겟이 있다면 분류 문제인가? 회귀 예측 문제인가?
타겟이 없는 데이터에서 어떤 가치를 뽑아내고 싶은지
지도 학습 vs 비지도학습
문제에 대한 나의 접근 방식을 정합니다.
가설 설정
모델 설정

데이터 전처리
데이터 수집
문제 해결에 사용하기 위한 데이터를 수집합니다. 데이터는 잘 정리가 되어 있는 경우도 있고, 그렇지 않은 경우도 있습니다.
데이터 클리닝
분석에 적합한 형태로 데이터를 정제하고 가공하는 단계입니다.
데이터 타입 확인 ⇒ datetime ⇒결측치 처리 및 이상치 제거,정규화(Normalization)
피쳐 엔지니어링 (Feature Engineering)
피쳐 엔지니어링은 다양한 독립변수 중에서 분석에 활용하기 위한 변수를 적절하게 선택하거나, 필요에 따라서 새로운 변수를 생성하는 과정입니다.
도메인 지식 등을 활용
탐색적 데이터 분석(EDA)을 통해 변수 상관관계 분석
데이터 분할
분석에 사용하기 위한 데이터를 나누는 작업입니다.
보통 Train/Test 데이터로 구분하거나 Train/Validation/Test 데이터로 구분
Train : Test의 비중은 보통 6:4 또는 7:3 8:2 정도로 나눕니다. ⇒ 데이터양에따라 움직입니다.
시계열 데이터의 경우는 특정 시점을 기준으로 데이터를 나눕니다.
모델링
지도 학습 - 분류 및 회귀(예측)
선형 회귀 (예측)
로지스틱 회귀 (분류)
랜덤 포레스트 (분류, 예측)
서포트 벡터 머신 (분류, 예측)
다층 퍼셉트론 (분류, 예측)
비지도학습 - 군집 분석
주성분 분석(PCA)
계층적 군집화
K-means
DBSCAN
학습 데이터를 이용해 모델을 학습
➡️테스트 데이터를 이용해 모델을 이용한 예측
➡️ 성능 지표를 활용해 모델의 성능을 평가
분류 모델
정확도(Accuracy)
정밀도(Precision)
재현율(Recall)
회귀 모델
MSE(Mean Squared Error)
RMSE(Root Mean Squared Error)
MAE(Mean Absolute Error)
군집 분석의 경우 군집화된 결과물을 직접 확인하며 성능을 평가
모델 성능을 끌어올리기 위해 모델의 하이퍼파라미터 값을 변경하며 위 과정을 반복
하이퍼 파라미터(Hyper Parameter)란?
모델을 학습하기 전에 사용자가 직접 값을 설정해줘야 하는 변수입니다.
동일한 모델이더라도 어떤 값을 설정하느냐에 따라 모델 성능이 달라질 수 있음.
'TIL' 카테고리의 다른 글
| 20260504 TIL (0) | 2026.05.04 |
|---|---|
| 20260429 TIL (0) | 2026.04.29 |
| 20260422 TIL (0) | 2026.04.23 |
| 20260421 TIL (0) | 2026.04.21 |
| 20260420 TIL (0) | 2026.04.20 |