앙상블 방법: Kaggle 머신 러닝 챔피언

게시 됨: 2022-03-11

"두 머리가 하나보다 낫다"는 속담은 기계 학습 앙상블과 관련하여 새로운 의미를 갖습니다. 앙상블 방법은 Kaggle 대회에서 가장 장식된 ML 제품군 중 하나로, 종종 인상적인 결과로 대회에서 우승합니다.

그러나 통계학자 Francis Galton 경이 종합 지능의 힘을 알아차린 것은 Kaggle보다 한 세기 전이었습니다. 그는 참가자들이 소의 무게를 맞춰야 하는 가축 박람회에서 경쟁을 하게 되었습니다. 800명의 사람들이 추측을 제출했지만 그들의 기술 수준은 다양했습니다. 농부와 정육점은 소를 가까이에서 본 적이 없는 도시 거주자와 함께 추측했기 때문에 Galton은 평균 추측이 상당히 틀릴 것이라고 생각했습니다.

군중의 추측의 평균은 파운드 미만(< 0.1%)으로 벗어났습니다. 그러나 최고의 개별 예측조차도 목표를 크게 벗어났습니다.

어떻게 그럴 수 있니? 그러한 예상치 못한 결과를 가능하게 한 것은 무엇입니까?

머신 앙상블이 효과적인 이유

Galton이 자신의 신념에 의문을 제기하도록 강요한 사건은 또한 앙상블이 강력한 이유를 보여줍니다. 동일한 문제에 대해 데이터의 다른 부분을 사용하여 훈련된 서로 다른 독립적인 모델 이 있는 경우 개별적으로보다 함께 작동하는 것이 더 좋습니다. 이유? 각 모델은 개념의 다른 부분을 학습합니다. 따라서 각 모델은 "지식"을 기반으로 유효한 결과와 오류를 생성합니다.

그러나 가장 흥미로운 점은 각각의 진정한 부분이 다른 부분을 보완하는 반면 오류는 서로를 상쇄한다는 것입니다.

8가지 서로 다른 모델의 개념을 묘사한 이미지로, 각각은 겹칠 수도 있고 겹치지 않을 수도 있는 서로 다른 사실을 학습합니다. 결과는 각 모델이 학습한 내용을 결합하고 일부 오류를 제거합니다.

데이터의 고유한 하위 집합에 대해 높은 분산(예: 의사 결정 트리)이 있는 모델을 훈련해야 합니다. 이렇게 추가된 분산은 각 모델이 서로 다른 데이터에 과대적합되지만 결합하면 분산이 마법처럼 사라짐을 의미합니다. 이것은 새롭고 더 강력한 모델을 만듭니다.

Galton의 경우와 마찬가지로 모든 소스의 모든 데이터가 결합될 때 결과는 격리된 데이터 포인트보다 "스마트"합니다.

Kaggle 대회의 앙상블 학습 자세히 살펴보기

Otto Group 제품 분류 챌린지에서 참가자들은 주요 제품 범주를 구별할 수 있는 예측 모델을 구축해야 했습니다.

여기에서 우승한 모델이 어떻게 만들어졌는지 확인할 수 있습니다. 3개의 레이어를 쌓았습니다. 첫 번째 레이어에는 33개의 모델이 있고, 두 번째 레이어에는 3개(XGBoost, 신경망, AdaBoost)가 더 추가되었으며, 세 번째 레이어는 이전 레이어 출력의 가중 평균이었습니다. 그것은 매우 복잡한 모델이자 앙상블이었습니다.

Kaggle의 또 다른 성공은 Crowdflower Search Results Relevance 대회에서 Chenglong Chen이 만든 모델입니다. 문제는 검색 결과의 관련성을 측정하는 데 사용할 수 있는 예측 변수를 만드는 것이었습니다. 그의 방법에 대한 완전한 설명을 읽을 수 있지만 우리의 관심 지점이 앙상블이므로 이 이야기의 중요한 부분은 우승 솔루션이 35개 모델의 앙상블을 사용했으며 그 중 많은 부분이 앙상블이었습니다. 말하다.

앙상블 방법

머신 러닝에서 앙상블 방법을 구현하는 방법에는 여러 가지가 있습니다. 가장 인기 있는 몇 가지 방법을 살펴보겠습니다.

  • 자루에 담기
    • 랜덤 포레스트
  • 부스팅
    • 에이다부스트
    • 그래디언트 부스팅 및 XGBoost
  • 하이브리드 앙상블 방법
    • 투표
    • 스태킹
    • 계단식

자루에 담기

앞서 언급했듯이 다양한 데이터 하위 집합에 대해 많은 모델을 훈련해야 합니다. 실제로 이것은 단일 모델보다 많은 모델에 대해 훨씬 더 많은 데이터가 필요하고 때로는 고품질 데이터 세트를 얻는 것이 쉽지 않기 때문에 쉽지 않습니다. 이것은 부트스트랩을 통해 데이터를 분할하기 때문에 배깅(부트스트랩 집계)이 유용할 때입니다. 즉, 무작위 샘플이 대체되어 서로 다른 하위 집합이 겹치게 됩니다.

앙상블 모델을 훈련했으면 평균, 중앙값, 모드 등 원하는 메트릭을 통해 각 모델 예측을 집계하여 최종 예측을 구성합니다. 모델 예측 확률을 사용하여 가중 측정항목을 만들 수도 있습니다.

부트스트랩을 통해 데이터를 분할하기 위해 배깅 기술을 사용하는 것을 보여주는 다이어그램, 최종 출력을 생성하기 위해 다양한 하위 집합에서 각 모델 예측을 집계합니다.

의사결정 트리를 모델로 사용하고 싶지만 데이터에 강력한 예측 속성이 거의 없는 경우 모든 트리가 비슷할 것입니다. 이는 동일한 속성이 루트 노드에 있는 경향이 있어 트리의 각 분기에서 유사한 결과를 생성하기 때문입니다.

랜덤 포레스트

이 문제를 해결하는 한 가지 기술은 랜덤 포레스트 입니다. 트리를 사용하여 배깅 앙상블을 만들지만 각 노드는 가능한 속성을 임의의 하위 집합으로 제한합니다. 이렇게 하면 모델이 달라져서 이전 문제가 해결됩니다. 또한 랜덤 포레스트를 기능 선택을 위한 매우 좋은 모델로 만듭니다.

랜덤 포레스트는 낮은 분산과 훈련 시간으로 우수한 성능을 제공하기 때문에 가장 인기 있는 ML 모델 중 하나입니다.

부스팅

부스팅은 또한 부트스트래핑을 사용하여 모델을 훈련하는데, 주요 차이점은 모델 예측 오류를 기반으로 각 인스턴스에 가중치를 추가한다는 것입니다. 배깅은 병렬 프로세스인 반면 부스팅은 각 모델에 더 많은 확률이 있는 순차적 프로세스입니다. 이를 통해 이전 모델 예측의 일부 인스턴스에 액세스할 수 있습니다.

이 수정으로 부스팅은 더 나은 글로벌 성능에 도달하기 위해 잘못 분류된 인스턴스에 대한 초점을 높이려고 시도합니다.

배깅과 부스팅이 사용하는 다양한 접근 방식을 보여주는 다이어그램으로, 배깅의 병렬 특성과 부스팅의 순차적 특성을 보여줍니다.

모델에도 가중치를 추가합니다. 훈련 시간에 더 나은 성능을 가진 예측자는 예측 단계에서 더 높은 가중치를 갖습니다.

가장 인기 있는 부스팅 모델을 자세히 살펴보겠습니다.

에이다부스트

AdaBoost는 부스팅의 첫 번째 구현 중 하나입니다. 일반적으로 부스팅에 대해 설명한 것과 거의 정확히 일치하며 의사 결정 트리를 모델로 사용합니다. 일부 의사 코딩으로 훈련 단계를 설명하겠습니다.

 For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors

예측 시 각 예측에 대해 계산된 오류율 e[t] 를 기반으로 각 예측에 가중치를 부여합니다. 오류율이 높은 결과는 정확도가 더 좋은 다른 결과보다 가중치가 적습니다.

그래디언트 부스팅 및 XGBoost

많은 모델을 훈련하고 함께 작동하게 할 때의 주요 문제 중 하나는 최상의 하이퍼파라미터 구성을 찾는 것입니다. 단일 모델에 가장 적합한 구성을 찾는 것은 어렵습니다. n개의 모델에 대한 최상의 구성을 찾는 것은 복잡성을 기하급수적으로 증가시킵니다. 격리된 모델의 이상적인 구성은 다른 모델과 함께 작동해야 하는 모델의 구성과 같지 않을 수 있습니다. 따라서 모든 모델의 구성을 동시에 검색해야 하지만 어떻게 해야 합니까?

그래디언트 부스팅은 이 문제에 대한 우아한 솔루션을 제공합니다. 모든 모델의 모든 하이퍼파라미터 값을 입력으로, 전체 앙상블의 오류를 출력으로 갖는 손실 함수를 생성합니다. 기울기 하강법을 통해 함수의 최소값(즉, 가장 낮은 오차)을 찾아 각 모델에 가장 적합한 하이퍼파라미터 구성을 찾습니다.

이 접근 방식은 스케일링 문제를 야기합니다. 구조화된 데이터를 위한 머신 러닝의 왕으로 들어가십시오: 익스트림 그래디언트 부스팅, 줄여서 XGBoost. 병렬 컴퓨팅, 내장 교차 검증 기능, 과적합을 방지하기 위한 정규화, 하드웨어 최적화와 같은 다양한 기술 덕분에 매우 효율적인 그래디언트 부스팅 구현입니다. XGBoost는 뛰어난 성능을 제공합니다.

XGBoost는 제작자가 Kaggle 챌린지에 이를 사용하여 큰 차이로 이겼을 때 인기를 얻었습니다. 그는 결과를 게시하고 더 많은 사람들이 사용할 수 있도록 Python 래퍼를 만들었습니다. 많은 사람들이 그 잠재력을 인식했을 때 XGBoost는 빠르게 ML 챔피언이 되었습니다.

하이브리드 앙상블 방법

그러나 이야기는 거기서 끝나지 않습니다. 우리는 모두 같은 종류의 모델을 사용하는 많은 유형의 앙상블을 보았습니다. 왜 다른 모델의 조합을 시도하지 않습니까? 이 작업을 잘 수행하면 훨씬 더 강력한 ML 방법인 하이브리드 앙상블 을 만들 수 있습니다.

투표

투표는 하이브리드 앙상블을 만드는 가장 간단한 방법 중 하나입니다. 다양한 모델 알고리즘을 훈련하고 예측 단계에서 "투표"하도록 합니다.

세 가지 훈련된 모델(Support Vector Machine, Logistic Regression 및 KNN)로 데이터의 흐름을 보여주는 다이어그램. 전자와 후자의 출력은 1이고 로지스틱 회귀의 출력은 0입니다. 최종 결과는 1입니다.

성능 또는 예측 확률을 기반으로 각 모델에 가중치를 추가하고 가중치 투표를 생성할 수 있습니다.

스태킹

스태킹은 단순히 평균 또는 다수를 계산하는 대신 최종 예측을 수행하기 위해 기본 모델 위에 새 레이어를 추가함으로써 투표 아이디어를 발전시킵니다. 새 레이어가 데이터가 아니라 모델 예측에서 학습하므로 메타 학습의 개념이 추가됩니다.

3개의 훈련된 기본 모델로의 데이터 흐름을 보여주는 다이어그램으로, 최종 출력을 표시하기 전에 해당 출력을 누적 모델로 결합합니다.

원하는 모든 메타 레이어를 쌓을 수 있으므로 여러 수준의 모델이 생성됩니다. 스택 모델의 경우 의사 결정 트리, SVM 또는 퍼셉트론을 사용하는 것이 좋습니다. 기본 모델의 경우 다른 앙상블을 포함하여 원하는 모든 방법을 사용하여 앙상블의 앙상블을 생성할 수 있습니다. 스택은 값 예측뿐만 아니라 그것이 정확할 확률을 생성하는 의사 결정 트리와 같은 기본 모델에서 훨씬 더 잘 작동합니다.

스태킹은 쌓인 모델이 학습하는 것을 해석하기가 더 어렵고 훨씬 더 많은 수의 변형이 있기 때문에 배깅 또는 부스팅보다 덜 인기가 있습니다. 모델 알고리즘, 하이퍼파라미터 구성 및 스태킹 레이어의 다양한 조합을 사용할 수 있습니다. 그러나 올바른 모델 조합을 사용하면 스태킹이 부스팅 및 배깅보다 훨씬 더 강력할 수 있습니다.

계단식

캐스케이딩은 예측에서 높은 수준의 확실성을 원할 때 사용됩니다. 스태킹 방식을 사용하지만 각 레이어에 하나의 모델만 있습니다. 각 수준에서 모델은 원하는 클래스가 아닌 것으로 간주되는 인스턴스를 버립니다.

캐스케이딩을 사용하면 단순한 모델이 복잡한 모델보다 먼저 데이터를 평가합니다. 예측 단계에서 첫 번째 모델은 데이터를 수신합니다. 확실성이 x 보다 크지 않으면(값이 높아야 하며 0.9보다 커야 함) 인스턴스를 다음 모델로 전달합니다. 그렇지 않으면 캐스케이드는 해당 모델의 예측된 출력을 반환합니다. 어떤 계층도 높은 정확도로 원하는 클래스를 예측할 수 없는 경우 앙상블은 네거티브 클래스를 반환합니다.

이 모델의 일반적인 사용 사례는 거래가 사기성일 가능성이 있는 시점을 예측하는 것입니다. 시스템이 하루에 수백만 건의 트랜잭션을 계산하고 각각을 수동으로 제어하는 ​​것이 불가능하다고 가정해 봅시다. 계단식 앙상블을 사용하면 사기성이 아닌 트랜잭션을 매우 높은 확률로 폐기할 수 있으며 수동으로 확인할 트랜잭션의 하위 집합만 남게 됩니다.

사기 거래를 탐지하기 위한 계단식 사용을 나타내는 다이어그램. 두 가지 모델은 0.9보다 높은 확실성으로 사기 가능성을 무시하는 반면, 후속 모델 중 하나는 더 낮은 확실성을 감지하여 수동 검사를 요청합니다.

이러한 모델은 우수한 재현율 지표가 필요할 때 좋은 옵션입니다.

투표 및 스태킹과 달리 계단식 앙상블은 다중 전문가 접근 방식보다는 다중 상태 접근 방식을 사용합니다. 너무 깊은 계단식 배열은 과적합을 생성할 수 있으므로 주의하는 것이 중요합니다.

앙상블 방법의 가치

많은 모델을 결합하면 인간이 함께 일할 때 발생하는 것처럼 더 우수하고 강력한 예측 변수를 만들 수 있습니다. 우리는 앙상블의 세 가지 제품군(배깅, 부스팅 및 하이브리드)을 설명하고 그들이 어떻게 훈련하고 예측하는지 보았습니다.

의사 결정 트리는 매우 약하고 불안정한 모델(분산이 높음)일 수 있지만 다양한 트리(랜덤 포레스트)의 무리는 매우 정확하고 안정적인 예측 변수가 될 수 있습니다. 앙상블의 주요 장점 중 하나는 머신 러닝에서 가장 큰 절충점 중 하나인 낮은 분산과 낮은 편향으로 모델을 구성한다는 것입니다. 대부분의 경우 다른 방법보다 성능이 뛰어나며 때로는 딥 러닝보다 훨씬 좋습니다. 비정형 데이터에서 작동할 때만 심층 신경망보다 약한 경향이 있습니다.

심층 신경망과의 비교를 계속하면 앙상블이 훈련 및 테스트 단계에서 더 가볍고 빠른 경향이 있다고 말할 수도 있습니다. 또한 강력한 개별 GPU와 같은 값비싼 하드웨어를 실행하지 않아도 됩니다.

수십 또는 수백 개의 모델이 동시에 작동하는 것은 거대하고 복잡한 도구를 만들기 때문에 앙상블은 인간이 직관적으로 이해할 가능성이 부족한 것이 사실입니다. 고맙게도 일부 기술을 통해 이러한 방법이 결정을 내리는 방법을 이해할 수 있습니다. 가장 인기 있는 것 중 하나는 모든 기계 학습 모델에 대해 특정 인스턴스에 대해 해석 가능한 설명을 생성하는 방법인 LIME입니다.

Kaggle 대회는 개발자가 재미를 느끼고, 새로운 기술을 배우거나, 상품을 받을 수 있도록 단독으로 존재하는 것이 아닙니다. 궁극적인 목표는 강력한 모델을 만들어 야생으로 풀어 실제 시나리오에서 마법을 부리게 하는 것입니다. 이러한 종류의 모델은 중요한 문제를 처리하는 조직에서 사용합니다. 예를 들어 사기 탐지는 단일 거래로 많은 양의 돈이 이동하는 은행 및 여행과 같은 산업에서 일반적인 사용 사례입니다.

앙상블은 다른 모델보다 낮은 분산과 편향으로 더 나은 예측을 생성합니다. 그러나 학습 내용을 해석하는 것은 어려우며 일부 민감한 응용 프로그램에서는 매우 중요할 수 있습니다. 이에 대한 한 가지 예는 개인 대출 산업입니다. ML 모델은 개인이 대출 자격이 있는지 여부를 결정할 수 있습니다. 그러나 고객이 금융 기관이 대출을 거부한 이유를 묻는다면 "우리 ML 모델이 그렇게 말했기 때문에"뿐만 아니라 자세한 설명이 있어야 합니다.

궁극적으로 엔터프라이즈 애플리케이션, 대형 은행 또는 소규모 비즈니스를 위한 강력한 ML 모델을 생성하거나 전문적인 평판을 높이기 위해 콘테스트에 참가하려는 경우 앙상블을 선택해야 합니다.