상관관계 확인

행동하는 개발자·2023년 7월 10일
0

PHM

목록 보기
39/43

데이터의 상관관계를 확인하는 코드는 다음과 같다.

import pandas as pd
import numpy as np

corr_matrix = df.corr().abs()
threshold = 0.8

for column in corr_matrix:
    correlated_cols = corr_matrix[column][corr_matrix[column] > threshold].index.tolist()
    correlated_cols.remove(column)
    if correlated_cols:
        print(column)

데이터에 상관관계가 0.8보다 큰 열이 많은 상황에 직면했을 때, 변수 간의 다중공선성이 높다는 것을 의미한다. 다중공선성은 불안정한 계수 추정 및 개별 변수가 대상 변수에 미치는 영향을 해석하는 일에서 문제를 일으킬 수 있다.

해결방법은 다음과 같다.

  1. 중복 변수 제거

  2. 기능 선택 기술: RFE, Lasso 정규화, pca 분석

  3. 정규화 기술: Ridge 회귀, Elastic Net

  4. 도메인 지식 활용

  5. 더 많은 데이터 수집

  6. 중복 변수를 제거하는 코드는 다음과 같다.

import pandas as pd
import itertools
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

data = pd.read_csv('your_dataset.csv')
target_column = 'target'  # Replace 'target' with your actual target column name

features = data.drop(target_column, axis=1)
target = data[target_column]

column_names = features.columns
highest_accuracy = 0.0
best_feature_column = None

for num_columns_to_remove in range(1, min(21, len(column_names) + 1)):
    combinations = itertools.combinations(column_names, num_columns_to_remove)
    for comb in combinations:
        subset_features = features.copy()
        subset_features.drop(list(comb), axis=1, inplace=True)

        X_train, X_test, y_train, y_test = train_test_split(subset_features, target, test_size=0.2, random_state=42)

        model = LogisticRegression()
        model.fit(X_train, y_train)
        y_pred = model.predict(X_test)
        accuracy = accuracy_score(y_test, y_pred)

        if accuracy > highest_accuracy:
            highest_accuracy = accuracy
            best_feature_column = comb

        print(f"Columns removed: {comb}\tAccuracy: {accuracy}")

print(f"\nBest feature column: {best_feature_column}\tHighest accuracy: {highest_accuracy}")

30개의 컬럼을 가지고 있는 데이터라고 한다면 2개부터 20개까지 itertools를 이용해서
빠짐없이 모든 경우의 수를 확인하여 정확도가 가장 높은 결과를 보인 것을 보여준다.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글

관련 채용 정보