심화프로젝트

심화프로젝트 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가 낮기 때문에, 이들 간의 직접적인 관계는 낮다고 볼 수 있습니다.

나왔다곤했지만 유의미 하다고 볼순 없어서 다른 방법으로 시도해봐야할것 같다. 모델을 학습시키거나 하이퍼파라미터를 수정해서 더 해보도록 하겠다