Data Preprocessing 잡생각

2020. 4. 19. 21:42분석 Python/Data Preprocessing

728x90

데이터 분석시 전처리에 대해서 어떻게 하는지 좋을지가 헷갈린다.

흔히 하는 말로 Garbage in Garbage out 라고 해서 참 중요하다고 한다.
하지만 딥러닝에서는 대충 처리하면 안에서 data representation까지 해준다라는 느낌이 강한 것 같다.

위의 그림처럼 대충 크게 이상하지 않은 것을 넣으면, 알아서 학습하면서 좋은 feature를 만들어주는 것인지...
하지만 대충 넣으면 train와 test 간에 overfitting 문제도 발생시키는 것 같다. 

일단 주로 딥러닝 기반으로 필자는 자주 하기 때문에 딥러닝 기반에서 어떻게 전처리를 하면 좋을지를 중점적으로 잡생각들을 써보려고 한다.


tree 기반 알고리즘

분기점을 나누는 방식이기 때문에 정규화가 딱히 필요없음.

 CART, Random Forests, Gradient Boosted Decision Trees


회귀 문제

각 변수마다 정규성을 띄는 게 좋은 것 같다.

  • 시계열 
    • 표준화
      • box-cox
      • standardization
    • Normalization
      • min max
    • Order of Data Transformation
    • Seasonal Difference
    • Trend Difference
  • 데이터 분포
    •  왜도(skewness)
      • 기대하는 효과 : clip시 정규분포처럼 될 수 있게 하거나, outlier에 대한 영향도를 줄일 수 있기를 기대함.
      • 위험 요소 : bimodal한 형태가 나올 수 있음. 정확한 quantile을 정할수가 없어서 일반화되게 하기 어려움. 
      • 오른쪽으로 길 경우
        • (0,0.90) 으로 clipping
      • 왼쪽으로 길 경우
        • (0.1,1.0)으로 길 경우
    • 연속형 
      • (연속형 변수, 비연속형 변수)
      • 연속형 변수(양,수)
        • 정규분포
          • 표준화 (standardization) 
        • 정규분포 아닐 경우
          • 정규분포로 만들고 싶은 경우 
            • box-cox (정규화로 맞추주는 작업 주로함)
          • 분포 자체를 그냥 하고 싶은 경우
            • min-max 같은 경우는 별로 사용안하는 듯
      • 비연속형 변수(이산형 자료)(나이, 유저 클릭수 등)
        • 정규분포
          • 표준화해도 괜찮을 듯
        • skew가 있는 데이터
          • bindding -> one hot -> 범주형으로 처리
            • 그러나 데이터 손실의 영향이 있음.
          • caption 주기?
            • 늘어나는 숫자에 train 기준에 맞춰서 제한을 주기
              • 하지만 이렇게 되면, bimodal 같은 형태가 되어버릴 수 있음 그러므로 bindding 이 적절할지?
    • 범주형
      • one-hot
      • embedding
  • 아웃라이어 있는 경우
    • 연속형
      • caption으로대체
        • bimodal 형태와 적절한 quantile 값 어떻게 해야할 지
      • remove
        • 데이터 손실 적절한 quantile을 어떻게 해야할 지?
      • bindding
        • 정보 손실
      • robust scaler
        • 회귀 분석 같은 경우에는 정규화로 해도 되기 때문에 무난할 듯

 


분류 문제

회귀분석과 거의 유사하지만, 연속형 변수에서 고민되는 경우가 있음. 
회귀분석과는 다르게 연속형 변수가 정규 분포가 아닐 경우 정규 분포로 만들 필요가 없다고 생각함.
왜냐하면 분포를 변형하는 것이기 때문에 이것도 역시 정보 손실이라 생각

  • 데이터 분포
    • 연속형 
      • (연속형 변수, 비연속형 변수)
      • 연속형 변수(양,수)
        • 정규분포
          • 표준화 (standardization) 
        • 정규분포 아닐 경우
          • minmax
            • outlier에 의해서 한쪽 쏠림현상이 너무 강할 수 있음. 
              • 이런 경우 boxcox 변환으로 정규분포화하면 효과가 있을지? 괜히 바꿔봤자 의미없을 것 같기도 하고 (혼란)
      • 비연속형 변수(이산형 자료)(나이, 유저 클릭수 등)
        • 정규분포
          • 표준화해도 괜찮을 듯
        • skew가 있는 데이터
          • outlier가 있는 경우
            • bindding -> one hot -> 범주형으로 처리
              • 그러나 데이터 손실의 영향이 있음.
            • caption 주기?
              • 늘어나는 숫자에 train max값 기준으로 제한을 주기
                • 하지만 이렇게 되면, bimodal 같은 형태가 되어버릴 수 있음 그러므로 bindding 이 적절할지?
          •  minmax
            • outlier가 없다면, 가장 무난하다고 생각 
          • 범주형 변수처럼 고유한 개수가 적을 경우(살짝 추상적 10개 이하?)
            • 범주형 변수처럼 만들고 더 숫자가 많아지면 마지막 범주에 몰아넣기? 
              • 크기에 대한 정보를 정보를 잃어서 적절하지 못한 것 같기도 함. 
    • 범주형
      • one-hot
      • embedding
  • 아웃라이어 있는 경우
    • 연속형
      • caption으로대체
        • 그러나 bimodal 형태와 적절한 quantile 값 어떻게 해야할 지
      • remove
        • 데이터 손실 적절한 quantile을 어떻게 해야할 지?
      • bindding
        • 정보 손실
      • robust scaler
        • 분류 문제 같은 경우에 outlier에 대해서 robust scaler를 쓰는 것이 적절한지 모르겠음

 

 

 

 

 

 

 

 

https://towardsdatascience.com/all-about-feature-scaling-bcc0ad75cb35?source=bookmarks---------2------------------

 

All about Feature Scaling

Scale data for better performance of Machine Learning Model

towardsdatascience.com

https://towardsdatascience.com/representation-power-of-neural-networks-8e99a383586

불러오는 중입니다...
728x90