머신러닝 프로젝트 워크플로우 정리
머신러닝 프로젝트에서 데이터 전처리부터 모델 평가까지의 과정을 체계적으로 정리한 가이드입니다. 각 단계는 데이터의 특성과 문제 상황에 따라 유동적으로 적용할 수 있습니다.
1. 데이터 불러오기 (Loading Data)
데이터 파일(csv, json 등)을 불러오고, 기본적인 구조와 정보를 확인합니다.
import pandas as pd
# 데이터 불러오기
data = pd.read_csv('data.csv')
# 데이터 기본 정보 확인
print(data.info())
print(data.head())
2. 탐색적 데이터 분석 (EDA)
데이터의 전반적인 특성을 이해하고, 결측치와 이상치 등 데이터를 정리할 방향을 결정합니다.
(1) 데이터의 기초 통계량 확인
# 데이터 분포 확인
print(data.describe())
(2) 결측치 확인
# 결측치 개수 확인
print(data.isnull().sum())
(3) 이상치 탐지
- Boxplot 시각화
import seaborn as sns sns.boxplot(data['column_name']) - IQR(Interquartile Range)를 활용한 이상치 탐지
Q1 = data['column_name'].quantile(0.25) Q3 = data['column_name'].quantile(0.75) IQR = Q3 - Q1 lower_bound = Q1 - 1.5 * IQR upper_bound = Q3 + 1.5 * IQR print(f"Lower Bound: {lower_bound}, Upper Bound: {upper_bound}")
(4) 상관관계 분석
- 상관관계 행렬과 히트맵
import matplotlib.pyplot as plt correlation_matrix = data.corr() sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm') plt.show()
3. 결측치 처리 (Handling Missing Data)
(1) 결측치 처리 방법
- 삭제(remove): 결측치가 적거나 중요한 정보가 없을 때.
data.dropna(inplace=True) - 대체(impute): 평균, 중앙값, 또는 도메인 지식 기반으로 대체.
data['column_name'].fillna(data['column_name'].median(), inplace=True)
4. 데이터 분리 (Train-Test Split)
훈련 데이터와 테스트 데이터를 분리하여 학습 후 평가 시 데이터 누출을 방지합니다.
from sklearn.model_selection import train_test_split
X = data.drop('target', axis=1)
y = data['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
5. 이상치 처리 (Outlier Handling)
훈련 데이터에만 이상치를 처리합니다.
- 이상치 제거
X_train = X_train[(X_train['column_name'] >= lower_bound) & (X_train['column_name'] <= upper_bound)] - 이상치 대체
X_train['column_name'] = X_train['column_name'].apply( lambda x: upper_bound if x > upper_bound else (lower_bound if x < lower_bound else x) )
6. 특성 선택 (Feature Selection)
- 상관관계 분석: 타겟 변수와 상관관계가 높은 변수 선택.
- 모델 기반 피처 중요도:
from sklearn.ensemble import RandomForestRegressor model = RandomForestRegressor() model.fit(X_train, y_train) feature_importances = model.feature_importances_ print(feature_importances)- PCA를 활용한 차원 축소:
from sklearn.decomposition import PCA pca = PCA(n_components=5) X_train = pca.fit_transform(X_train) X_test = pca.transform(X_test)
7. 스케일링 (Scaling)
이상치 처리 및 특성 선택 후에 스케일링을 진행합니다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
8. 모델 생성 (Model Training)
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train_scaled, y_train)
9. 모델 평가 (Model Evaluation)
- R-Squared
print("R-Squared:", model.score(X_test_scaled, y_test))- MSE와 MAE
from sklearn.metrics import mean_squared_error, mean_absolute_error y_pred = model.predict(X_test_scaled) mse = mean_squared_error(y_test, y_pred) mae = mean_absolute_error(y_test, y_pred) print(f"MSE: {mse}, MAE: {mae}")
평가지표 참고
- R-Squared: 데이터 패턴이 얼마나 비슷한지 평가 (높을수록 좋음).
- MSE: 예측값과 실제값의 차이를 제곱해 평균. 낮을수록 좋음.
- MAE: 예측값과 실제값의 절대 오차 평균. MSE보다 이상치에 덜 민감.
'Python > Machine Learning' 카테고리의 다른 글
| [TIL] 데이터 전처리 인코딩, 스케일링 (1) | 2024.12.23 |
|---|---|
| 탐색적 데이터 분석(EDA) (4) | 2024.12.19 |
| 챕터2 주택가격예측 과제설명 (3) | 2024.12.18 |
| [머신러닝] 지도학습 : 회귀모델 (1) | 2024.12.16 |
| 데이터 전처리 개념 (0) | 2024.12.15 |