✅ 오늘 한 것
머신러닝의 이해와 라이브러리 활용 심화, 베이직반 실시간 세션 복습
✏️ 오늘 배운 점
머신러닝의 이해와 라이브러리 활용 심화
이상치(Outlier): 보통 관측된 데이터 범위에서 많이 벗어난 아주 작은 값 혹은 큰 값
1. Extreme Studentized Deviation(ESD)를 이용한 이상치 발견
import numpy as np
mean = np.mean(data)
std = np.std(data)
upper_limit = mean + 3*std
lower_limit = mean - 3*std
2. IQR(Inter Quantile Range)를 이용한 이상치 발견
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1
uppper_limit = Q3 + 1.5*IQR
lower_limit = Q1 - 1.5*IQR
결측치(Missing Value): 존재하지 않는 데이터
- 결측치 처리 방법
- 수치형 데이터
- 평균 값 대치: 대표적인 대치 방법
- 중앙값 대치: 데이터에 이상치가 많아 평균 값이 대표성이 없다면 중앙 값을 이용
- 범주형 데이터
- 최빈값 대치
- 사용 함수
- sklearn.impute.SimpleImputer:평균, 중앙, 최빈값으로 대치
- SimpleImputer.statistics_ : 대치한 값 확인 가능
- sklearn.impute.IterativeImputer: 다변량대치(회귀 대치)
- sklearn.impute.KNNImputer: KNN 알고리즘을 이용한 대치
- sklearn.impute.SimpleImputer:평균, 중앙, 최빈값으로 대치
- 수치형 데이터
인코딩(Encoding): 범주형 데이터에 대한 전처리
1. 레이블 인코딩(Label Encoding)
- 정의: 문자열 범주형 값을 고유한 숫자로 할당
- 1등급 → 0
- 2등급 → 1
- 3등급 → 2
-
sklearn.preprocessing.LabelEncoder
-
메소드
- fit: 데이터 학습
- transform: 정수형 데이터로 변환
- fit_transform: fit과 transform을 연결하여 한번에 실행
- inverse_transform : 인코딩된 데이터를 원래 문자열로 변환
2. 원-핫 인코딩(One-Hot Encoding)
- 정의: 각 범주를 이진 형식으로 변환하는 기법
- 빨강 → [1,0,0]
- 파랑 → [0,1,0]
- 초록 → [0,0,1]
- pd.get_dummies
- sklearn.preprocessing.OneHotEncoder
- 메소드
- fit: 데이터 학습
- transform: 정수형 데이터로 변환
- fit_transform: fit과 transform을 연결하여 한번에 실행
- inverse_transform: 인코딩된 데이터를 원래 문자열로 변환
- categories_: 인코더가 학습한 클래스(범주)
- get_feature_names_out(): 학습한 클래스 이름(리스트)
# CSR 데이터 데이터프레임으로 만들기
csr_df = pd.DataFrame(csr_data.toarray(), columns = oe.get_feature_names_out())
# 기존 데이터프레임에 붙이기(옆으로)
pd.DataFrame([titaninc_df,csr_df], axis = 1)
스케일링(Scaling): 수치형 자료에 대한 전처리
1 .표준화(Standardization)
- 각 데이터에 평균을 빼고 표준편차를 나누어 평균을 0 표준편차를 1로 조정하는 방법
- 수식

- 함수: sklearn.preprocessing.StandardScaler
- 메소드
- fit : 데이터학습(평균과 표준편차를 계산)
- transform: 데이터 스케일링 진행
- 속성
- mean_: 데이터의 평균 값
- scale_, var_: 데이터의 표준 편차,분산 값
- n_features_in_: fit 할 때 들어간 변수 개수
- feature_names_in_: fit 할 때 들어간 변수 이름
- n_samples_seen_ : fit 할 때 들어간 데이터의 개수
- 정의: 데이터를 0과 1사이 값으로 조정(최소값 0, 최대값 1)
- 수식
- 메소드

- 함수: sklearn.preprocessing.MinMaxScaler
- 메소드
- fit : 데이터학습(평균과 표준편차를 계산)
- transform: 데이터 스케일링 진행
- 속성
- data_min_: 원 데이터의 최소 값
- data_max_: 원 데이터의 최대 값
- data_range_ : 원 데이터의 최대-최소 범위
- 메소드
3. 로버스트 스케일링(Robust Scaling)
- 정의: 중앙값과 IQR을 사용하여 스케일링.
- 수식

- 함수: sklearn.preprocessing.RobustScaler
- 속성
- center_: 훈련 데이터의 중앙값
- 속성
과적합(Overfitting): 데이터를 과도하게 학습한 나머지 해당 문제만 잘 맞추고 새로운 데이터를 제대로 예측 혹은 분류하지 못하는 현상
- 모형이 지나치게 복잡할 때 : 과대 적합이 될 수 있음
- 모형이 지나치게 단순할 때: 과소 적합이 될 수 있음
☑️ 과적합 해결 - 테스트 데이터의 분리
- 학습 데이터(Train Data): 모델을 학습(fit)하기 위한 데이터
- 테스트 데이터(Test Data): 모델을 평가 하기 위한 데이터
함수: sklearn.model_selection.train_test_split
- 파라미터
- test_size: 테스트 데이터 세트 크기
- train_size: 학습 데이터 세트 크기
- shuffle: 데이터 분리 시 섞기
- random_state: 호출할 때마다 동일한 학습/테스트 데이터를 생성하기 위한 난수 값. 수행할 때 마다 동일한 데이터 세트로 분리하기 위해 숫자를 고정 시켜야 함
- 반환 값(순서 중요)
- X_train, X_test, y_train, y_test
의사결정나무: 나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석 방법
- 장점
- 쉽고 해석하기 용이
- 다중분류와 회귀에 모두 적용이 가능
- 이상치에 견고하며 데이터 스케일링이 불필요(데이터의 상대적인 순서를 고려해서)
- 단점
- 나무가 성장을 너무 많이하면 과대 적합의 오류에 빠질 수 있다.
- 훈련 데이터에 민감하게 반응하여 작은 변화가 노이즈에도 나무의 구조가 크게 달라짐(불안정성)
- Python 라이브러리
- sklearn.tree.DecisionTreeClassifier
- sklearn.tree.DecisionTreeRegressor
의사결정나무는 과적합과 불안정성 문제가 많았기에 랜덤 포레스트를 활용하여 문제를 해결하였다.
☑️ 배깅(Bagging)의 원리
- 언제나 머신러닝은 데이터의 부족이 문제
- 이를 해결 하기 위한 Bootstrapping + Aggregating 방법론
- Bootstrapping: 데이터를 복원 추출해서 유사하지만 다른 데이터 집단을 생성하는 것
- Aggregating: 데이터의 예측,분류 결과를 합치는 것
- Ensemble(앙상블): 여러 개의 모델을 만들어 결과를 합치는 것
☑️ Tree를 Forest로 만들기
- 여러 개의 데이터 샘플에서 각자 의사결정트리를 만들어서 다수결 법칙에 따라 결론을 냄
☑️ 랜덤 포레스트 정리
- 장점
- Bagging 과정을 통해 과적합을 피할 수 있다.
- 이상치에 견고하며 데이터 스케일링이 불필요
- 변수 중요도를 추출하여 모델 해석에 중요한 특징을 파악 할 수 있다.
- 단점
- 컴퓨터 리소스 비용이 크다.
- 앙상블 적용으로 해석이 어렵다.
- Python 패키지
- sklearn.ensemble.RandomForestClassifer
- sklearn.ensemble.RandomForestRegressor
K-Nearest Neighbor(KNN): 주변의 데이터를 보고 내가 알고 싶은 데이터를 예측하는 방식
- 주변 데이터 K개를 선정 후에 거리 기준으로 가장 많은 것으로 예측하는 것이 바로 KNN의 기본 원리
☑️ 하이퍼 파라미터의 개념
- 파라미터(Parameter): 머신러닝 모델이 학습 과정에서 추정하는 내부 변수이며 자동으로 결정 되는 값
- Ex) 선형회귀에서 가중치와 편향
- (혼동주의) Python에서는 함수 정의에서 함수가 받을 수 있는 인자(입력 값)를 지정하는 개념
- 하이퍼 파라미터(Hyper parameter): 데이터 과학자가 기계 학습 모델 훈련을 관리하는데 사용하는 외부 구성변수이며 모델 학습과정이나 구조에 영향을 미침
☑️ KNN 모델의 정리
- 장점
- 이해하기 쉽고 직관적
- 모집단의 가정이나 형태를 고려하지 않음
- 회귀, 분류 모두 가능함
- 단점
- 차원 수가 많을 수록 계산량이 많아짐
- 거리 기반의 알고리즘이기 때문에 피처의 표준화가 필요함
- Python 라이브러리
- sklearn.neighbors.KNeighborsClassifier
- sklearn.neighbors.KNeighborsRegressor
부스팅(Boosting): 여러 개의 약한 학습기(weak learner)를 순차적으로 학습하면서 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선해나가는 학습 방식
- 부스팅 알고리즘 종류
- Gradient Boosting Model
- 특징
- 가중치 업데이트를 경사하강법 방법을 통해 진행
- Python 라이브러리
- sklearn.ensemble.GradientBoostingClassifier
- sklearn.ensemble.GradientBoostingRegressor
- 특징
- XGBoost
- 특징
- 트리기반 앙상블 기법으로, 가장 각광받으며 Kaggle의 상위 알고리즘
- 병렬학습이 가능해 속도가 빠름
- Python 라이브러리
- xgboost.XGBRegressor
- xgboost.XGBRegressor
- 특징
- LightGBM
- 특징
- XGBoost와 함께 가장 각광받는 알고리즘
- XGBoost보다 학습시간이 짧고 메모리 사용량이 작음
- 작은 데이터(10,000건 이하)의 경우 과적합 발생
- Python 라이브러리
- lightgbm.LGBMClassifier
- lightgbm.LGBMRegressor
- 특징
- Gradient Boosting Model
베이직반 복습
Pandas 라이브러리
- Series: 1차원 데이터 구조(리스트와 비슷하지만 인덱스를 포함).
- DataFrame: 2차원 데이터 구조(엑셀 시트와 유사).이 두 구조는 데이터를 효율적으로 저장하고 처리하는 데 필수적
- 데이터 전처리
import pandas as pd
import numpy as np
series = pd.Series(data)
df = pd.DataFrame(data)
# 정수형 인덱스로 접근
.iloc[]
# 인덱스 이름으로 접근
.loc[]
# 특정값이 포함되어 있는지 여부 확인
isin()
# 컬럼 삭제
df.drop(axis=1)
# 행 삭제
df.drop(axis=0)
# 결측치가 있는 행 제거
df.dropna()
# 결측치가 있는 열 제거
df.dropna(axis=1)
# 평균으로 대체(연속형 데이터)
df['컬럼명'].fillna(df['컬럼명'].mean())
# 중앙값으로 대체(이상치가 있을 때 추천)
df['컬럼명'].fillna(df['컬럼명'].median())
# 최빈값으로 대체(범주형 데이터)
df['컬럼명'].fillna(df['컬럼명'].mode())
# 행과 열 전치
df.transpose()
# 원하는 컬럼만 조회하기
print(df['컬럼명'])
# 컬럼 삭제
df = df.drop('컬럼명', axis= )
# 행 삭제
df.drop(index=' ', inplace=True(원본 df 변경) or False(새로운 df 생성))
# 컬럼별 결측치 개수
df.isnull().sum()
# 중복값 확인
df.duplicated().sum()
# 범주화 데이터 처리
df['컬럼명'] = pd.cut(df['컬럼명'], bins = bins, labels = labels, include_lowest=True)
# datetime 변환
df["날짜"] = pd.to_datetime(df["날짜"], format="mixed", errors="coerce")
--> format="mixed": 여러 형태의 날짜 데이터 통일화
--> errors: raise(에러 출력), ignore(그대로 남기기), coerce(결측치로 처리)
# datetime으로 타입 변환
df["date"] = pd.to_datetime(df["date"])
# 데이터 정렬
.sort_values(by="컬럼명", ascending=True(오름차순), False(내림차순))
# 인덱스 기준 데이터 정렬
.sort_index(ascending=True(오름차순), False(내림차순))
# KNN IMputation
from sklearn.impute import KNNImputer
imputer_knn = KNNImputer(n_neighbors=n)
데이터가 1000~5000 --> n=3~5
데이터가 5000~10000 --> n=7~10
df_knn_imputed = imputer_knn.fit_transform(df)
df_knn_imputed = pd.DataFrame(df_knn_imputed), columns=df.columns)
- 데이터 시각화
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 공통
plt.figure(figsize=(a, b))
# Line plot
plt.plot(data, label='이름', linewidth=숫자)
# Bar Plot
sns.catplot(kind='bar', data=data, x=x, y=y, hue='색상')
# Histogram
plt.hist(data, bins=bins(막대 개수), alpha=투명도(0.0~10.0) , label=label)
# Boxplot
sns.boxplot(x=x, y=y, data=data)
# Violine Plot
sns.violinplot(x=x, y=y, data=data, inner='quartile'(중앙값과 IQR 표시), palette=색상)
# KDE Plot
sns.kdeplot(data, label=label, fill=True(곡선 아래 영역 채우기), alpha=투명도(0.0~10.0))
✏️ 오늘의 핵심
데이터 타입·분포에 맞춘 결측/이상치 처리와 누수 없는 인코딩·스케일링을 표준화하고, 트리·앙상블·KNN의 전제조건을 지키면, 모델을 바꿔도 흔들리지 않는 재현 가능한 파이프라인이 됩니다.
📌추가로 해야할 점
통계 및 머신러닝 개인과제, 졸업시험
'품질관리(QAQC) 데이터 부트캠프(본캠프)' 카테고리의 다른 글
| 본캠프_8주차(월)_TIL (0) | 2025.11.03 |
|---|---|
| 본캠프_7주차(금)_TIL (0) | 2025.10.31 |
| 본캠프_7주차(수)_TIL(라이브러리 기초 정리) (0) | 2025.10.29 |
| 본캠프_7주차(화)_TIL(머신러닝 기초 정리) (0) | 2025.10.28 |
| 본캠프_7주차(월)_TIL(기초 통계 정리) (0) | 2025.10.27 |