데이터 정규화와 인코딩의 중요성

Rooney Donghoon Lee
5 min readOct 25, 2021

--

그동안 TadGAN, USAD 논문을 읽으면서 GAN, AE에 관한 지식? 이상치 탐지에는 어떤 형식의 모델이 있으며, 왜 이런 Loss를 사용했고, minimax loss function의 단점을 보완하기위해 생긴것이 cycle gan에 사용된 wasserstein loss이며. 유럽의 통신회사 Orange에서는 학습이 어려운 GAN모델 대신 적대적 학습모델을 차용한 AE모델을 만들었고… (이후 블로그에 정리해서 올릴예정)
왜 GAN에는 Random Input이 들어가는가? 등등 꼬리에 꼬리를 질문에 해답을 얻기위해 머리가 많이 아팠다.

논문을 읽고 공부하는것은 좋았지만, 그동안 모델을 만들어 본지도 오래고, 데이터를 만져 본지도 오래되어서. 다시 천천히 시작할만한게 무엇이 있을까 보다가 데이콘에 (초보자도 참여할 수 있는) 데이콘 Basic 이란게 있어서 참가해 보았다.

iris데이터셋을 사용한다고하여, “뭐야, iris 데이터셋이면 분류 문제인가보네… 이거 엄청 쉽겠네?” 라는 안일한 생각으로 참가를 했다.

Part 1 어?! 이거 분류문제가 아니네?

iris데이터셋은 대표적인 분류문제 였는데… 막상 데이터를 받고 submission.csv를 확인해보니… 꽃잎과, 꽃받침의 넢이로, 길이를 예측하는 문제 였다. 뭐 별일 아닐수도 있지만, “이런식으로도 문제를 낼 수 있네. 참신하다.” 라는 생각이 들었다.

처음에는 “어 뭐야 target을 여러개 내보내는 문제는 안해봤는데 어떻게 하지?” 모델을 어떻게 훈련시키더라…? (이래서 틈틈히 간단한 모델이라도 만들어 보는 연습을 해야한다.)

그동안 X_train은 [m,n] y_train 은 [m, 1] 형태로 훈련을 시켜왔는데…

구글갓에게 여쭈어 보니. multi output을 기본지원하는 모델이 있고, 그렇지 않은 모델들은 sklearn.multioutput 으로 한번 감싸주면 된다고 한다.

Part 2 — 뭐지… 왜 기본 Submission 모델도 못이겨?

본인이 참가할때 상위권 점수들은 평균 0.18정도 였다.

데이터셋이 [75*5] 이기 때문에, 이걸 Train, Valid로 나누기에는 너무 작았고, 만약, 훈련셋과 검증셋으로 나누더라고 꽃이 3종류 각30개, 30개, 15개로 나뉘어 있어서 제대로 훈련이 될지도 의문이 들었다.

우선은 Train, Validation으로 나누지않고 간단한 모델을 만들어 제출하여 성능으 확인해 보기로 하였다.

Trial & Error

각 꽃의 종류는 string으로 되어있어서 One-Hot Encoding만 하고 학습을 시켜보았다. 학습 결과 eval metric : MAE (낮을수록 성능이 좋음)

  1. Linear Regression — 5.0348574494
  2. KNN Regressor — 3.008666667

… 하아… Basic이라고 해서 엄청 쉽울거라고 기대 했는데, 기본제출 스코어2.075보다 좋은 성능을 못내서 당황했다.

그… 그럼… 성능이 가장 좋았던 KNN R에 Robust Scaler를 적용해서 해보자!!

  1. KNN Regressor with Robust Scaler — 2.3033333333 (그..그래! 바로 이거야!)
  2. Gradient Boost — 3.0259931201 ??? 아니왜??? Boosting 모델이라 더 잘 나올줄 알았는데…?

데이콘의 좋은점/ kaggle도 마찬가지 지만, 대회 참가자가 본인의 코드를 공유 할 수 있다. 좋은 점수를 내신 분들의 글을 확인하니.

  1. 각 Specie마다 Standard Scaler를 적용 (???)
  2. Train, validation을 나눠 XGBoost 사용 (데이터가 적어도… 성능은 좋게 나오나보네?)
  3. Torch사용 (아니 굳이 Torch를 사용한다고?)

각 Specie마다 Standard Scaler를 따로 적용한 글이 가장 흥미로웠다… 왜 저렇게 했을까??

Scale, Standardize, or Normalize — towardsdatascience.com 참고

Label Encoder +Standard Scaler by Species

  1. KNN R — 3.112
  2. Gradient Boost — 2.8701838385

달라진게 없었다… 왜일까. 이전과 달라진게 뭐가 있지? Label Encoding이나, OneHot이나 성능차이는 딱이 없어보였는데. RobustScaler는 왜… 성능이 좋게 나온거야.. 라는 복잡해졌지만, 다시 One Hot + Standard Scaler 를 적용하여 Linear Regression에 적용을 하니 0.17431…경이로운 숫자… (오메. 상위 10% 진입 성공..) 이후는 데이콘 하루 제출횟수에 막혀서… 추후 업데이트 하도록 하겠다.

신기하다고 해야하나? 맥이 빠진다고해야하나? 이번일로 Encoder와 Scaler의 중요성을 알게 되었다…

아직 적용해보지 못한것, 데이터셋이 작으니, Leave One Out CV, K-Fold를 사용하면, 더 좋은 결과를 얻을 수 있을것 같다. 며칠 전만 하더라고, LOOCV나, K-Fold를 사용한 코드공유가 없어서, 후딱하고 나도 공유해야지~ 라고 생각했는데… 다른분들이 열심히… 공유해주셨다.

Standard Scaler on each species, One Hot Encoding, LOOCV 또는 K-Fold를 사용해서, 모델을 만들면 더 좋은 성능의 모델을 만들수 있을것 같다.

아직 Iris 종료까지 4일 남았으니, 조금만 더 해보자.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response