해당 포스트는 패스트 캠퍼스에 초격차 패키지 : 50개 프로젝트로 완벽하게 끝내는 머신러닝 SIGNATURE를 공부한 뒤 복습을 위해 각색하여 작성하였습니다.
이번 미니 프로젝트에서는 해외 신용 데이터 분석 실습을 진행했습니다. 신용 여부를 0과 1로 나누는 binary classification 문제로서 11개의 컬럼과 1000개의 데이터로 실습을 진행했습니다. 이전 몇개의 프로젝트와 마찬가지로 분석 목표 정의 Data processing Data EDA model analysis를 단계를 거쳤습니다. 하지만 이번 글에서 다루고자 하는 내용은 Data EDA 과정에 포함되어 있는 Feature Selection 과정입니다.
Feature Selection 과정은 어느정도 짐작할 수 있듯이 모델의 성능을 높이는데 필요한 feature들을 어떠한 기준을 통해 선택하는 과정입니다. Feature가 너무 많거나 Feature에 노이즈가 많이 섞여있는 경우 model의 성능을 높이는데 방해가 될 수 있기 때문에 해당 과정은 필요한 과정일 것입니다.
지금까지 미니 프로젝트들을 진행하며 여러가지 Feature Selection 기법을 배웠는데, 그 중 4가지 정도를 다루어보고자 합니다.
첫번째는 머신러닝 모델을 돌린 후 빠르게 Shapely value의 summary_plot을 확인하는 방법입니다
이때 빠르게 돌려보기 위해 LightGBM과 같은 모델을 사용했었습니다. 만약 정말 많은 변수들이 있고 그 변수들을 모두 돌려보기 위해서는 아무래도 가벼운 모델을 돌려보는 것이 효율적일것입니다. 그런 다음 SHAP 라이브러리의 summary_plot을 통해 어떤 변수가 모델링에 큰 영향을 끼치는지 확인할 수 있습니다. 위 이미지와 같이 어떤 변수들이 중요한지 확인하면서, 모델에 큰 영향을 끼치지 않는 변수들은 삭제를 하는 방법도 고려할 수 있을 것입니다.
모델을 빠르게 돌려보는 방법은 또한 hidden factor를 파악할 수 있도록 도와주는 경우가 있습니다. 예를 들어 summary_plot의 결과 상위에 속하는 변수들은 우리가 경험적으로나 직감적으로도 이미 알고 있는 변수들일 수 있습니다. 그렇다면 그 때는 큰 영향력을 행사하는 변수들을 제거한 후 모델링을 하는 방법이 있습니다. 그런 다음 Shapely value를 확인한다면 큰 영향력을 행사하는 변수들을 제거한 후 다른 변수들이 모델에 어떤 혹은 얼마나 영향을 끼치는지 확인할 수 있습니다. 이와 같이 중요도가 높은 변수들을 제거한 후 영향력이 적은 변수들은 어떻게 영향을 끼치는지, hidden factor를 파악하는데도 용이한 방법입니다.
두번째는 OptimalBinning을 통한 Feature Selection 방법입니다.
변수들에 대하여 OptimalBinning 라이브러리를 사용하여 IV (Information Value) 점수를 추출할 수 있습니다. 그 결과 어떤 변수들이 모델을 예측하는데 얼만큼의 정보량을 가지고 있는지 확인할 수 있습니다. 이 방법으로 영향력이 너무 낮은 변수는 제거하고 다시 모델링을 해볼 수 있는 정보를 줄 것입니다.
하지만 이 순위는 위의 SHAP 라이브러리의 summary_plot과 결과가 다를 수 있습니다. Shapely value는 서로의 상호작용도 고려한 순위를 나타내지만, Optimal Binning은 변수 하나와 타겟 변수 사이의 관계를 고려하여 점수를 산출해내기 때문입니다. 어떤게 정답인지 고민하기보다는 둘의 방법을 모두 사용해서 상위에 지속적으로 남아있는 변수는 어떤 것인지, 왜 SHAP에서는 중요한 변수가 OptimalBinning에서는 그렇게 중요한 변수가 아닌지 등을 분석하는 것은 도움이 될 것입니다.
세번째는 통계적인 접근 방법입니다.
사실 카이제곱 검정의 경우 대학교 부전공으로 들었던 데이터 분석 (통계) 수업 과정에서 들었던 내용이었지만, 까먹고 있다고 다시 상기할 수 있었습니다. 카이제곱 검정은 두 변수형 변수에 대한 분석 방법으로서 scipy 라이브러리의 stats.chi2_contingency를 통해 카이제곱 검정의 pvalue를 추출할 수 있습니다. 만약 p-value가 임의의 임계값 (여기서는 0.05)보다 낮을 때 우리는 변수의 의미가 없다는 귀무가설을 기각하고 변수가 타겟 컬럼과 연관성이 있다는 결론을 내릴 수 있습니다.
연속형 (numeric) 변수의 경우 ANOVA (일원분산분석)과 Kruskal-wallis test (비모수 검정) 두가지를 배웠었습니다. ANOVA의 경우 정규성, 등분산성, 독립성 3가지의 검정을 만족해야 사용할 수 있는 모수 검정으로서 정규성이 만족되지 않으면 뒤의 가정들은 확인해볼 필요가 없습니다. 만약 정규성을 만족하지 못한다면 Kruskal-wallis test를 이용하는데, 비모수 검정으로서 모수 검정인 ANOVA 보다는 신뢰성이 떨어지지만 유의미한 결과를 주는 검정 방법입니다.
마지막으로는 PCA (주성분분석)입니다. Feature Selection 부분에 넣은 이유는 상관관계가 높은 변수들이 있을시 PCA를 통해 상관관계를 제거할 수 있기 때문입니다. 다른 변수와 다중공선성이 없는 복한 변수를 추출함으로서 모델링에 활용할 수 있는 변수로 변환이 가능합니다. 사실 변수를 '선택'하는 것은 아니지만 해당 방법을 까먹지 않기 위해 같이 정리를 해두었습니다!
이번 글에서는 미니 프로젝트에서 실습을 한 내용보다 지금까지 Feature Selection에 대해 어떤 내용들을 배웠는지 다루어보았습니다. 해당 방법들 중에 정답을 찾기는 어렵겠지만, 여러가지를 시도해보며 모델링 혹은 분석에 유의미한 결과를 나타내는 방법을 찾는 것은 필요할 것입니다. 저도 다른 데이터에 적용을 해보며 어떤 결과가 나올지 잘 tracking 해보도록 하겠습니다.
부족한 글 읽어주셔서 감사합니다:)