🤖 AI/ML

Machine Learning

머신러닝

데이터에서 패턴 학습하여 예측. 지도, 비지도, 강화학습으로 분류.

📖 상세 설명

머신러닝(Machine Learning)은 명시적으로 프로그래밍하지 않고 데이터로부터 패턴을 학습하여 예측이나 결정을 수행하는 AI의 하위 분야입니다. "경험을 통해 학습하는 컴퓨터 시스템"이라는 정의로 1959년 Arthur Samuel이 처음 용어를 사용했습니다.

머신러닝은 1950년대 퍼셉트론에서 시작해 1990년대 SVM, 2000년대 앙상블 기법, 2012년 딥러닝 혁명을 거쳐 발전했습니다. 현재는 LLM, 생성형 AI까지 확장되어 거의 모든 산업에서 핵심 기술로 자리잡았습니다.

머신러닝은 학습 방식에 따라 3가지로 분류됩니다. 지도학습(Supervised Learning)은 레이블이 있는 데이터로 학습하며 분류, 회귀 문제에 사용됩니다. 비지도학습(Unsupervised Learning)은 레이블 없이 데이터 구조를 파악하며 클러스터링, 차원 축소에 사용됩니다. 강화학습(Reinforcement Learning)은 보상을 최대화하는 행동을 학습합니다.

실무에서 머신러닝은 추천 시스템, 이상 탐지, 수요 예측, 자연어 처리, 컴퓨터 비전 등에 광범위하게 적용됩니다. 2025년 기준 전 세계 ML 시장 규모는 500억 달러 이상이며, 데이터 사이언티스트와 ML 엔지니어 수요가 지속적으로 증가하고 있습니다.

💻 코드 예제

import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.datasets import load_breast_cancer

# 1. 데이터 로드
data = load_breast_cancer()
X, y = data.data, data.target
print(f"데이터 크기: {X.shape}, 클래스: {np.unique(y)}")

# 2. 데이터 분할 (학습 80%, 테스트 20%)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# 3. 피처 스케일링 (중요!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 4. 여러 모델 비교
models = {
    "Logistic Regression": LogisticRegression(max_iter=1000),
    "Random Forest": RandomForestClassifier(n_estimators=100, random_state=42),
    "Gradient Boosting": GradientBoostingClassifier(n_estimators=100, random_state=42)
}

print("\n=== 교차 검증 결과 (5-fold) ===")
for name, model in models.items():
    scores = cross_val_score(model, X_train_scaled, y_train, cv=5, scoring='accuracy')
    print(f"{name}: {scores.mean():.4f} (+/- {scores.std()*2:.4f})")

# 5. 최종 모델 학습 및 평가
best_model = GradientBoostingClassifier(n_estimators=100, random_state=42)
best_model.fit(X_train_scaled, y_train)
y_pred = best_model.predict(X_test_scaled)

print("\n=== 테스트 세트 성능 ===")
print(classification_report(y_test, y_pred, target_names=data.target_names))

# 6. 피처 중요도
feature_importance = sorted(
    zip(data.feature_names, best_model.feature_importances_),
    key=lambda x: x[1], reverse=True
)[:5]
print("\nTop 5 중요 피처:")
for feat, imp in feature_importance:
    print(f"  {feat}: {imp:.4f}")

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"이번 이탈 예측 모델은 Gradient Boosting 기반입니다. 과거 2년 고객 데이터로 학습했고, 테스트 세트에서 AUC 0.85를 달성했습니다. 피처 중요도 분석 결과 최근 구매 간격과 총 주문 횟수가 가장 큰 영향을 미쳤습니다."
💬 면접에서
"머신러닝은 지도학습, 비지도학습, 강화학습으로 분류됩니다. 지도학습은 레이블이 있는 데이터로 예측 모델을 만들고, 비지도학습은 레이블 없이 데이터 패턴을 찾습니다. 최근 자기지도학습(Self-supervised)도 많이 사용됩니다."
💬 기술 토론에서
"테이블 데이터에서는 여전히 Gradient Boosting 계열(XGBoost, LightGBM)이 딥러닝보다 좋은 성능을 보입니다. 딥러닝은 이미지, 텍스트, 음성처럼 비정형 데이터에서 강점이 있어요. 문제에 맞는 알고리즘 선택이 중요합니다."

⚠️ 흔한 실수 & 주의사항

테스트 데이터로 하이퍼파라미터 튜닝

테스트 세트를 여러 번 사용하면 과적합됩니다. 테스트 세트는 최종 평가에만 1회 사용해야 합니다.

올바른 데이터 분할

Train/Validation/Test로 3분할하거나, 교차검증을 사용하세요. 검증 세트로 하이퍼파라미터를 튜닝하고, 테스트 세트는 마지막 평가에만 사용합니다.

🔗 관련 용어

📚 더 배우기