우리는 앞의 포스트를 통해 수집된 원시 데이터(Raw Data)를 적정한 특성 벡터(Feature Vector)로 맵핑(Mapping)하는 방법을 알아보았습니다.

이번 포스트에서는 이렇게 맵핑한 특성 벡터에서 어떤 값이 좋은 특성(Feature)가 되는지 알아보겠습니다.


좋은 특성의 조건

1. 거의 사용되지 않는 불연속 특성 값 배제

좋은 특성은 데이터 세트에서 최소 5회 이상 나타나야 합니다. 동일한 값을 갖는 예가 많으면 모델에서 다양한 설정으로 특성을 확인하여 라벨과 특성의 관계를 학습하기 용이합니다.


반대로 특성의 값이 한 번만 나타나거나 매우 드물게 나타난다면 모델에서 해당 특성을 기반으로 좋은 예측을 할 수 없습니다.


2. 최대한 분병하고 명확한 의미 부여

머신러닝 프로젝트에 참가하는 모든 구성원에서 각 특성은 바로 알 수 있도록 분명하고 명확한 의미를 가져야 합니다. 예를 들어 아래 처럼 주택의 연령을 연 단위로 나타내는 것인데 이는 바로 알아볼 수 있는 좋은 특성입니다.

반대로 아래와 같이 특정 사람 이외의 알아보기 힘든 특성 값은 좋은 특성이 아닙니다.


3. '특수' 값을 실제 데이터와 혼용하지 말 것

좋은 부동 소수점 특성(Floating-Point Features)은 특정 범위 외 불연속성 또는 '특수(Magic)' 값을 포함하지 않습니다. 예를 들어 어떤 특성이 0~1 사이의 부동 소수점을 특성 값으로 갖는다고 가정하겠습니다.


이때 이 특성 값이 0~1 사이가 아닌 -1과 같은 값을 갖는다면 이는 특수 값으로서 모델 학습에서 배제해야하는 값 입니다.


4. 업스트림(Upstream) 불안정성 고려

특성의 정의는 시간이 지나도 변하지 않아야 합니다. 하지만 다른 모델에서 추론한 값을 수집하는 경우 문제가 발생할 수 있습니다.


예를 들어, 포항을 나타내는 도시 번호를 255라는 값으로 맵핑하였다고 하겠습니다. 이 값은 다른 모델에서 실행할 때 표현이 변결 될 수 있습니다. 이러한 업스트림 불안정성을 고려하여 좋은 특성을 만들어야 합니다.

이번 포스트를 통해서 우리는 수집된 데이터를 어떻게 정제하여 머신러닝에게 학습시킬 지, 특성을 추출하는 방법에 대해서 이야기해 보겠습니다.


원시 데이터를 특성에 맵핑(Mapping Raw Data to Features)


위의 그림에서 왼쪽 부분은 수집된 데이터의 원본인 원시 데이터(Raw Data)입니다. 오른쪽은 실수 벡터로 표현된 특성 벡터(Feature Vector)입니다. 이렇게 원시 데이터로 부터 머신러닝에 적합한 데이터(모델을 학습 시킬 예)로 정제하는 것을 특성 추출(Feature Engineering)이라고 합니다.


보통 머신러닝 프로그래머는 특성을 추출하는데 전체 시간의 75% 정도를 할애합니다.


숫자 값 맵핑(Mapping numeric values)

머신러닝의 모델을 학습 시킬 때 부동 소수점 값을 이용하므로 원시 데이터가 정수 및 부동 소수점인 경우 따로 인코딩을 할 필요는 없습니다.

위의 그림과 같이 이미 실수인 num_rooms의 값을 오른쪽과 같이 6.0의 부동 소수점의 값으로 변환할 필요는 없습니다.


문자열 값 맵핑

머신러닝에서는 문자열 값은 학습할 수 없는 데이터입니다. 그래서 우리는 특성 추출(Feature Engineering)을 통해 필요한 문자열의 값을 숫자로 변환할 필요가 있습니다.



위와 같이 우리가 학습하고 싶은 문자열만 1로 설정하고 다른 문자열을 0으로 하는 원-핫 인코딩 방식으로 치환합니다.


원-핫 인코딩(One-Hot Encoding)이란?

일반적으로 문자열을 표현할 때 사용하는 방식으로, 하나의 요소만 1로 설정하고, 다른 요소들은 모두 0인 벡터를 말합니다.


범주형 값 매핑(Mapping categorical values)

범주형이란 배열로 표현되는 특성을 말하며, 인덱스와 같은 숫자로 치환하여 맵핑 합니다. 아래와 같은 나라 이름이 주어졌다고 하겠습니다.

주어진 나라를 나타내는 숫자로 치환하여 사용할 수 있을 겁니다. 아래 처럼 말이죠.

  • Netherlands => 0
  • Belgium => 1
  • Luxembourg => 2

하지만, 머신러닝 모델에서는 일반적으로 각 특성을 별도의 Boolean 값으로 표현 합니다. 예를 들면, 위의 나라 이름이 아래 처럼 표현됩니다.

  • x1: Is Netherlands? (True or False)
  • x2: Is Belgium? (True or False)
  • x3: Is Luxembourg? (True or False)


HTTP란?

 HTTP란, Hypertext Transfer Protocol의 약자로 인터넷에서 웹 서버와 웹 사용자(인터넷 브라우저) 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말합니다.


HTTP의 특징

  1. TCP/IP(Transmission Control Protocol/Internet Protocol) 응용 프로토콜
    TCP/IP란, 네트워크와 네트워크를 연결하기 위한 프로토콜로서 서로 다른 운영체제의 컴퓨터 간에도 같은 TCP/IP 프로토콜을 사용함으로써, 네트워크 통신이 가능하게 합니다.

  2. 연결 상태를 유지하지 않음
    실시간으로 항상 연결을 유지하는 것이 아닌, 웹 클라이언트의 요청이 들어왔을 때만 네트워크를 연결하여 응답을 보내는 프로토콜 입니다.

  3. 요청(Request) / 응답(Response) 방식의 통신
    서버가 먼저 웹 클라이언트에게 데이터를 보내는 것이 아닌, 웹 클라이언트가 요청(Request)을 해야만 서버에서 응답(Response)하는 방식의 통신을 합니다.


HTTP Method

HTTP 통신에 사용되는 메소드로는 HEAD, GET, POST, PUT, DELETE, OPTIONS, TRACE, CONNECT이 있습니다. 이번 포스트에서는 주로 사용하는 GET, POST, PUT, DELETE만 다루도록 하겠습니다.


 Method

설명 

 GET

  서버에 요청할 데이터를 URL(URI)에 담아서 보내는 형식

 POST

  서버에 요청할 데이터를 HTTP의 Body에 담아 보내는 형식 

 PUT

  DB에 있는 기존의 데이터를 수정(업데이트)하기 위해 사용하는 메소드(POST와 같이 Body에 데이터를 담아 보냄)

DELETE

  DB에 있는 기존의 데이터를 삭제하기 위해  사용하는 메소드(POST와 같이 Body에 데이터를 담아 보냄)



HTTP 응답코드

가끔 웹으로 어딘가를 접속하려고 할 때 "404 Not Found" 페이지가 뜨는 것을 볼 수 있습니다. 여기서 404는 HTTP 응답 코드의 하나로서 요청한 페이지가 없을 경우 표시되는 코드입니다. 자주 사용하는 HTTP코드에 대해서 다뤄보도록 하겠습니다.


 응답코드

설명 

 200

  클라이언트의 요청에 서버가 성공적으로 응답함

 201

  PUT 메소드에 의해 서버에 성공적으로 데이터가 업데이트 됨

 401

  인증이 필요한 페이지를 요청함

403

  관리자에 의해 페이지 접근이 금지됨

 404

  요청한 페이지를 찾을 수가 없음

 404

  요청한 동작에 대해 서버가 수행 할 수 없는 경우


+ Recent posts