logo

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 / 28맞음: 0힌트: 0틀림: 0채점중: 0남음: 28

【개념: 혼동행렬】실제로는 이상(1)인데 모델이 정상(0)으로 예측했습니다. 무엇에 해당하나요?

  • ○위음성(FN)
  • ○위양성(FP)
  • ○진양성(TP)
  • ○진음성(TN)

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.