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)
비 선형적인 관계를 다항식 형태로 모델링

단순 선형 항 뿐만 아니라 고차항을 추가해 비선형 패턴을 학습할 수 있다.
다항회귀 적용 예시
- 제조 공정에서 온도와 반응률이 관계가 곡선인 경우
- 건강 데이터에서 나이와 특정 지표가 단순 선형보다 곡선 형태로 나타나는 경우
주의점
- 고차항을 무조건 늘리면 과적합 발생 가능
다항회귀 활용
# 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
스케일링 후 최종 데이터 예시 출력

진행 계획
- 회귀 모델 및 트리 모델 베이스라인 성적 및 지표 비교
- 최적 모델 선정 후 RUL 기반 분류
- 성능 검증을 통해 성공 기준에 부합하는지 확인
- 요약 문서 작성
💡 느낀점
오늘도 전체적인 흐름을 정리하고 판단에 대한 근거를 위주로 실습을 진행하였다. 스케일링에서 fit_transform을 test 데이터에 사용하는 오류를 범했는데, train으로 학습한 후 transform으로 test 데이터에 적용시켜야 한다는 점을 상기시킬 수 있었다. 마지막으로 정답을 입력에 섞어버리는 오류를 수정하는 과정을 통해 피쳐와 타깃의 역할 구분을 확실하게 이해할 수 있었다. 전처리는 단순한 준비 작업이 아니라, 모델의 신뢰성을 결정하는 단계라는 걸 이번에 확실히 느꼈다. 다음 머신러닝 단계에서는 베이스라인을 정하고 성적을 비교하여 최적의 모델을 찾고 지표를 통한 성능 검증까지 진행할 예정이다.
'머신러닝 활용 품질관리' 카테고리의 다른 글
| Chapter.8 머신러닝 활용 품질관리(6) (0) | 2026.06.23 |
|---|---|
| Chapter.8 머신러닝 활용 품질관리(5) (0) | 2026.06.22 |
| Chapter.8 머신러닝 활용 품질관리(4) (0) | 2026.06.19 |
| Chapter.8 머신러닝 활용 품질관리(2) (0) | 2026.06.16 |
| Chapter.8 머신러닝 활용 품질관리(1) (0) | 2026.06.15 |