4일차 복습
냉각설비 데이터 하나로 분류 평가·문턱값·ROC와 PR·앙상블·군집화·PCA·이상치 탐지를 복습하는 기초 28문항
퀴즈
- 총 28문항: 개념 확인·직접 실행·결과 해석을 섞은 기초 복습
- 공통 준비 코드를 실행한 뒤 문제 순서대로 진행. 막히면 힌트의 코드와 실행 결과 참고
- 코드를 직접 작성하거나 AI에 요청한 뒤 실행 결과를 확인해도 좋음
- 수치 답은 소수 셋째 자리까지 입력. 비율은 0~1 사이 값으로 입력(예: 80%이면 0.8)
- 19번에서 만든
X_scaled를 실루엣 계수와 PCA에도 사용
실습 준비
파일을 Colab 또는 Jupyter의 현재 폴더에 업로드한 뒤 실행하세요.
pip install pandas openpyxl scikit-learn
- 한 행: 냉각설비의 한 운전 구간. 전체 9,000건, 정상 6,300건·이상 2,700건(양성 30%)
- 운전 유형: 저부하 보관·일반 냉각·급속 냉동, 각 3,000건
- 이상 상태: 냉매 누설·기계 결함·센서 오류, 각 900건
| 열 | 의미 |
|---|---|
record_id |
기록 식별자. 학습 입력에서 제외 |
cooling_load_pct |
냉각 부하(%) |
outside_temp_c |
외기 온도(°C) |
compressor_power_kw |
압축기 소비전력(kW) |
suction_pressure_kpa, discharge_pressure_kpa |
흡입·토출 압력(kPa) |
evaporator_temp_c, condenser_temp_c, compressor_temp_c |
증발기·응축기·압축기 온도(°C) |
vibration_mm_s |
진동 속도(mm/s) |
energy_use_kwh |
구간 에너지 사용량(kWh) |
operation_profile |
실제 운전 유형. 학습 입력에서 제외 |
anomaly_type |
실제 상태. 분류 정답 생성에만 사용 |
- 분류: 실제 상태로 정상 0·이상 1 정답을 만들고, 이상을 양성 클래스로 지정
- 학습·검증·테스트를 60%·20%·20%로 분할
- 검증 자료에서 지표와 문턱값 비교. 테스트 자료는 최종 평가용으로 보관
- 군집화·PCA: 같은 10개 측정 변수만 사용. 정답 열은 학습 입력에서 제외
- 전체 기록을 탐색하는 실습이므로 전체
X를 표준화 - 예측 모델의 전처리로 사용할 때는 학습 자료로만 표준화와 PCA를 학습
- 전체 기록을 탐색하는 실습이므로 전체
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
df = pd.read_excel("refrigeration_operations.xlsx")
features = [
"cooling_load_pct", "outside_temp_c", "compressor_power_kw",
"suction_pressure_kpa", "discharge_pressure_kpa", "evaporator_temp_c",
"condenser_temp_c", "compressor_temp_c", "vibration_mm_s", "energy_use_kwh",
]
X = df[features]
y = (df["anomaly_type"] != "normal").astype(int) # 정상 0, 이상 1
X_train_valid, X_test, y_train_valid, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y, # 클래스 비율 유지
)
X_train, X_valid, y_train, y_valid = train_test_split(
X_train_valid, y_train_valid, test_size=0.25, random_state=42,
stratify=y_train_valid, # 전체의 60% 학습, 20% 검증, 20% 테스트
)
# 여러 나무의 확률을 평균하는 앙상블 모델
model = RandomForestClassifier(
n_estimators=200, # 결합할 결정트리 수
random_state=42,
)
model.fit(X_train, y_train)
prob_valid = model.predict_proba(X_valid)[:, 1] # 검증 데이터로 계산한 이상 확률
y_pred_05 = (prob_valid >= 0.5).astype(int) # 문턱값 50%에서 이상 여부 예측
df.shape # 행 수와 열 수
실행 결과
(9000, 13)
- 측정 변수 10개와 식별자·정답 정보 3개로 구성
- 아래 문제의 분류 지표는 모두 동일한 검증 자료로 계산
【개념: 혼동행렬】실제로는 이상(1)인데 모델이 정상(0)으로 예측했습니다. 무엇에 해당하나요?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.