본문 바로가기
Study (Data Science)/ML

EDA 노트

by 콜라찡 2022. 12. 14.
  • 상관계수의 절대값이 높다고 해서, 그 요소가 result의 원인이 되는 것은 아니다. breast cancer에서 softness error와 악성간의 상관계수지수가 높긴 했지만, 그렇다고 softness error가 암의 원인은 아니다.
  • 시각화하는 seaborn의 유형을 잘 고르면 내가 전달하고 싶은 말을 효과적으로 할 수 있다. seaborn 유형을 더 많이 이해해야할 필요가 있다. bike 3시 예측하는 eda에서 나는 시간별, 온도, 습도에 따른 count 비교를 하고 싶었지만, 그 유형을 찾는데 (violin) 많은 시간이 걸렸고, 더불어 시간적 제한으로 결국 구현해보지 못하고 제출했다.
  • duplicated는 전체로, index로 쓸 column 으로 각각 실행해야한다.

  • 이상치 (Outlier)
    • 백분위로 끊어보는법
      • train.loc[train['bedrooms'] > train['bathrooms'].quantile(0.999)]  99.9% 에 들어오지 않는 것들
    • 사분위로 끊어보는법 
from collections import Counter

def detect_outliers(df, n, features):
    outlier_indices = []
    for col in features:
        Q1 = np.percentile(df[col], 25)
        Q3 = np.percentile(df[col], 75)
        IQR = Q3 - Q1
        
        outlier_step = 1.5 * IQR
        
        outlier_list_col = df[(df[col] < Q1 - outlier_step) | (df[col] > Q3 + outlier_step)].index
        outlier_indices.extend(outlier_list_col)
    outlier_indices = Counter(outlier_indices)
    multiple_outliers = list(k for k, v in outlier_indices.items() if v > n)
        
    return multiple_outliers
  •  제거하기
Outliers_to_drop = detect_outliers(train, 2, ['price', 'bedrooms', 'bathrooms', 'sqft_living',
       'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'grade',
       'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode',
       'lat', 'long', 'sqft_living15', 'sqft_lot15'])
train.loc[Outliers_to_drop]
  • 이상치가 꼭 제거되어야 하는 것은 아니다. 이상한 것이 일관된 패턴이 있다면 의미있는 데이터이다. 
  • 상관계수는 이상치에 매우 영향을 받는다. 상관계수별 descending sort 해서 보고, 이상치 제거하고, 다시 sort 해보면 순위가 바뀌기도 한다.
  • features의 분포를 보는 것은 매우 중요하다. 보통 categorical일때 hue를 추가하여 각 category 별로 함께 보게 된다. 분포를 보는 그래프들을 많이 알아야 될듯.
  • 데이터를 보고 어떤 패턴을 찾으면, 단정짓지말고, 이렇게 생각하게 된 과정을 column별로 데이터 추가해 두는 것이 좋다. 그렇지 않으면 나의 bias가 들어가기 때문. 포켓몬도 이름이 길면 레전드가 되는 경향이 있다면, name_count와 name_count>=10 일 경우를 long_name으로 담아 boolin으로 표기되도록 columns 2개를 추가한다.
  •  
728x90

댓글