캐글 신용카드 사기 검출 분류 실습을 해봅시다. 해당 데이터 세트의 레이블인 "Class" 속성은 매우 불균형한 분포를 가집니다. 레이블 값은 0과 1로, 0이 정상이며 1이 사기 트랜잭션을 의미합니다. 전체 데이터의 0.172%만이 사기 트랜잭션 데이터입니다. 일반적으로 사기 검출이나 이상치 검출이 주제인 데이터 세트는 이처럼 레이블 분포가 극도로 불균형할 수 밖에 없습니다. 레이블 분포가 극도로 분균형할 경우 학습 후 예측 성능에 문제가 발생하는 경우가 많습니다. 이유는 당연히, 이상치 데이터가 정상 데이터에 비해 극도로 적기 때문입니다. 모델은 대부분의 경우 정상 데이터로 분류를 수행할 것입니다. 지도학습에서 이러한 문제를 해결하려면 적절한 학습 데이터를 확보해야 합니다. 대표적으로 오버 샘플링(O..
캐글의 산탄데르 고객 만족 데이터 세트를 XGBoost와 LightGBM로 학습하여 예측해보겠습니다. 산탄데르 고객 만족 데이터 세트의 370개의 피처를 기반으로 고객의 만족 여부를 예측하면 됩니다. 산탄데르 은행이 캐글에 경연을 의뢰한 데이터로서, 피처 이름은 익명 처리되어 있습니다. 레이블의 이름은 TARGET이며 0은 만족, 1은 불만족을 나타냅니다. 레이블의 분포가 불균형한 데이터 세트이므로, 모델의 예측 성능은 ROC-AUC(ROC 영역의 넓이)로 평가하겠습니다. 데이터 세트를 불러왔습니다. 레이블 칼럼을 포함하여 총 371개의 피처가 있고, 데이터는 76020개가 있습니다. 각 피처의 타입과 Null 값의 개수를 확인하겠습니다. 모든 칼럼은 int 혹은 float 자료형으로 별도의 레이블 인코..
지금까지 머신러닝 모델의 하이퍼 파라미터 튜닝을 위해 사이킷런의 GridSearch() 메서드를 이용했습니다. 해당 메서드의 주요 단점은, 튜닝할 파라미터의 개수가 많아지거나 값의 범위가 넓을수록 최적화 수행 시간이 기하급수적으로 길어진다는 점입니다. 그라디언트 기반 앙상블 알고리즘은 성능이 매우 뛰어나지만, 하이퍼 파라미터의 개수가 많으므로 GridSearch() 메서드를 이용한 튜닝이 현실적으로 어려울 수 있습니다. 때문에 실무 및 Competition과 같은 상황에선 GridSearch 방식보다는 베이지안 최적화 기법을 이용해 하이퍼 파라미터 튜닝을 하곤 합니다. 베이지안 최적화는 블랙박스 형태의 목적 함수의 최대 또는 최소 값을 도출하는 입력값을 가능한 적은 시도를 통해 빠르고 효과적으로 찾아줍니..
LightGBM은 XGBoost와 함께 부스팅 계열 알고리즘에서 각광받고 있습니다. XGBoost가 아무리 GBM에 비해 학습 시간이 짧다고 해도, 여전히 랜덤 포레스트와 같은 알고리즘에 비하면 학습 시간이 너무 깁니다. 특히 하이퍼 파라미터 최적화를 위해선 더 긴 시간이 필요합니다. 또한 멀티 코어의 CPU 시스템이 있어야 학습 시간 단축을 체감할 수 있습니다. LightGBM의 가장 큰 장점은 XGBoost보다 학습 시간이 더 짧고, 메모리 소요량도 훨씬 적다는 점입니다. "Light"의 의미가 상대적인 기능 부족 및 예측 성능 부족으로 받아들여질 수 있는데, 절대 그렇지 않습니다. 예측 성능은 XGBoost와 비슷하며 기능은 오히려 LightGBM이 더 풍부합니다. XGBoost와 동일하게 조기 중..
XGBoost는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나입니다. 압도적인 수치는 아니지만, 분류 태스크에 있어서 일반적으로 다른 머신러닝 알고리즘보다 뛰어난 예측 성능을 보입니다. XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 어느정도 해결합니다. 특히 병렬 CPU 환경에서 병렬 학습이 가능합니다. 뛰어난 예측 성능 GBM에 비하면 빠른 수행 시간 과적합 규제(Regulalization) 기능 더 이상 긍정 이득이 없는 분할을 가지치기하여 분할 수를 줄이는 Tree pruning 자체 내장된 교차 검증을 통한 조기 중단 기능 결손값 자체 처리 기능 XGBoost의 핵심 라이브러리는 C/C++로 작성되었습니다. XGBo..
부스팅 알고리즘은 여러 개의 약한 학습기를 순차적으로 학습하고 예측하면서 잘못 예측한 데이터에 가중치를 부여해 오류를 개선합니다. 부스팅의 대표적인 구현으로 AdaBoost(Adaptive boosting)과 그라디언트 부스트가 있습니다. 에이다 부스트는 오류 데이터에 가중치를 부여하면서 부스팅을 수행합니다. 에이다 부스트의 동작 방식을 알아봅시다. +와 -로 마킹된 피처 데이터 세트가 있다고 합시다. Step 1에서, 첫 번째 학습기가 분류 기준1로 +와 -를 분류합니다. 동그라미로 표시된 데이터는 잘못 분류한 데이터입니다. Step 2에서 잘못 분류한 데이터에 대해 가중치를 부여합니다. Step 3에서 두 번째 학습기가 분류 기준2로 +와 -를 분류합니다. Step 4에서 두 번째 학습기가 잘못 분류..
앙상블 학습(Ensemble Learning)을 통한 분류는 여러 개의 분류기(Classifier)의 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법입니다. 앙상블 학습의 유형은 크게 보팅(Voting), 배깅(Bagging), 부스팅(Boosting)으로 나뉘며, 이 외에도 스태킹 등의 방법이 있습니다. 보팅은 서로 다른 알고리즘의 분류기를 결합 배깅은 같은 알고리즘의 분류기들이 각자 학습 데이터를 샘플링하여 학습한 뒤 보팅을 수행 대표적인 배깅으로는 랜덤 포레스트 알고리즘이 있습니다 위의 그림의 왼쪽이 보팅을, 오른쪽이 배깅을 도식화한 것입니다. 배깅에서 개별 분류기는 원본 학습 데이터에서 샘플링을 한 데이터로 학습을 합니다. 교차 검증이 데이터 세트 간에 중복을 허용하지 않는 것과 다르게..
결정 트리를 이용해 UCI 머신러닝 레포지토리에서 제공하는 사용자 행동 인식 데이터 세트에 대한 예측 분류를 수행해봅시다. 해당 데이터는 30명에게 스마트폰 센서를 부착시킨 뒤 여러 동작과 관련된 피처를 수집한 데이터입니다. 해당 피처를 바탕으로 어떤 동작인지를 예측해봅시다. features.txt 파일에는 각 피처의 인덱스와 이름이 공백을 기준으로 분리되어 있습니다. 해당 파일을 DataFrame 객체로 만들어봅시다. 피처는 총 561개인 것을 확인할 수 있습니다. 또한 피처 이름을 보면 인체의 움직임과 관련된 속성의 평균/표준편차가 X, Y, Z축에 따라 계산된 결과임을 알 수 있습니다. 주의해야 할 점은, 561개의 피처 중 중복되는 피처 이름이 있다는 사실입니다. 이후 피처 데이터 세트(dataf..
분류를 수행하는 다양한 머신러닝 알고리즘이 있습니다(나이브 베이즈, 로지스틱 회귀, 결정 트리, 서포트 벡터 머신, 최소 근접 알고리즘, 신경망, 앙상블 등). 앙상블은 가장 각광을 받는 방법 중 하나입니다. 앙상블은 서로 같거나 다른 알고리즘을 결합하는 것입니다. 이미지, 영상, 음성, NLP 영역에서는 신경망에 기반한 딥러닝이 주류를 이루지만, 정형 데이터 분야에선 앙상블이 매우 높은 예측 성능을 보입니다. 앙상블은 일반적으로 배깅(Bagging)과 부스팅(Boosting) 방식으로 나뉩니다. 대표적인 배깅 알고리즘인 랜덤 포레스트는 준수한 예측 성능과 상대적으로 빠른 수행 시간, 유연성을 갖추어 많은 데이터 분석가들이 애용하는 알고리즘입니다. 하지만 최신 앙상블은 부스팅 방식을 주류로 발전되고 있습..
피마 인디언 당뇨병 데이터 세트를 이용해 당뇨병 여부를 판단하는 분류 모델을 학습시킨 뒤 지금까지 공부한 분류의 평가 지표들로 모델을 평가해봅시다. 피마 인디언 당뇨병 데이터 세트는 북아메리카 피마 지역의 원주민 Type-2 당뇨병 데이터 결과입니다. 데이터 세트는 아래의 피처로 구성돼 있습니다. Pregnancies(임신 횟수), Glucose(포도당 부하 검사 수치), BloddPressure(혈압), SkinThickness(삼두근 뒤 피하지방량), Insulin(혈청 인슐린), BMI(체질량지수), DiabetesPedigreeFunction(당뇨 내력 가중치), Age(나이), Outcome(당뇨 여부, 0/1). 전체 데이터 중 Negative(0)이 500개로 Positive(1)보다 상대적..
