1차 프로토 타입은 서울의 송파구,강남구,서초구 3개의 자치구만 시행했었다.
2차 프로토 타입은 총 3가지의 모델을 만드는게 목표!
1. 분류모델_랜덤
#데이터 불러오기
df = pd.read_excel("2차_prototype_지도학습(분류)_랜덤_06271930.xlsx")
# 결측치 채워 넣기
df['지하수_수온_최대차'] = df['지하수_수온_최대차'].fillna(df['지하수_수온_최대차'].mean())
df['지하수_수온_변동성'] = df['지하수_수온_변동성'].fillna(df['지하수_수온_변동성'].mean())
df['지하수_EC_최대차'] = df['지하수_EC_최대차'].fillna(df['지하수_EC_최대차'].mean())
df['지하수_EC_변동성'] = df['지하수_EC_변동성'].fillna(df['지하수_EC_변동성'].mean())
# 범주형변수 One-hot Encoding
df1=pd.get_dummies(df,columns=['지층'])
import pandas as pd
import numpy as np
from scipy.stats import ttest_ind
# 가정: df는 전처리된 DataFrame
group_col = '싱크홀_발생' # 0=미발생, 1=발생
# 수치형 컬럼 자동 탐색
num_cols = df.select_dtypes(include=[np.number]).columns.tolist()
if group_col in num_cols:
num_cols.remove(group_col)
# 두 그룹 분리
group_1 = df[df[group_col] == 1]
group_0 = df[df[group_col] == 0]
# Welch's t-test 수행
results = []
for col in num_cols:
val1 = group_1[col]
val0 = group_0[col]
t_stat, p_val = ttest_ind(val1, val0, equal_var=False)
results.append({
'변수': col,
'발생_mean': round(val1.mean(), 4),
'미발생_mean': round(val0.mean(), 4),
'차이': round(abs(val1.mean() - val0.mean()), 4),
't-stat': round(t_stat, 4),
'p-value': round(p_val, 4),
'유의': '*' if p_val < 0.05 else ''
})
# 결과 정리
t_df = pd.DataFrame(results)
t_df = t_df.sort_values(by='p-value')
# 유의한 변수만 리스트로 추출
significant_cols = t_df[t_df['p-value'] < 0.05]['변수'].tolist()
# 결과 출력
print("\n=== Welch’s t-test 결과 (싱크홀 발생 vs 미발생) ===")
print(t_df.to_string(index=False))
print(f"\n✅ 유의한 변수 목록 ({len(significant_cols)}개):\n{significant_cols}")