심화프로젝트
심화프로젝트 2일차 -TIL
이준민1
2024. 6. 18. 20:07
머신러닝 심화 프로젝트를 진행하며 오늘 있었던 가장 큰 문제는 EDA를 통해 유의미한 시각화가 나오지 않아서
튜터님께 찾아가서 질문을 드렸더니 EDA로 유의미한 인사이트를 도출하는것보다 머신러닝을 학습시키고 유의미한 결과가 나올때까지 하이퍼파라미터나 모델을 업그레이드 및 전처리를 하여 평가를 유의미하게 만들어보라고 하셔서 그렇게 하기로 했다.
모델학습방법: 데이터 샘플링 - 제일 관련없는 피쳐를 삭제해나가는 과정
오늘 내 역할은 칼럼간의 상관관계 분석을 해보는 거였는데
for 문으로 칼럼간의 상관관계 분석하는 법을 고안해서 해봤다 LinearRegression, Decision Tree Regressor
# 각 칼럼을 X와 y로 하여 선형 회귀 모델의 성능 평가
for x_column in columns:
for y_column in columns:
if x_column != y_column: # X와 y가 동일하지 않은 경우에만 실행
X = df[[x_column]]
y = df[y_column]
# 학습 데이터와 테스트 데이터로 분리 (70% 학습, 30% 테스트)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 선형 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X_train, y_train)
# 테스트 데이터에 대한 예측 수행
y_pred = model.predict(X_test)
# 성능 평가
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
rmse = np.sqrt(mse)
# 결과 출력
print(f"X: {x_column}, y: {y_column}")
print(f"Mean Squared Error (MSE): {mse}")
print(f"Mean Absolute Error (MAE): {mae}")
print(f"R^2 Score: {r2}")
print(f"Root Mean Squared Error (RMSE): {rmse}")
print("-" * 50)
# 각 칼럼을 X와 y로 하여 선형 회귀 모델의 성능 평가
for x_column in columns:
for y_column in columns:
if x_column != y_column: # X와 y가 동일하지 않은 경우에만 실행
X = df[[x_column]]
y = df[y_column]
# Train/test 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Decision Tree Regressor 모델 생성 및 학습
model = DecisionTreeRegressor(random_state=42)
model.fit(X_train, y_train)
# 테스트 데이터로 예측
y_pred = model.predict(X_test)
# 모델 평가
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
rmse = np.sqrt(mse)
# 결과 출력
print(f"X: {x_column}, y: {y_column}")
print(f"Mean Squared Error (MSE): {mse}")
print(f"Mean Absolute Error (MAE): {mae}")
print(f"R^2 Score: {r2}")
print(f"Root Mean Squared Error (RMSE): {rmse}")
print("--------------------------------------------------")
이것으로 각 칼럼간의 모든 MSE MAE R2 RMSE를 볼수 있었는데
Decision Tree Regressor에서
- Weekly_Sales와 다른 변수들 간의 관계:
- Weekly_Sales와 Dept 간의 R^2 Score가 0.54로 비교적 높습니다. 이는 Dept가 Weekly_Sales를 예측하는 데 중요한 요소임을 시사할 수 있습니다.
- 반면 Weekly_Sales와 IsHoliday 간의 관계는 R^2 Score가 음수에 가까워서 관련성이 낮음을 시사합니다.
- 다른 변수들 간의 관계:
- CPI와 Temperature 간의 R^2 Score가 0.75로 높습니다. 이는 두 변수가 서로에게 유의미한 영향을 미칠 수 있음을 나타냅니다.
- 반면 IsHoliday와 Weekly_Sales 간의 R^2 Score가 음수에 가깝기 때문에, 이 두 변수 간의 관계는 매우 약하거나 비선형적일 가능성이 큽니다.
- Unemployment와 다른 변수들 간의 관계:
- Unemployment와 CPI 간의 R^2 Score가 0.93으로 높습니다. 이는 두 변수가 서로에게 유의미한 영향을 미치는 것으로 보입니다.
- 반면 Unemployment와 IsHoliday 간의 관계는 R^2 Score가 낮기 때문에, 이들 간의 직접적인 관계는 낮다고 볼 수 있습니다.
나왔다곤했지만 유의미 하다고 볼순 없어서 다른 방법으로 시도해봐야할것 같다. 모델을 학습시키거나 하이퍼파라미터를 수정해서 더 해보도록 하겠다