"쓰레기를 넣으면 쓰레기가 나온다"는 말을 들어보셨을 겁니다. 이 말은 기계 학습 모델을 훈련할 때 실제로 적용 가능합니다. 관련 없는 데이터를 사용하여 기계 학습 모델을 훈련한다면 최고의 기계 학습 알고리즘도 큰 도움이 되지 않습니다. 반대로, 잘 설계된 의미 있는 기능을 사용하면 간단한 기계 학습 알고리즘으로도 뛰어난 성능을 얻을 수 있습니다. 그렇다면 모델의 성능을 극대화할 의미 있는 특징을 어떻게 만들 수 있을까요? 대답은 기능 엔지니어링입니다. 회귀 분석, 의사결정 트리, 지원 벡터 머신 및 숫자 입력이 필요한 기타 기계 학습 알고리즘을 사용하여 작업할 때 특성 엔지니어링 작업이 특히 중요합니다. 그러나 이러한 숫자 입력을 생성하는 것은 단지 데이터 기술에 관한 것이 아닙니다. 창의성과 도메인 지식을 요구하고 과학 못지않게 예술성을 요구하는 과정입니다.
광범위하게 말하면 기능 엔지니어링을 두 가지 구성 요소로 나눌 수 있습니다. 1) 새로운 기능을 생성하는 것과 2) 이러한 기능을 처리하여 고려 중인 기계 알고리즘과 최적으로 작동하도록 만드는 것입니다. 이 기사에서는 단면적, 구조적, 비NLP 데이터 세트에 대한 기능 엔지니어링의 두 가지 구성 요소에 대해 설명합니다.
원시 데이터 수집은 지칠 수 있으며, 이 작업이 끝나면 너무 피곤해서 추가 기능을 만드는 데 더 많은 시간과 에너지를 투자할 수 없습니다. 하지만 바로 여기서 모델 훈련에 바로 뛰어들고 싶은 유혹을 물리쳐야 합니다. 그만한 가치가 있을 거라고 약속해요! 이 교차점에서 우리는 잠시 멈춰서 스스로에게 질문해야 합니다. "내 도메인 지식을 기반으로 수동으로 예측을 수행했다면 어떤 기능이 내가 일을 잘 수행하는 데 도움이 되었을까요?" 이 질문을 하면 모델이 놓쳤을 수도 있는 새로운 의미 있는 기능을 만들 수 있는 가능성이 열릴 수 있습니다. 어떤 추가 기능을 활용할 수 있는지 고려한 후에는 아래 기술을 활용하여 원시 데이터에서 새로운 기능을 만들 수 있습니다.
이름에서 알 수 있듯이 이 기술은 여러 데이터 포인트를 결합하여 보다 전체적인 보기를 만드는 데 도움이 됩니다. 일반적으로 개수, 합계, 평균, 최소값, 최대값, 백분위수, 표준 편차, 변동 계수와 같은 표준 함수를 사용하여 연속 숫자 데이터에 집계를 적용합니다. 각 기능은 다양한 정보 요소를 캡처할 수 있으며, 사용하기에 가장 적합한 기능은 특정 사용 사례에 따라 다릅니다. 종종 해당 문제의 맥락에서 의미 있는 특정 시간이나 이벤트 창에 대해 집계를 적용할 수 있습니다.
주어진 신용 카드 거래가 사기인지 여부를 예측하려는 예를 들어 보겠습니다. 이 사용 사례에서는 의심할 여지 없이 거래별 기능을 사용할 수 있지만 이러한 기능과 함께 다음과 같은 집계된 고객 수준 기능을 생성함으로써 이점을 얻을 수도 있습니다.
지난 5년 동안 고객이 사기 피해자였던 횟수: 이전에 여러 번 사기 피해자였던 고객은 다시 사기 피해자가 될 가능성이 더 높을 수 있습니다. 따라서 이렇게 집계된 고객 수준 보기를 사용하면 적절한 예측 신호를 제공할 수 있습니다.
최근 5개 거래 금액의 중앙값: 신용 카드가 손상되면 사기꾼은 카드를 테스트하기 위해 가치가 낮은 거래를 여러 번 시도하는 경우가 많습니다. 이제 단일 소액 거래는 매우 일반적이며 사기의 징후가 아닐 수 있습니다. 그러나 그러한 거래가 짧은 연속으로 많이 발생하는 경우 신용 카드가 손상되었음을 나타낼 수 있습니다.
많은 유형의 문제에서 설정된 패턴의 변화는 예측 또는 이상 탐지에 중요한 신호입니다. 차이와 비율은 수치 특성의 변화를 나타내는 효과적인 기술입니다. 집계와 마찬가지로 해당 문제의 맥락에서 의미 있는 기간 동안 이러한 기술을 적용할 수도 있습니다.
예:
지난 1시간 동안의 신규 판매자 거래 비율과 지난 30일 동안의 신규 판매자 거래 비율 간의 차이: 빠르게 연속되는 신규 판매자 거래의 비율이 높다는 것은 그 자체로 사기 위험을 나타낼 수 있지만 이러한 행동을 보면 고객의 과거 행동과 비교하여 변화했다면 이는 훨씬 더 분명한 신호가 됩니다.
지난 30일 일일 평균 거래 수에 대한 현재 거래 수의 비율: 신용 카드가 손상되면 짧은 시간 내에 많은 거래가 발생할 가능성이 높으며 이는 과거 신용 카드 사용과 일치하지 않을 수 있습니다. 최근 30일 평균 일일 거래 수에 대한 현재 거래 수의 비율이 상당히 높으면 사기성 사용 패턴을 나타낼 수 있습니다.
연령 계산 기술을 사용하면 두 개의 타임스탬프 또는 날짜 간의 차이를 취하여 날짜 또는 타임스탬프 기능을 숫자 기능으로 변환할 수 있습니다. 또한 특성 값과 관련된 보유 기간이 예측을 위한 귀중한 신호가 될 수 있는 경우 이 기술을 사용하여 숫자가 아닌 특정 특성을 의미 있는 숫자 특성으로 변환할 수 있습니다.
예:
표시기 또는 부울 기능에는 이진 값 {1, 0} 또는 {True, False}가 있습니다. 표시기 기능은 매우 일반적이며 다양한 유형의 이진 정보를 나타내는 데 사용됩니다. 어떤 경우에는 이러한 이진 특성이 이미 숫자 형태로 있을 수도 있고, 다른 경우에는 숫자가 아닌 값을 가질 수도 있습니다. 모델 훈련에 숫자가 아닌 이진 기능을 사용하려면 이를 숫자 값에 매핑하기만 하면 됩니다.
이러한 일반적인 표시 기능의 발생 및 사용을 넘어서 숫자가 아닌 데이터 포인트 간의 비교를 나타내는 도구로 표시기 인코딩을 활용할 수 있습니다. 이 속성은 숫자가 아닌 특성의 변화를 측정하는 방법을 생성하므로 특히 강력합니다.
예:
최근 로그인 이벤트 중 확인 실패: 최근 로그인 이벤트 실패는 사기 거래의 위험이 더 높을 수 있습니다. 이 경우 원시 데이터에는 이 기능에 대한 예 또는 아니요 값이 있을 수 있습니다. 여기서 해야 할 일은 이 값을 1 또는 0으로 매핑하는 것뿐입니다.
마지막 거래에서 국가 위치 변경: 국가 위치가 변경되면 신용 카드가 도용되었음을 나타낼 수 있습니다. 여기에서 숫자가 아닌 기능 '국가 위치'의 변경을 나타내는 표시 기능을 생성하면 이 국가 변경 정보가 캡처됩니다.
이 기술은 기능 데이터가 숫자 또는 숫자가 아닌 범주형 형식인 경우 적용할 수 있습니다. 숫자 범주형은 지리적 지역 코드, 상점 ID 및 기타 유형의 데이터와 같이 비연속적이거나 비측정 데이터를 포함하는 숫자 데이터를 나타냅니다. 하나의 핫 인코딩 기술은 이러한 기능을 기계 학습 모델 교육에 사용할 수 있는 표시기 기능 세트로 변환할 수 있습니다. 범주형 기능에 하나의 핫 인코딩을 적용하면 해당 범주형 변수의 모든 범주에 대해 하나의 새로운 이진 기능이 생성됩니다. 카테고리 수가 증가함에 따라 새로운 기능의 수가 증가하므로 이 기술은 카테고리 수가 적은 기능, 특히 데이터세트가 작은 경우에 적합합니다. 표준 경험 법칙 중 하나는 범주당 최소 10개의 레코드가 있는 경우 이 기술을 적용하는 것을 제안합니다.
예:
이 기술은 원-핫 인코딩을 적용하는 것과 동일한 유형의 기능에 적용되지만 원-핫 인코딩에 비해 몇 가지 장점과 단점이 있습니다. 범주 수가 많은 경우(높은 카디널리티) 원-핫 인코딩을 사용하면 기능 수가 늘어나서 모델 과적합이 발생할 수 있습니다. 지도 학습 문제를 연구하는 경우 대상 인코딩은 효과적인 기술이 될 수 있습니다. 각 카테고리 값을 해당 카테고리에 대한 목표의 기대값에 매핑하는 기술입니다. 연속형 목표를 사용하여 회귀 문제를 해결하는 경우 이 계산은 범주를 해당 범주의 평균 목표 값에 매핑합니다. 이진 대상에 대한 분류 문제가 있는 경우 대상 인코딩은 범주를 해당 범주의 긍정적인 사건 확률에 매핑합니다. 원-핫 인코딩과 달리 이 기술은 특징 수를 늘리지 않는다는 장점이 있습니다. 이 기술의 단점은 지도 학습 문제에만 적용할 수 있다는 것입니다. 이 기술을 적용하면 특히 일부 범주의 관측치 수가 낮은 경우 모델이 과적합에 취약해질 수도 있습니다.
예:
원시 데이터에서 새로운 기능을 생성한 후 다음 단계는 최적의 모델 성능을 위해 이를 처리하는 것입니다. 다음 섹션에서 설명하는 기능 처리를 통해 이를 수행합니다.
기능 처리는 기계 학습 모델이 의도한 대로 데이터에 적합하도록 보장하는 일련의 데이터 처리 단계를 나타냅니다. 이러한 처리 단계 중 일부는 특정 기계 학습 알고리즘을 사용할 때 필요하지만 다른 처리 단계는 고려 중인 기능과 기계 학습 알고리즘 간의 우수한 작동 화학을 보장합니다. 이 섹션에서는 몇 가지 일반적인 기능 처리 단계와 해당 단계가 필요한 이유에 대해 논의해 보겠습니다.
여러 기계 학습 알고리즘, 특히 회귀 모델과 같은 파라메트릭 알고리즘은 이상값의 영향을 받습니다. 이러한 기계 학습 알고리즘은 이상값을 수용하려고 시도하여 모델 매개변수에 심각한 영향을 미치고 전체 성능을 저하시킵니다. 이상값을 처리하려면 먼저 이상값을 식별해야 합니다. 평균보다 큰 절대값에 3개의 표준편차를 더한 값 또는 가장 가까운 수염 값(가장 가까운 사분위수 값에 사분위간 범위 값의 1.5배)을 벗어난 값을 갖는 등 특정 경험 법칙을 적용하여 특정 기능에 대한 이상값을 감지할 수 있습니다. 특정 기능에서 이상값을 식별한 후에는 아래 기술 중 일부를 사용하여 이상값을 처리할 수 있습니다.
다변량 이상치(여러 특성에 대한 이상치)인 관찰을 감지하는 기술이 있지만 이는 더 복잡하고 일반적으로 기계 학습 모델 교육 측면에서 많은 가치를 추가하지 않습니다. 또한 지원 벡터 머신과 같은 대부분의 비모수적 기계 학습 모델과 의사결정 트리, 랜덤 포레스트, XGBoost와 같은 트리 기반 알고리즘으로 작업할 때 이상값은 문제가 되지 않습니다.
누락된 데이터는 실제 데이터 세트에서 매우 일반적입니다. XGBoost와 같은 일부를 제외하고 대부분의 기존 기계 학습 알고리즘은 교육 데이터 세트에서 누락된 값을 허용하지 않습니다. 따라서 누락된 값을 수정하는 것은 기계 학습 모델링의 일상적인 작업 중 하나입니다. 결측값을 처리하는 방법에는 여러 가지가 있습니다. 그러나 어떤 기술을 구현하기 전에 누락된 데이터의 원인을 이해하거나 최소한 데이터가 무작위로 누락되었는지 아는 것이 중요합니다. 데이터가 무작위로 누락되지 않은 경우, 즉 특정 하위 그룹에 누락된 데이터가 있을 가능성이 더 높음을 의미하며, 특히 사용 가능한 데이터가 거의 또는 전혀 없는 경우 해당 값을 대치하는 것이 어려울 수 있습니다. 데이터가 무작위로 누락된 경우 아래에 설명된 몇 가지 일반적인 처리 기술을 사용할 수 있습니다. 모두 장단점이 있으며, 사용 사례에 가장 적합한 방법을 결정하는 것은 우리에게 달려 있습니다.
기계 학습 모델에서 사용하는 기능의 범위는 종종 다릅니다. 스케일링 없이 사용하면 절대값이 큰 특성이 예측 결과를 지배하게 됩니다. 대신, 각 특성이 예측 결과에 기여할 수 있는 공정한 기회를 제공하려면 모든 특성을 동일한 규모로 가져와야 합니다. 가장 일반적인 두 가지 확장 기술은 다음과 같습니다.
의사결정 트리, 랜덤 포레스트, XGBoost 등과 같은 트리 기반 알고리즘은 확장되지 않은 데이터로 작업할 수 있으며 이러한 알고리즘을 사용할 때 확장이 필요하지 않습니다.
오늘날 우리는 엄청난 양의 데이터를 보유하고 있으며 모델을 교육하기 위한 방대한 기능 컬렉션을 구축할 수 있습니다. 대부분의 알고리즘의 경우 더 많은 기능을 갖는 것이 모델 성능을 향상시키기 위한 더 많은 옵션을 제공하므로 좋습니다. 그러나 이것이 모든 알고리즘에 적용되는 것은 아닙니다. 거리 측정법을 기반으로 하는 알고리즘은 차원성의 저주로 인해 어려움을 겪습니다. 즉, 특징 수가 크게 증가하면 두 관측치 사이의 거리 값이 의미가 없게 됩니다. 따라서 거리 측정법에 의존하는 알고리즘을 사용하려면 많은 수의 기능을 사용하지 않도록 해야 합니다. 데이터 세트에 많은 기능이 있고 어떤 기능을 유지하고 어떤 기능을 버려야 할지 모르는 경우 주성분 분석(PCA)과 같은 기술을 사용할 수 있습니다. PCA는 이전 기능 세트를 새로운 기능 세트로 변환합니다. 고유값이 가장 높은 특성이 이전 특성에서 대부분의 정보를 캡처하도록 새로운 특성을 생성합니다. 그런 다음 상위 몇 가지 새로운 기능만 유지하고 나머지 기능은 삭제할 수 있습니다.
연관 분석 및 특징 선택 알고리즘과 같은 다른 통계 기법을 지도 학습 문제에 사용하여 특징 수를 줄일 수 있습니다. 그러나 일반적으로 PCA가 동일한 수의 기능으로 수행하는 것과 동일한 수준의 정보를 캡처하지 않습니다.
이 단계는 대상에만 적용되고 기능에는 적용되지 않으므로 예외입니다. 또한 대부분의 기계 학습 알고리즘에는 대상 분포에 대한 제한이 없지만 선형 회귀와 같은 특정 알고리즘에서는 대상이 정상적으로 분포되어야 합니다. 선형 회귀에서는 오류 값이 대칭이고 모든 데이터 포인트에 대해 0 주위에 집중되어 있다고 가정하며(정규 분포의 모양과 마찬가지로) 정규 분포 대상 변수는 이 가정이 충족되도록 합니다. 히스토그램을 그려서 목표의 분포를 이해할 수 있습니다. Shapiro-Wilk 테스트와 같은 통계 테스트는 이 가설을 테스트하여 정규성에 대해 알려줍니다. 목표가 정규 분포가 아닌 경우 로그 변환, 제곱 변환, 제곱근 변환 등과 같은 다양한 변환을 시도하여 어떤 변환이 목표 분포를 정규화하는지 확인할 수 있습니다. 여러 매개변수 값을 시도하는 Box-Cox 변환도 있으며, 목표 분포를 정규 분포로 가장 잘 변환하는 변환을 선택할 수 있습니다.
참고: 기능의 기능 처리 단계를 어떤 순서로든 구현할 수 있지만 적용 순서를 철저히 고려해야 합니다. 예를 들어, 값 평균 대체를 사용한 결측값 처리는 이상값 감지 전이나 후에 구현될 수 있습니다. 그러나 대체에 사용되는 평균값은 이상치 처리 전 또는 후에 결측값을 처리하는지에 따라 달라질 수 있습니다. 이 문서에 설명된 기능 처리 순서에서는 문제가 연속 처리 단계에 미칠 수 있는 영향 순서대로 문제를 처리합니다. 따라서 일반적으로 이 순서를 따르는 것이 대부분의 문제를 해결하는 데 효과적입니다.
소개에서 언급했듯이 기능 엔지니어링은 모델의 성능을 탁월한 수준으로 제어할 수 있는 기계 학습의 한 차원입니다. 기능 엔지니어링의 잠재력을 활용하기 위해 이 문서에서는 새로운 기능을 생성하고 기계 학습 모델과 최적으로 작동하도록 처리하는 다양한 기술을 배웠습니다. 이 기사에서 어떤 기능 엔지니어링 원칙과 기술을 사용하기로 선택하든 여기서 중요한 메시지는 기계 학습이 단순히 알고리즘에 패턴을 파악하도록 요청하는 것이 아니라는 점을 이해하는 것입니다. 필요한 데이터를 제공함으로써 알고리즘이 효과적으로 작업을 수행할 수 있도록 하는 것은 우리에 관한 것입니다.