본문 바로가기
Python/Machine Learning

[TIL] 241219 머신러닝 워크플로우 정리

by 좌우지간에 2024. 12. 19.

머신러닝 프로젝트 워크플로우 정리

머신러닝 프로젝트에서 데이터 전처리부터 모델 평가까지의 과정을 체계적으로 정리한 가이드입니다. 각 단계는 데이터의 특성과 문제 상황에 따라 유동적으로 적용할 수 있습니다.


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) 결측치 처리 방법

  1. 삭제(remove): 결측치가 적거나 중요한 정보가 없을 때.
    data.dropna(inplace=True)
  2. 대체(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}")

평가지표 참고

  1. R-Squared: 데이터 패턴이 얼마나 비슷한지 평가 (높을수록 좋음).
  2. MSE: 예측값과 실제값의 차이를 제곱해 평균. 낮을수록 좋음.
  3. MAE: 예측값과 실제값의 절대 오차 평균. MSE보다 이상치에 덜 민감.