머신러닝 시스템 설계 5장 피처 엔지니어링을 요약한 내용입니다.
머신러닝 시스템 설계 : 네이버 도서
네이버 도서 상세정보를 제공합니다.
search.shopping.naver.com
1. 학습된 피처 vs 엔지니어링된 피처
딥러닝의 장점은 피처를 수작업으로 만들 필요가 없습니다.
이러한 이유로 딥러닝을 피처학습이라고도 합니다.
많은 피처들이 알고리즘에 의해 자동으로 학습되고 추출됩니다.
다만 모든 피처가 자동화하려면 아직 멀었습니다.
그 이유로 프로덕션용 ML 애플리케이션의 대부분이 딥러닝이 아니라는 점입니다.
피처 엔지니어링에는 도메인별 기술에 대한 지식이 필요합니다.
피처 엔지니어링 프로세스는 반복적인 경향이 있으며, 따라서 취약할 수 있습니다.
딥러닝이 부상하면서 이러한 어려움이 상당 부분 해소됐습니다.
EX) 텍스트 분석에서 불용어 제거를 신경쓰지 않고 토큰화하고, 단어들로 어휘를 만들고,
이를 사용하여 각 단어를 원-핫 벡터로 변환합니다.
=> 텍스트에 대한 피처 엔지니어링이 상당 부분 자동화되었습니다.
ML 시스템에 텍스트와 이미지 외의 데이터가 필요한 경우가 있습니다.
모델에 사용 가능한 피처는 다양하며, 피처 엔지니어링은 사용할 정보를 선택하고
이 정보를 ML 모델에서 사용하는 포맷으로 추출하는 프로세스입니다.
2. 피처 엔지니어링 기법
피처 엔지니어링 : 데이터로 모델을 트레이닝시키는 데 사용되는 머신 러닝 알고리즘의 성능을 향상하기 위해 데이터를 변환하고 개선하는 프로세스
ML 프로젝트에서 피처 엔지니어링은 중요하고 보편적입니다.
데이터의 피처를 전처리 할 때 고려할 중요한 작업 예시입니다.
결측값 처리, 스케일링, 이산화, 범주형 피처 인코딩, 교차 피처, 위치 피처 생성
2.1 결측값 처리
결측값의 유형
비무작위 결측( MNAR, Missing not at random )
결측값이 발생한 이유가 실제 값 자체에 있습니다.
무작위 결측 ( MAR, Missing at random )
결측값이 발생한 이유가 값 자체가 아닌 다른 관측 변수에 있습니다.
완적 무작위 결측 ( MCAR, Missing completely at random )
결측값에 패턴이 없습니다.
결측값은 삭제하거나 특정 값으로 채워서(대치) 처리합니다.
결측값 삭제( Deletion )
열 삭제 방법
누락된 값이 너무 많은 변수(열)를 제거한다.
행 삭제 방법
누락된 값(들)이 있는 샘플(행)은 제거합니다.
이 방법은 결측 값이 완전 무작위(MCAR)이며 결측값이 있는 샘플의 비중이 적을 때 (0.1% 미만) 유용합니다.
* 단, 데이터 행을 제거하면 결측값이 비무작위(MNAR)인 경우 모델이 예측을 수행하는데
필요한 중요한 정보도 제거될 수 있습니다.
데이터 행을 제거하면 결측값이 무작위(MAR)인 경우 모델에 편향이 발생합니다.
삭제가 더 손쉽지만 중요한 정보가 손실되고 모델에 편향한다는 단점이 있습니다.
결측값 대치 : 결측값을 삭제하는 대신 특정값으로 채우는 방법
결측값을 대치할 때는 일반적으로 기본값으로 채웁니다.
EX) 작업이 누락된 경우 빈문자열(""), 결측값을 평균, 중앙값, 최빈값(가장 일반적인 값)으로 대치
일반적으로 결측값을 가능한 값으로 채우지 않는 편이 좋습니다.
EX) 결측값을 만약 0으로 지정한다면 실제값이 0인지, 결측값이라서 0인지 구분하기 힘들어짐
특정 데이터셋에 대한 결측값을 처리하기 위해 여러 기법들을 동시에 또는 순서대로 사용할 수 있습니다.
결측값 대치를 사용하면 자신의 편향을 주입하고 데이터 잡음을 더할 수 있으며,
더 심하게는 데이터 누수의 위험이 있습니다.
결측값 삭제와 대치 모두 많은 경우 잘 작동하지만 때로는 문제가 되는 사용자 경험을 유발하기도 한다.
2.2 스케일링
피처 스케일링 : 모델에 피처를 입력하기 전에 각 피처를 유사한 범위로 스케일링하는 것
적은 노력으로 모델 성능 향상을 이끌어 낼 수 있는 방법이지만,
반대로 이 작업을 하지 않으면 모델이 엉뚱한 예측을 수행할 수도 있습니다.
고전적인 알고리즘인 그래디언트 부스트 트리, 로지스틱 회귀에서 심합니다.
변수가 정규 분포를 따른다고 생각된다면 평균과 단위 분산이 0이 되도록 정규화하면 도움이 됩니다.(표준화)
실제로 ML모델은 비대칭 분포를 따르는 피처로 어려움을 겪는 경향이 있습니다.
왜곡을 완화하는 기법으로는 일반적으로 피처에 로그 변환을 적용합니다.
성능이 향상될 때가 많지만 모든 경우에 작동하진 않습니다.
실제값이 아닌 로그 변환된 피처값으로 분석하지 않도록 주의해야 합니다.
스케일링에 관한 주의사항
1. 스케일링은 데이터 누수의 원인이 됩니다.
2. 전역 통계치가 필요한 경우가 많습니다.
- 최소, 최대, 평균을 계산하려면 전체 훈련 데이터 또는 부분 집합을 확인해야 합니다.
- 추론하는 동안 훈련 중에 얻은 통계치를 재사용해 신규 데이터를 스케일링합니다.
- 신규 데이터가 훈련 데이터의 통계에서 크게 변경됐다면
훈련 데이터 통계는 그다지 유용하지 않기에 모델을 자주 재훈련하는 것이 중요합니다.
2.3 이산화
이산화 : 연속형 피처를 불연속형 피처로 바꾸는 과정
이 프로세스는 양자화 또는 비닝이라하며, 주어진 값에 대한 버킷을 생성합니다.
양자화를 적용하면 모델은 무한한 범주에 대해 훈련할 필요 없이
훨씬 훈련하기 쉬운 범주로 훈련하는데 집중할 수 있습니다.
이산화는 연속형 피처 뿐 아니라 이산형 피처에 적용 가능합니다.
- 단점 : 범주 분류가 범주 경계에서 불연속성을 발생시킵니다.
2.4 범주형 피처 인코딩
신규 범주가 추가될 때 발생하는 문제를 해결하는 방법을 찾기 어렵습니다.
신규 범주에 적절한 버킷을 할당하는 것이 어렵기 때문입니다.
한 가지 해결책은 마이크로소프트에서 개발한 Vowpal Wabbit 패키지에 의해 대중화된 해싱트릭입니다.
트릭의 요지는 해시 함수를 사용해 각 범주의 해시 값을 생성하는 것입니다.
해시된 값은 해당 범주의 인덱스가 됩니다.
해시 공간을 지정할 수 있고, 점주가 몇 개인지 알 필요 없이,
피처에 대해 인코딩된 값의 개수를 미리 고정할 수 있습니다.
해시 함수의 한 가지 문제는 충돌입니다.
많은 해시 함수에서 충돌이 무작위로 발생합니다.
(해시 피처가 충돌해도 영향이 그리 크진 않습니다.)
충돌 : 두 점주가 동일한 인덱스가 할당되는 것
2.5 피처 교차
피처 교차 : 둘 이상의 피처를 결합해 새로운 피처를 생성하는 기법
피처 간의 비선형 관계를 모델링하는데 유용합니다.
선형 회귀, 로지스틱 회귀와 같이 비선형 관계를 학습할 수 없는 모델에 필수이며,
신경망에는 비교적 덜 중요하지만 여전히 유용합니다.
명시적 피처교차가 신경망에서 비선형 관계를 더 빠르게 학습하는데 도움이 되기 때문이죠.
피처 교차 기법 사용 시 주의할 점
- 피처 공간이 폭팔할 수 있다.
EX) 피처 A와 피처B에 각각 100가지 값이 있고 교차한다면 총 1만 가지 피처가 생성
모델이 가능한 피처 값 모두를 학습하도록 하려면 훨씬 많은 데이터가 필요
- 과적합을 주의해야 한다.
- 피처 교차로 인해 모델이 사용하는 피처 수가 증가하므로 모델이 훈련 데이터에 과적합 될 수 있습니다.
2.6 이산 및 연속 위치 임베딩
임베딩 : 데이터 하나하나를 나타내는 벡터
임베딩 공간 : 어떤 데이터 유형에 대해 동일한 알고리즘으로 생성한 모든 가능한 임베딩 세트
- 임베딩은 매우 다양한 데이터 유형에 사용됩니다.
위치 임베딩은 논문 'Attention is All You need'를 통해 딥러닝 커뮤니티에 소개되어
컴퓨터 비전과 NLP분야의 많은 애플리케이션에서 표준 데이터 엔지니어링 기술로 자리 잡았습니다.
위치 임베딩을 적용하는 한 가지 방법은 단어 임베딩처럼 처리하는 것입니다,
단어 임베딩에서는 임베딩 행렬을 사용하는데, 열 개수는 어휘 크기이고
각 열은 해당 열의 인덱스에 있는 단어에 대한 임베딩입니다.
위치 임베딩에서 열 개수는 위치 개수입니다.
위치 임베딩 차원은 일반적으로 단어 임베딩 차원과 동일하므로 둘은 합산 가능합니다.
위치 임베딩 값이 고정된 경우도 있습니다. 각 위치에 대한 임베딩은 요소 S개를 포함하는 벡터지만
각 요소는 일반적으로 사인 및 코사인 함수로 미리 정의 됩니다. ( S : 위치 임베딩 차원)
3. 데이터 누수
데이터 누수 : 훈련 데이터셋의 피처 집합으로 레이블 정보가 누수되는 현상
- 추론 시에 사용하는 입력 데이터에는 그 정보가 존재하지 않는 경우입니다.
데이터 누수는 대처하기 까다롭습니다. 이는 누수가 분명하지 않은 경우가 많기 때문입니다.
데이터 누수는 ML 분야를 처음 접하는 사람에게만 발생하는 것이 아니라 숙련된 연구원들에게도 발생합니다.
3.1 일반적인 원인
시간 대신 무작위로 시간적 상관 데이터를 분할한 경우
ML 연구 논문에서 보통 데이터를 무작위로 분할하지만, 이는 데이터 누수의 원인이 되기도 합니다.
많은 경우 데이터는 시간 상관관계가 있으므로 데이터가 생성된 시간이 레이블 분포에 영향을 줍니다.
주식 가격처럼 상관관계가 뚜렷할 때도 있지만, 명확하지 않을 때도 많습니다.
미래 정보가 훈련 과정에 유출돼 모델이 평가 중 부정행위를 하는 것을 방지하려면
가능한 데이터를 무작위로 분할하는 대신 시간별로 분할해야 합니다.
분할 전 스케일링을 수행한 경우
흔히 하는 실수로 전체 훈련 데이터로 전역 통계치를 생성한 뒤에 분할하는 것입니다.
테스트 샘플의 평균과 분산이 훈련 프로세스에 유출되고
모델은 테스트 샘플에 대한 예측을 스케일링하게 됩니다.
이 정보는 프로 덕션에 사용할 수 없으므로 모델 성능이 저하됩니다.
이러한 누수를 방지하려면 항상 스케일링 전 먼저 데이터를 분할하고 훈련 분할의 통계치를 사용해 모든 분할을 스케일링해야 합니다.
테스트 분할의 통계치로 결측값을 채운 경우
훈련 분할이 아닌 전체 데이터로 평균 또는 중앙값을 계산하면 데이터 누수가 발생합니다.
이 유형은 스케일링으로 인한 누수와 유사하며,
방지하려면 모든 분할의 결측값을 채울 때 훈련 분할의 통계치만 사용해야 합니다.
분할 전 데이터 중복을 제대로 처리하지 않은 경우
분할 전 데이터 중복을 처리하지 않으면 동일한 샘플이 훈련, 검증 테스트 분할 모두에 나타나게 됩니다.
- 데이터 중복은 산업계에서 매우 흔하며 유명한 연구 데이터 셋에서도 발견됩니다.
데이터 중복은 데이터 수집 또는 서로 다른 데이터 소스들의 병합으로 인해 발생합니다.
-데이터 중복은 데이터 전처리 때문에 발생하기도 합니다.
방지하려면 분할 전과 분할 후 데이터 중복 여부를 항상 확인해야 합니다.
그룹 누수
강한 레이블 상관관계를 갖는 데이터 포인트들이 다른 분할로 나뉘어 들어가는 경우
이러한 유형의 누수는 객체 탐지 작업에서 흔히 나타납니다.
데이터가 어떻게 생성됐는지 이해하지 않고는 그룹 누수를 피하기 어렵습니다.
데이터 생성 과정에서 누수가 생긴 경우
누수를 감지하려면 데이터 수집 방식을 깊이 이해해야 합니다.
누수를 확실히 피할 방법은 없지만 데이터 소스를 추적하고
데이터가 수집 및 처리되는 방법을 이해함으로써 위험을 줄일 수 있습니다.
3.2 데이터 누수 검출
데이터 누수는 데이터 생성, 수집, 샘플링, 분할 처리에서 피처 엔지니어링에 이르기까지
여러 단계에서 발생합니다.
따라서 ML 프로젝트의 전체 수명 주기 동안 데이터 누수를 모니터링하는 것이 중요합니다.
타깃 변수에 대한 각 피처 또는 피처 집합의 예측 검정력을 측정합니다.
피처의 상관관계가 비정상적으로 높다면 해당 피처가 생성되는 방식과 상관관계가 적절한지 조사해야 합니다.
두 피처가 독립적으로 데이터 누수를 포함하지 않아도 함께는 포함할 수도 있습니다.
피처 제거 시 모델 성능이 크게 저하된다면 해당 피처가 왜 중요한지를 조사합니다.
피처가 수천 개에 달할 정도로 방대하다면 가능한 조합에 모두 절게 연구를 수행하기는 불가능하지만,
가장 의심되는 하위 집합으로만 수행해도 유용합니다.
모델에 새로 추가된 피처를 주시해야 합니다.
신규 피처를 추가했을 때 모델 성능이 크게 향상되면 피처가 정말 좋거나 혹은
해당 피처에 레이블에 대한 유출된 정보가 포함된 것입니다.
4. 좋은 피처를 설계하는 방법
일반적으로 피처를 추가하면 모델 성능이 향상됩니다.
하지만 피처가 더 많다고 항상 모델 성능이 좋은 것은 아닙니다.
오히려 너무 많으면 모델 훈련과 서빙에 좋지 않습니다.
이론적으로는 특정 피처가 모델의 정확한 예측에 도움이 되지 않는 경우
L1 정규화가 해당 피처의 계수를 0으로 만들어 제거해주겠지만 실제로는 그렇게 깔끔하게 되진 않습니다.
하지만 더 이상 유용하지 않은 피처를 수동으로 제거해 좋은 피처를 우선적으로 처리하면
모델이 더 빨리 학습하는데 도움이 됩니다.
피처가 모델에 적합한지 평가할 때는 두 가지 요소를 고려해야 합니다.
모델에 대한 중요도와 본적 없는 데이터에 대한 일반화 입니다.
4.1 피처 중요도
피처 중요도를 측정하는 알고리즘은 복잡하지만 직관적으로 생각해보면, 모델에 대한 피처 중요도는 해당 피처 또는 피처를 포함하는 피처 집합이 모델에서 제거될 때 모델 성능이 얼마나 저하되는지에 따라 측정됩니다.
종종 소수의 피처가 모델의 피처 중요도에서 큰 부분을 차지합니다.
피처중요도 기법은 올바른 피처를 선택하는 데 유용할 뿐 아니라
모델이 내부에서 작동하는 방식을 이해하는데 도움이 되므로 해석 가능성에도 좋습니다.
4.2 피처 일반화
ML 모델의 목표는 이전에 본 적 없는 데이터에 대해 정확한 예측을 하는 것이므로
모델에 사용된 피처는 본 적 없는 데이터로 일반화돼야 합니다.
피처 일반화 측정은 피처 중요도 측정보다 훨씬 덜 과학적이며,
통계 지식외에 직관과 주제 전문지식이 모두 필요합니다.
일반화와 관련해 고려할 두 가지 측면
1. 피처 커버리지
2. 피처 값 분포
커버리지: 데이터에서 해당 피처에 대한 값이 있는 샘플의 백분율
- 결측값이 적을 수록 커버리지가 높다.
- 일부 피처는 대부분의 데이터에 결측돼 있더라도 여전히 유용하다. 결측값이 무작위가 아닌 경우에 특히 그러하며, 이는 피처 유뮤가 대단히 유용함을 의미한다.
피처 커버리지 : 서로 다른 데이터 슬라이스에서 다를 수 있으며,
동일한 데이터 슬라이스에서도 시간에 따라 다를 수 있습니다.
피처 커버리지가 훈련 분할과 테스트 분할간에 많이 다른 경우
훈련 분할과 테스트 분할 간에 분포가 동일하지 않음을 의미합니다.
이 경우 데이터 분할 방식이 타당한지와 이 피처가 데이터 누수의 원인인지 조사해야 합니다.
존재하는 피처 값에 대해 분포를 조사해야 합니다.
이미 봤던 데이터에 나타나는 값 집합이 본 적 없는 데이터에 나타는 값 집합과 겹치지 않는다면
이 피처는 모델 성능을 저하합니다.
'머신러닝 시스템 설계' 카테고리의 다른 글
머신러닝 시스템 설계 - 8장 데이터 분포 시프트와 모니터링 요약 (0) | 2023.08.23 |
---|---|
2장 - 머신러닝 시스템 설계 소개 (0) | 2023.07.18 |