TIL(Today I Learned)
1️⃣심화 프로젝트
데이터 정제 및 스케일링 계획
- HC: 하위 이상치 삭제
- CO: 로그를 씌워 안정화
변수 삭제
- 도메인 지식
- Consumption L/100km vs Consumption L/H : 엔진 부하를 보기 위해 → Consumption L/H 채택 / Consumption L/100km 삭제
- Force : TPS 스로틀이 열리는 정도에 따라 토크가 증가 →TPS와 상관계수가 높고 TPS로 설명가능, RPM x Force =Power로 RPM과 Power로 Force 설명 가능 → Force 삭제
- MAP : TPS → 운전자가 액셀 밟아 스로틀이 열리는 정도(원인), MAP → 스로틀이 열려서 들어온 공기압 (결과) → MAP는 TPS의 결과로 상관관계가 높게 비례 → MAP 삭제
- 상관계수 확인
- Speed & RPM : 상관계수가 1.00이다. 즉, 엔진 회전수와 속도가 완벽하게 일치하는 패턴을 보이므로 둘 중 하나는 삭제해도 무방하다. → Speed 삭제
- AFR (Air-Fuel Ratio) & Lambda: 상관계수가 1.00이다. 이론적으로도 람다는 AFR을 최적 비율로 나눈 값이기 때문에 중복 데이터입니다. → AFR 삭제
- 사용 X
- cluster 삭제
- VIF 확인

- VIF 값 : 다중공선성이 심각하다고 판단하며, 조치가 필요하다.
- CO 와CO2 을 통해 CO_CO2_ratio 를 만들었기에, 다중공산성 및 논리적 중복을 피하기 위해 → CO ,CO2 삭제
- Lambda 을 통해 lambda_dev 를 만들었기에, 다중공산성 및 논리적 중복을 피하기 위해 → Lambda 삭제
파생변수 생성
- Fault 1 구분용
- 연소 효율 지표 (CO/CO2 Ratio)
- 엔진 품질 관리의 핵심 변수
- df['CO'] / df['CO2']
- CO2는 **완전 연소(연소 효율성)**의 산물이고 CO는 **불완전 연소(환경 오염)**의 산물이다. 이 비율이 급격히 상승한다면 점화 플러그 이상, 인젝터 막힘 등 ‘연소실 내부 결함’을 의미한다.
- 낮은 비율(Good)
- 투입된 연료가 산소와 충분히 결합하여 CO2로 변환된다. 엔진의 연소 효율이 좋고, 연료 낭비와 유해 가스 배출이 적은 상태
- 높은 비율(Bad)
- 연료가 타다 말아서 CO 상태로 배출되는 비중이 높다. 이는 곧 ‘에너지 손실’과 ‘엔진 결함’을 의미한다.
- 하드웨어 문제
- 농후 혼합기 (Rich Mixture)
- 엔진에 들어가는 연료량이 공기량에 비해 너무 많음
- 인젝터 누설, 산소 센서 고장 등
- 농후 혼합기 (Rich Mixture)
- 엔진의 제어 정밀도와 연소 상태의 이탈 정도를 정량화한 지표 lambda_dev
- df['lambda_dev'] = abs(df['Lambda'] - 1.0)
- 정상 상태 (Fault 0): lambda_dev 값이 0에 매우 가깝고 변동폭이 작습니다. (시스템이 목표값을 잘 추종함.
- 농후 결함 (Fault 1): 연료 과다 공급으로 인해 lambda가 1보다 작아지므로, lambda_dev 수치가 눈에 띄게 커집니다.
- 희박 결함 (Fault 2, 3): 공기 과다 또는 연료 부족으로 lambda가 1보다 커지며, 역시 이탈량이 발생합니다.
- df['lambda_dev'] = abs(df['Lambda'] - 1.0)
- Fault 2, 3 구분용
- O2_RPM_Effect
- df[O2_RPM_Effect] = df['O2']**2 / (df['RPM'] / 1000)
- O2: 산소 농도의 변화를 제곱함으로써, 미세한 산소량 증가보다 급격한 산소 농도 상승(연소 불량 등) 시 수치 증가
- RPM/1000 (분모): 회전수가 낮을수록 전체 수치 증가. 즉, 고회전에서 발생하는 일반적인 산소 변화보다는 저회전/아이들링 상태에서의 산소 잔류 현상을 타겟
- df[O2_RPM_Effect] = df['O2']**2 / (df['RPM'] / 1000)
- O2_RPM_Effect
- 연소 효율 지표 (CO/CO2 Ratio)
통계 검정
검정 단계
- 1단계 — Shapiro-Wilk W 통계량 막대 + Q-Q plot
- 2단계 — Kruskal-Wallis H 통계량 → 변수 3개 이상
- 3단계 — Dunn's test 히트맵
- 4단계 — Cohen's d 막대 + O2_RPM_Effect KDE
1단계: Shapiro-Wilk W 통계량 막대 + Q-Q plot
- 분석 내용: 데이터가 이상적인 종 모양(정규분포)을 따르는지 Shapiro-Wilk 검정을 수행
- 결과값
| 변수 | W (Shapiro-Wilk) | p-value | 왜도 (skew) |
| TPS | 0.6057 | 4.27e-75 | 2.35 |
| Power | 0.6366 | 2.11e-73 | 2.12 |
| RPM | 0.9171 | 4.21e-46 | 0.85 |
| Consumption L/H | 0.7895 | 1.46e-62 | 2.16 |
| HC | 0.3471 | 5.03e-86 | 6.16 |
| CO_CO2_ratio | 0.6021 | 2.73e-75 | 3.02 |
| CO_log | 0.8577 | 2.50e-55 | 1.23 |
| O2_RPM_Effect | 0.7404 | 1.30e-66 | 1.99 |
| lambda_dev | 0.7744 | 6.94e-64 | 2.05 |
| O2 | 0.9370 | 9.41e-42 | 0.53 |
- QQ-Plot 시각화

- 결과: 모든 변수에서 귀무가설이 기각 (데이터가 비대칭이거나 이상치가 많음).
- 결정: 평균 대신 순위를 사용하는 비모수 검정 방식을 최종 채택
2단계: Kruskal-Wallis H 통계량
- 분석 내용: 고장 유형(Fault 0~3)에 따라 센서 데이터에 차이가 있는지 확인
- 시각화

- HC (탄화수소), CO_log, CO_CO2_ratio, lambda_dev, RPM
- H-statistic이 매우 높고(약 4,000 이상), 값이 거의 0()에 수렴한다.
- 해석: 이 센서들은 엔진 결함 발생 시 수치 변화가 가장 뚜렷하다. 특히 HC와 CO 관련 지표들의 H값이 압도적으로 높은데, 이는 엔진 연소 상태와 배출가스 데이터가 결함 예측의 핵심 변수임을 알 수 있다.
- O2_RPM_Effect, TPS, Power
- H-statistic이 500~1,000 사이에 위치하며, 값은 매우 낮지만 최상위 지표들보다는 영향력이 적다.
- 해석: 결함 구분에 유의미한 도움을 주지만, 배출가스 데이터만큼 강력한 구분 기준은 아니다.
- Consumption L/H, O2
- H-statistic이 가장 낮고 보라색에 가깝다.
- 해석: 물론 로 통계적 유의성은 확보했으나, 다른 센서들에 비해 결함 유형별 데이터의 중첩이 많아 변별력이 상대적으로 떨어진다.
- p<0.05
- 결과: 선정된 10개 변수 전부 통계적으로 유의미한 차이를 보였습니다.
- 결정: 모든 변수가 결함 진단에 잠재적 가치가 있다고 판단, 사후검정으로 진행
3단계: Dunn's test 히트맵
- 분석 내용: 던 검정(Dunn's test)을 통해 특히 F2와 F3 고장을 명확히 구분하는 변수 대조
- 시각화

- 결과: 여러 번 비교 시 발생하는 오류를 막기 위해 Bonferroni 보정을 적용
- 발견:
- 변별력이 높은 센서 (짙은 파란색이 많은 행)
- HC (탄화수소)
- 모든 결함 쌍( 포함)에 대해 유의미한 차이를 보인다. 이는 엔진 결함 유형을 구분하는 데 가장 핵심적인 지표
- O2_RPM_Effect, RPM, CO_log
- 대부분의 결함 조합을 효과적으로 구분
- HC (탄화수소)
- 특정 결함 쌍에 취약한 센서 (흰색/ns가 많은 열)
- 0 vs 1
- 0번과 1번 결함을 구분할 때는 배출가스 농도보다는 물리적인 출력이나 스로틀(TPS) 데이터가 더 유용
- 2 vs 3
- HC, O2_RPM_Effect, RPM 등은 여전히 유의미한 차이(*)를 유지하며 두 결함을 구분하는 기준
- 0 vs 1
- 변별력이 높은 센서 (짙은 파란색이 많은 행)
4단계: 최종 변수 확정 (핵심 변수 도출)
- 최종 결론: VIF로 다중공선성을 줄였던 10개 변수 중, 실질적으로 고장 유형을 판별하는 '결정적 증거'는 O2 계열 변수 2개 입증
- 활용 계획: 향후 모델 고도화 시 이 핵심 변수들에 집중하여 진단 알고리즘의 효율성과 정확도를 높일 수 있습니다.
💡 느낀점
목표로 했던 데이터 전처리 과정 완료와 불필요 컬럼을 제거하는 정제를 하며 데이터의 활용 방향이 잡혀가는 것 같았다. 파생변수를 생성하고 다중공선성을 줄여가는 과정을 통해 변수 간의 관계를 확인하고 가설에 따라 구성한 파생변수에 큰 기대가 생겼다. 통계검정을 통해 검정을 진행한 결과 변수간의 연관성을 확인할 수 있었고, 도메인 지식과 그래프를 분석하여 예측한 파생변수가 실제 영향력이 있었음을 확인하여 뿌듯하였다. 이후 머신러닝 학습을 진행하고 정확도나 지표들을 측정해 효율적인 모델을 생성할 예정이다.
'심화 프로젝트' 카테고리의 다른 글
| Chapter.5 심화 프로젝트(6) (0) | 2026.05.08 |
|---|---|
| Chapter.5 심화 프로젝트(5) (0) | 2026.05.07 |
| Chapter.5 심화 프로젝트(4) (0) | 2026.05.04 |
| Chapter.5 심화 프로젝트(2) (0) | 2026.04.30 |
| Chapter.5 심화 프로젝트(1) (0) | 2026.04.29 |