원시 데이터를 적절한 특성 벡터로 매핑하는 여러 가지 방법을 살펴보았지만, 아직 남은 과정이 많습니다. 지금부터는 이러한 특성 벡터 내에서 어떠한 종류의 값이 실제로 좋은 특성이 되는지 알아보겠습니다.
거의 사용되지 않는 불연속 특성 값 배제
좋은 특성 값은 데이터 세트에서 5회 이상 나타나야 합니다. 이러한 특성 값은 모델에서 라벨과의 관계를 학습하기가 쉽습니다. 즉, 동일한 이산 값을 갖는 예가 많으면 모델에서 다양한 설정으로 특성을 확인하여 라벨을 예측하는 좋은 지표인지를 판단할 수 있습니다. 예를 들어 house_type 특성은 값이 victorian인 예를 많이 포함할 수 있습니다.
✔house_type: victorian
반대로, 특성의 값이 한 번만 나타나거나 매우 드물게 나타난다면 모델에서 해당 특성을 기반으로 예측할 수 없습니다. 예를 들어 unique_house_id는 각 값이 한 번만 사용되어 모델에서 어떠한 학습도 불가능하므로 좋은 특성이 아닙니다.
✘unique_house_id: 8SK982ZZ1242Z
가급적 분명하고 명확한 의미 부여
프로젝트의 모든 구성원에게 각 특성은 명확하고 분명한 의미를 가져야 합니다. 예를 들어 다음은 주택의 연령을 연 단위로 나타내는 것을 바로 알아볼 수 있는 좋은 특성입니다.
✔house_age: 27
반대로, 다음 특성 값은 특성을 만든 엔지니어 이외에 다른 사람은 알아보기 어렵습니다.
✘house_age: 851472000
엔지니어링 측면의 실수와 관계없이 데이터의 노이즈로 인해 값이 불명확해지는 경우도 있습니다. 예를 들어 다음의 user_age는 적절한 값을 확인하지 않은 소스에서 비롯된 것입니다.
✘user_age: 277
'특수' 값을 실제 데이터와 혼용하지 말 것
좋은 부동 소수점 특성은 특이한 범위 외 불연속성 또는 '특수' 값을 포함하지 않습니다. 예를 들어 어떤 특성이 0~1 범위의 부동 소수점 값을 갖는다고 가정해 보겠습니다. 따라서 다음과 같은 값은 문제가 없습니다.
✔quality_rating: 0.82 quality_rating: 0.37
그러나 사용자가 quality_rating을 입력하지 않은 경우 데이터 세트에서 다음과 같은 특수 값으로 데이터가 없음을 표현했을 수 있습니다.
✘quality_rating: -1
특수 값이 나타나지 않게 하려면 특성을 다음과 같은 두 특성으로 변환하세요.
- 특성 하나는 특수 값 없이 오로지 품질 등급만 갖습니다.
- 특성 하나는 quality_rating이 입력되었는지 여부를 나타내는 부울 값을 갖습니다. 이 부울 특성에 is_quality_rating_defined와 같은 이름을 지정합니다.
업스트림 불안정성 고려
특성의 정의는 시간이 지나도 변하지 않아야 합니다. 예를 들어 도시의 이름은 일반적으로 바뀌지 않으므로 다음 값은 유용합니다. 단, 'br/sao_paulo'와 같은 문자열을 원-핫 벡터로 변환할 필요는 있습니다.
✔city_id: "br/sao_paulo"
그러나 다른 모델에서 추론한 값을 수집할 때는 또 다른 문제점이 있습니다. '219'라는 값이 현재 상파울루를 나타내고 있더라도, 다른 모델을 이후에 실행할 때는 이 표현이 변경될 수도 있습니다.
✘inferred_city_cluster: "219"
'DATA Science > Google Machine Learning' 카테고리의 다른 글
특성교차: 비선형성 인코딩 (0) | 2021.07.25 |
---|---|
표현: 데이터 정제 (0) | 2021.07.25 |
표현: 특성 추출 (0) | 2021.07.25 |
추가 분할(검증데이터 추가?) (0) | 2021.07.25 |
데이터 분할 (0) | 2021.07.25 |
댓글