머신러닝
Machine Learning
데이터에서 패턴을 학습하여 예측하는 AI 기술. 지도학습, 비지도학습, 강화학습으로 분류.
Machine Learning
데이터에서 패턴을 학습하여 예측하는 AI 기술. 지도학습, 비지도학습, 강화학습으로 분류.
머신러닝(Machine Learning)은 명시적으로 프로그래밍하지 않고 데이터에서 패턴을 학습하여 예측이나 결정을 내리는 인공지능의 핵심 분야입니다. 전통적인 프로그래밍이 규칙을 직접 코딩하는 것과 달리, 머신러닝은 데이터와 정답(레이블)을 주면 알고리즘이 스스로 규칙을 발견합니다.
머신러닝은 크게 세 가지로 분류됩니다. 지도학습(Supervised Learning)은 입력-출력 쌍으로 학습하며 분류, 회귀 문제에 사용됩니다. 비지도학습(Unsupervised Learning)은 레이블 없이 데이터의 구조를 발견하며 클러스터링, 차원 축소에 활용됩니다. 강화학습(Reinforcement Learning)은 환경과 상호작용하며 보상을 최대화하는 정책을 학습합니다.
머신러닝의 핵심 과정은 훈련(Training), 검증(Validation), 테스트(Test)입니다. 훈련 데이터로 모델 파라미터를 학습하고, 검증 데이터로 하이퍼파라미터를 튜닝하며, 테스트 데이터로 최종 성능을 평가합니다. 과적합(Overfitting)을 방지하기 위해 교차 검증, 정규화, 드롭아웃 등의 기법을 사용합니다.
2024-2025년 머신러닝 생태계는 급격히 진화했습니다. 딥러닝이 이미지, 언어, 음성 분야를 장악했고, LLM이 새로운 패러다임을 열었습니다. 하지만 정형 데이터에서는 여전히 XGBoost, LightGBM, 랜덤 포레스트가 강세입니다. AutoML 도구(H2O, AutoGluon)가 모델 선택을 자동화하고, MLOps가 프로덕션 배포의 표준이 되었습니다.
# 머신러닝 기본 워크플로우
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
import pandas as pd
import numpy as np
# 1. 데이터 로드 및 탐색
df = pd.read_csv('data.csv')
print(f"데이터 크기: {df.shape}")
print(f"결측치: {df.isnull().sum().sum()}")
# 2. 전처리
X = df.drop('target', axis=1)
y = df['target']
# 훈련/테스트 분할 (80:20)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
# 스케일링 (훈련 데이터로 fit, 테스트에 transform)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 3. 모델 훈련
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train_scaled, y_train)
# 4. 교차 검증
cv_scores = cross_val_score(model, X_train_scaled, y_train, cv=5)
print(f"\n📊 교차 검증 결과:")
print(f"평균 정확도: {cv_scores.mean():.4f} (+/- {cv_scores.std()*2:.4f})")
# 5. 테스트 평가
y_pred = model.predict(X_test_scaled)
print(f"\n📋 테스트 성능:")
print(f"정확도: {accuracy_score(y_test, y_pred):.4f}")
print(classification_report(y_test, y_pred))
# 6. 피처 중요도
importance = pd.DataFrame({
'feature': X.columns,
'importance': model.feature_importances_
}).sort_values('importance', ascending=False)
print("\n🔍 상위 피처:")
print(importance.head(10))
"이 문제는 지도학습으로 접근하면 됩니다. 3개월 치 이탈 데이터가 10만 건 있으니 충분해요. 베이스라인으로 XGBoost 돌려보고, 성능 보면서 딥러닝도 고려하죠. 2주면 PoC 가능합니다."
"머신러닝과 딥러닝의 차이는 피처 엔지니어링에 있습니다. 전통적 ML은 도메인 지식 기반 피처 설계가 중요하지만, 딥러닝은 원시 데이터에서 자동으로 특징을 학습합니다. 정형 데이터에선 아직 XGBoost가 강하고, 비정형에선 딥러닝이 우세합니다."
"모델 성능만큼 중요한 게 데이터 품질이에요. Garbage in, garbage out 아시죠? 레이블 노이즈가 5%만 넘어도 성능이 급락합니다. 피처 엔지니어링에 전체 시간의 60%를 써야 해요."
테스트 세트는 최종 평가용입니다. 튜닝 시 성능을 보면 데이터 누수가 발생해 과적합됩니다. 반드시 별도 검증 세트나 교차 검증을 사용하세요.
스케일링이나 인코딩을 전체 데이터에 적용하면 테스트 정보가 훈련에 누수됩니다. 항상 분할 후 훈련 데이터로만 fit하고 테스트에 transform하세요.
데이터를 먼저 분할하고, 훈련 데이터로만 전처리기를 fit합니다. Pipeline을 사용하면 이 과정을 자동화할 수 있습니다. 시계열은 시간 순서를 유지해야 합니다.