2025 내일배움캠프 QAQC_2기

2025 내일배움캠프 QAQC_2기 본캠프 41일차

mingdoremi 2025. 7. 9. 20:57

안녕하세요! 오늘은 본캠프 41일차입니다!

 

프로젝트 4일차날이에요!

어제 저녁에 데이터가 바뀌어서 아예 새로 하는 중입니다!

각자 도메인 조사 후 가설을 세워서 그 가설이 맞는지 데이터를 분석하는 시간을 가졌습니다!!

 

저는 Speed 컬럼을 집중해서 가설을 세웠습니다.

 

🚗 1. Speed가 높을수록 연료 소비량(L/H)은 증가한다.

  • 자동차는 일반적으로 속도가 높을수록 연료 소비량이 증가합니다.
  • 특히 고속 주행 시 엔진 부하가 커지고 연료 분사량도 증가함.
  • 하지만 일정 속도(예: 80~100km/h) 이상에서는 효율성이 떨어져 오히려 연비가 나빠질 수도 있음.
  • 귀무가설(H₀): Speed와 Consumption L/H 사이에는 유의미한 상관관계가 없다.
  • 대립가설(H₁): Speed가 증가할수록 Consumption L/H도 유의미하게 증가한다.
import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(7, 5))
sns.regplot(x='Speed', y='Consumption L/H', data=df, scatter_kws={'alpha': 0.5}, line_kws={'color': 'red'})
plt.title('Speed vs Fuel Consumption (L/H)')
plt.xlabel('Speed (km/h)')
plt.ylabel('Fuel Consumption (L/H)')
plt.grid(True)
plt.tight_layout()
plt.show()
# 상관계수 계산
from scipy.stats import pearsonr

corr, p_value = pearsonr(df['Speed'], df['Consumption L/H'])
print(f'Pearson correlation: {corr:.4f}, p-value: {p_value:.4f}')
Pearson correlation: 0.6033, p-value: 0.0000

P-value = 0.0000 < 0.05 이므로 대립가설 채택

❗️Speed에 따라 Consumption L/H 값의 유의미하게 증가한다.

 

속도 구간별 소비량 평균 보기 (바 플롯)

# 속도 구간별 소비량 평균 보기 (바 플롯)

# 속도를 구간화 (예: 0~30, 30~60, ...)
df['Speed_bin'] = pd.cut(df['Speed'], bins=[0, 30, 60, 90, 120, 150, 180], labels=['0-30','30-60','60-90','90-120','120-150','150-180'])

# 구간별 연료 소비량 평균
plt.figure(figsize=(7, 5))
sns.barplot(x='Speed_bin', y='Consumption L/H', data=df, estimator='mean', palette='coolwarm')
plt.title('Average Fuel Consumption by Speed Range')
plt.xlabel('Speed Range (km/h)')
plt.ylabel('Avg. Fuel Consumption (L/H)')
plt.grid(True)
plt.tight_layout()
plt.show()

 

결론도출

  • 산점도와 회귀선에서 명확한 양의 추세가 보인다
  • Pearson 상관계수와 p-value는 유의미하다.
  • 속도 구간별 평균 연료소비량은 속도 증가에 따라 함께 증가한다.

→ 가설은 지지된다.

 

🔹 인사이트 도출 고속 주행 구간에서는 연료 소비가 비례적으로 증가하므로 차량의 연비 최적화 및 친환경 운전 가이드를 설계할 때 기준 속도 설정에 활용 가능하다.

 

🚗 2. 속도가 일정 수준을 초과하면 Fault 발생 가능성이 높아진다

• 높은 속도에서 엔진 부하, 발열, 연료/공기 혼합의 불균형이 결함 원인이 될 수 있음.

  • 귀무가설(H₀): 속도(Speed)에 따라 Fault 발생률에 유의미한 차이가 없다.
  • 대립가설(H₁): 속도가 증가할수록 Fault 발생 비율이 유의미하게 증가한다.

결함별 평균 속도 비교

df.groupby('Fault')['Speed'].mean()
#결과

	Speed
Fault	
0	46.277450
1	48.007492
2	56.789499
3	55.299597

 

Fault값 이진으로 변환 0이면 정상, 1~3은 결함

# Fault: 0이면 정상, 1~3은 결함으로 변환
df['Fault_Binary'] = df['Fault'].apply(lambda x: 0 if x == 0 else 1)

import seaborn as sns
import matplotlib.pyplot as plt

plt.figure(figsize=(6, 5))
sns.boxplot(x='Fault_Binary', y='Speed', data=df, palette='Set2')
plt.title('Speed by Fault Presence (0: 정상, 1: 결함)')
plt.xlabel('Fault Binary')
plt.ylabel('Speed (km/h)')
plt.grid(True)
plt.tight_layout()
plt.show()

시각적으로 보았을 때, Fault=1일 때 중앙값이 더 높다.

from scipy.stats import kruskal

group0 = df[df['Fault_Binary'] == 0]['Speed']
group1 = df[df['Fault_Binary'] == 1]['Speed']

stat, p = kruskal(group0, group1)
print(f'Kruskal-Wallis test: stat = {stat:.4f}, p-value = {p:.4f}')
# 결과

Kruskal-Wallis test: stat = 2066.1021, p-value = 0.0000

P-value = 0.0000 < 0.05 이므로 대립가설 채택

❗️Speed에 따라 Fault 값의 유의미한 차이가 있다.

 

 

속도 구간별 Fault 발생률 확인

df['Speed_bin'] = pd.cut(df['Speed'], bins=[0, 30, 60, 90, 120, 150, 180], labels=['0-30','30-60','60-90','90-120','120-150','150-180'])

# 각 구간의 결함률 계산
fault_rate_by_speed = df.groupby('Speed_bin')['Fault_Binary'].mean().reset_index()

sns.barplot(x='Speed_bin', y='Fault_Binary', data=fault_rate_by_speed, palette='coolwarm')
plt.title("Fault Rate by Speed Range")
plt.ylabel("Fault Rate")
plt.xlabel("Speed Range (km/h)")
plt.grid(True)
plt.tight_layout()
plt.show()

 

결론도출

  • 결함(Fault)의 평균 Speed가 정상보다 높다.
  • Kruskal-Wallis에서 p-value < 0.05이다.

→ 속도가 높아질수록 Fault 비율이 점점 증가한다.

 

🔹 인사이트 도출

속도 증가가 특정 결함 발생과 유의미하게 관련되어 실시간 차량 모니터링 시스템에서 속도 기반 위험 감지 알고리즘에 적용 가능하다. 일정 속도 이상 구간에서 사전 점검이나 운전자 알림 시스템을 적용할 수 있다.

 

 

오늘도 수고하셨습니다!!