머신러닝 활용 품질관리

Chapter.8 머신러닝 활용 품질관리(3)

devjjun 2026. 6. 17. 09:54

TIL(Today I Learned)


1️⃣실무에 바로 쓰는 머신러닝 기초 2 실습 

총 정리

  • 결측치와 이상치를 올바르게 처리하는 것이 모델의 기초 
  • 불균형 데이터 문제를 해결하지 않으면 소수 클래스(불량)을 놓칠 수 있다.
  • 범주형 변수는 원-핫 인코딩, 레이블 인코딩 등으로 적절히 반환 
  • 피처 엔지니어링을 통해 데이터에서 추가정보(패턴)을 추출하거나,
    중요하지 않은 변수는 제거해 모델의 효율과 성능을 높일 수 있다.
전처리와 피처 엔지니어링 과정에서의 모든 선택(결측치 처리 방식, 이상치 제거 기준 등)은
도메인 지식과 데이터 탐색(EDA) 결과를 함께 고려해야 한다.

 

주요 질문 및 답변 

  • Q1.결측치 처리 시 예측모델을 쓰는 경우 
    A1. 결측치가 중요한 변수이거나, 전체 데이터의 상당 부분을 차지하는 경우 
  • Q2.이상치를 무조건 제거해야 하는지
    A2.도메인 지식과 EDA를 토대로 판단 
  • Q3.정규화와 표준화는 언제 구분해서 사용하는지 
    A3.주로 딥러닝에서 정규화 회귀 모델에서 표준화 사용, 모델 성능을 통한 비교가 최적
  • Q4.불균형 데이터에서 SMOTE 적용시 데이터를 생성해버리면 문제가 되지 않는지  
    A4.생선된 데이터를 분석, 검증하거나 SMOTE 파라미터 조정, 다른 오버샘플링과 혼합해서 사용 
  • Q5.범주형 변수가 매우 많은 경우 
    A5.Feature Hashing 같은 다른 기법을 검토하거나 발생 빈도가 낮은 범주는 기타(Other)로 통합
  • Q6.피처 엔지니어링 자동화 접근법 
    A6.표준화된 전처리 파이프라인을 스크립트화 하고, 반복적으로 도메인 전문가와 협업하여
         새 변수 발굴하는 과정 병행

실습 데이터 전처리 파이프라인 

실습 코드

https://colab.research.google.com/drive/1HJkDGsPkFWrbnBJ_p1kE1pdIF4KBv5xm

 

실무에 바로 쓰는 머신러닝 2회차 실습.ipynb

Colab notebook

colab.research.google.com


2️⃣실무에 바로 쓰는 머신러닝 기초 4 & 실습 과제  

부족한 개념 

  • 확률 경사 하강법(SGD)
  • 다항회귀( Polynomial Regression)

확률 경사 하강법이란?

경사 하강 알고리즘의 변형으로, 각 단게에서 경사를 계산하기 위해 데이터 세트에 의존하는 대신, 

한 번에 하나의 데이터 샘플을 사용

경사 하강법이란?

목적 함수를 반복적으로 최소화하는 최적화하는 알고리즘, 지도 학습 모델의 성능 향상이 기본 

SGDRegerssor 모델 활용 

더보기
# SGDRegressor 모델
sgd_reg = SGDRegressor(max_iter=6000, tol=1e-3, random_state=42)
sgd_reg.fit(X_train, y_train)

# 예측
y_pred_sgd = sgd_reg.predict(X_test)

# 성능 측정
mse_sgd = mean_squared_error(y_test, y_pred_sgd)
r2_sgd = r2_score(y_test, y_pred_sgd)

# 평균 비율 오차
def MPE(y_true, y_pred):
    return np.mean((y_true - y_pred) / y_true) * 100

print("[SGDRegressor 결과]")
print("가중치(coefficient):", sgd_reg.coef_)
print("절편(intercept):", sgd_reg.intercept_)
print("MSE:", mse_sgd)
print("R2 점수:", r2_sgd)
print("평균 비율 오차 : ", MPE(y_test, y_pred_sgd))

결과 

다항회귀(Polynomial Regression)

비 선형적인 관계를 다항식 형태로 모델링 

2차 다항식

단순 선형 항 뿐만 아니라 고차항을 추가해 비선형 패턴을 학습할 수 있다.

다항회귀 적용 예시 

  • 제조 공정에서 온도와 반응률이 관계가 곡선인 경우 
  • 건강 데이터에서 나이와 특정 지표가 단순 선형보다 곡선 형태로 나타나는 경우 

주의점 

  • 고차항을 무조건 늘리면 과적합 발생 가능 

다항회귀 활용 

더보기
# Polynomial Regression (2차 예시)
poly_model = Pipeline([
    ("poly", PolynomialFeatures(degree=2, include_bias=False)),
    ("lin_reg", LinearRegression())
])
poly_model.fit(X_train, y_train)
y_pred_poly = poly_model.predict(X_test)

mse_poly = mean_squared_error(y_test, y_pred_poly)
r2_poly = r2_score(y_test, y_pred_poly)

# 평균 비율 오차
def MPE(y_true, y_pred):
    return np.mean((y_true - y_pred) / y_true) * 100

print("[다항회귀(2차) 결과]")
print("MSE:", mse_poly)
print("R2:", r2_poly)
print("평균 비율 오차 : ", MPE(y_test, y_pred_poly))

결과


Ridge & Lasso 고급 회귀 기법 실습 

실무에 바로 쓰는 머신러닝 3주차 실습.ipynb - Colab

 

Google Colab Notebook

Run, share, and edit Python notebooks

colab.research.google.com


3️⃣프로젝트 부트캠프: NASA 엔진 수명 예측 실습 (3)

전처리 및 모델링 파이프라인 설계 

전처리 과정 

EDA에서 도출한 인사이트를 기반으로 불필요 컬럼 제거, 스케일링을 진행하였다. 

불필요 컬럼 제거 

  • 센서 데이터 (1,5,6,10,16,18,19)의 경우 센서값의 분포가 균일하고 표준편차가 0에 수렴하여 삭제하였다.
더보기
# 센서 데이터 (1,5,6,10,16,18,19) 제거
drop_sens = ['sensor_1','sensor_5','sensor_6','sensor_10','sensor_16','sensor_18','sensor_19']
# train
train_clean = train_clean.drop(columns=drop_sens)
# Test 
test_clean = test_clean.drop(columns=drop_sens)
# valid
test_valid_clean = test_valid_clean.drop(columns=drop_sens)
  • 운행 조건 데이터의 경우 동일하게 센서값이 일정하고 편차가 0에 수렴하여 삭제하였다. 
더보기
# 구분되지 않는 운행 조건 제거
drop_ops = ['drive_op1','drive_op2','drive_op3']
# train
train_clean = train_df.drop(columns=drop_ops)
# test
test_clean = test_df.drop(columns=drop_ops)
# valid
test_valid_clean = test_valid.drop(columns=drop_ops)

스케일링(정규화)

특정 엔진 ID의 전체 컬럼을 확인한 결과 극단적 이상치가 적고,
센서마다 측정 단위가 제각각이기 때문에 MinMaxScaler를 적용하였다. 

📌트리 기반 모델의 경우 스케일링 생략 가능 

더보기
# 스케일링 전 타겟변수 분리
exclude = ['engine_id', 'cycle_n', 'RUL'] # 'unit' is 'engine_id'
feature_cols = [c for c in train_clean.columns if c not in exclude]

X_train = train_clean[feature_cols]
y_train = train_clean['RUL']

X_test = test_clean[feature_cols] # Ensure X_test also only contains features

X_valid = test_valid_clean[feature_cols]
y_valid = test_valid_clean['RUL']
# 스케일링
scaler = MinMaxScaler()
scaler.fit(X_train) # Fit only on X_train
train_scaled = scaler.transform(X_train) # Transform X_train
test_scaled  = scaler.transform(X_test) # Transform X_test
valid_scaled = scaler.transform(X_valid) # Transform X_valid

스케일링 후 최종 데이터 예시 출력 

진행 계획 

  1. 회귀 모델 및 트리 모델 베이스라인 성적 및 지표 비교 
  2. 최적 모델 선정 후 RUL 기반 분류 
  3. 성능 검증을 통해 성공 기준에 부합하는지 확인 
  4. 요약 문서 작성

💡 느낀점

오늘도 전체적인 흐름을 정리하고 판단에 대한 근거를 위주로 실습을 진행하였다. 스케일링에서 fit_transform을 test 데이터에 사용하는 오류를 범했는데, train으로 학습한 후 transform으로 test 데이터에 적용시켜야 한다는 점을 상기시킬 수 있었다. 마지막으로 정답을 입력에 섞어버리는 오류를 수정하는 과정을 통해 피쳐와 타깃의 역할 구분을 확실하게 이해할 수 있었다. 전처리는 단순한 준비 작업이 아니라, 모델의 신뢰성을 결정하는 단계라는 걸 이번에 확실히 느꼈다. 다음 머신러닝 단계에서는 베이스라인을 정하고 성적을 비교하여 최적의 모델을 찾고 지표를 통한 성능 검증까지 진행할 예정이다.