본문 바로가기

Data Handling/Data Preprocessing

(9)
Feature selection : feature importance vs permutation importance 안녕하세요, 오늘은 Feature selection 에 대해 다뤄보려고 합니다! Feature selection은 말 그대로 모델에 사용될 feature를 선택하는 과정입니다. feature가 그냥 많으면 많을수록 좋은거 아닌구요? 네!! 아닙니다!! 예측에 도움이 되는 feature는 많으면 많을수록 좋지만, 어떤 특성들은 예측에 아무런 도움이 되지 않아 시간만 소모하기도 하고 또 어떤 특성들은 오히려 성능을 떨어뜨리기도 하기 때문에 제거해주는편이 좋습니다. 그럼 어떤 기준으로 중요한 특성과 그렇지 못한 특성으로 구분할까요? 오늘 소개해드릴 기준은 feature importance와 permutation importance 입니다. 순서 feature importance 개념 및 코드 동작 원리 per..
언더 샘플링(Undersampling)과 오버 샘플링(Oversampling) * 해당 포스팅은 파이썬 머신러닝 완벽 가이드(권철민, 2019) 교재를 참고하여 공부하며 작성한 글입니다. 순서 언더 샘플링과 오버 샘플링의 개념 SMOTE 개념 SMOTE 코드 1. 언더 샘플링과 오버 샘플링의 개념 데이터가 불균형한 분포를 가지는 경우, 모델의 학습이 제대로 이루어지지 않을 확률이 높습니다. 이 문제를 해결하기 위해 나온 개념이 언더 섬플링(Undersampling)과 오버 샘플링(Oversampling)입니다. 언더 샘플링은 불균형한 데이터 셋에서 높은 비율을 차지하던 클래스의 데이터 수를 줄임으로써 데이터 불균형을 해소하는 아이디어 입니다. 하지만 이 방법은 학습에 사용되는 전체 데이터 수를 급격하게 감소시켜 오히려 성능이 떨어질 수 있습니다. 오버 샘플링은 낮은 비율 클래스의 ..
IQR 방식을 이용한 이상치 데이터(Outlier) 제거 * 해당 포스팅은 파이썬 머신러닝 완벽 가이드(권철민, 2019) 교재를 참고하여 공부하며 작성한 글입니다. 이상치 데이터(Outlier)는 모델의 성능을 떨어뜨리는 불필요한 요소이기 때문에 꼭 제거해주어야 합니다. 그렇다면 어떻게 이상치 데이터를 찾을 수 있을까요? 1차적으로 EDA 과정에서 그래프를 통해 발견할 수 있습니다. 하지만 이 방법은 소수의 데이터가 평균으로부터 눈에 띄게 떨어진 경우에만 가능하다는 한계가 있습니다. 따라서 "어디까지가 이상치 데이터다" 라고 판단하는 기준이 필요하게 되는데요, 여러가지 방법들 중 오늘은 IQR(Inter Quantile Range) 방식에 대해서 정리해보겠습니다. IQR 방식은 사분위(Quantile) 개념으로부터 출발합니다. 전체 데이터들을 오름차순으로 정..
피쳐 스케일링 (Feature Scaling) * 해당 포스팅은 파이썬 머신러닝 완벽 가이드(권철민, 2019) 교재를 참고하여 공부하며 작성한 글입니다. 순서 표준화(Standardization) - StandardScaler 정규화(Normalization) - MinMaxScaler fit(), transform() 의 역할 log 변환 1. 표준화 (Standardization) - StandardScaler 값들이 평균으로부터 얼마나 떨어져 있는지 나타내는 방법입니다. 평균을 빼고 표준편차로 나눠주면서 가우시안 정규분포(평균=0, 분산=1)를 가진 값들로 변환하는데, 이는 단위가 서로 다른 특성들의 변화를 비교하기에 적합합니다. 예를 들어 키가 177이고 몸무게가 70인 열로 특성을 가지기 보다, 키와 몸무게가 평균보다 각각 얼만큼 큰지를 ..
범주형 변수 처리 - 인코딩(Encoding) 다음과 같은 데이터 프레임이 있다고 가정해봅시다. 흔히 'subject'와 같은 값의 형태를 가진 변수를 '범주형 변수', 'score'와 같은 값의 형태를 가진 변수를 '수치형 변수'라고 합니다. '범주형 변수'의 경우, 모델링을 하기 전에 컴퓨터가 이해하기 쉬운 숫자의 형태(정수형)로 인코딩해야 하는데, 오늘은 그 방법에 대해서 정리해보겠습니다. 순서 Label encoding One hot encoding get_dummies() factorize() ● Label encoding 문자형을 정수형으로 인코딩하는 과정입니다. 예를 들어 'english', 'korean', 'math'를 0, 1, 2 처럼 변환시키는 것입니다. from sklearn.preprocessing import LabelEn..
훈련, 테스트 데이터 통합하기 오늘은 훈련 데이터와 테스트 데이터를 하나로 통합하는 코드를 분석해 볼텐데, 이번 포스팅에서는 데이터를 통합하기 위해 사용된 함수들을 위주로 정리해보겠습니다. 해당 코드는 캐글의 '산탄데르 제품 추천 경진대회'의 8등 팀(Alejo y Miro)의 소스코드 중 일부이며, '캐글 우승작으로 배우는 머신러닝 탐구생활' 도서를 참고했음을 밝힙니다. 그럼 시작해보겠습니다!! 순서 문제 뼈대 구상 및 코드 사용된 함수 정리 1. 문제 train set은 총 48개의 열로 구성되어 있습니다. 그 중 24개는 고객 관련 특성이고, 나머지 24개는 사용 중인 제품 관련 특성입니다. test set은 고객 관련 특성 24개만 존재하고, 제품 관련 특성 24개에 대해서는 0으로 처리해서 train set과 통합하고자 합니..
시간별 데이터를 일자별 데이터로 변환하기 다음과 같은 날씨 데이터가 있습니다. 2018-02-01 부터 2020-05-18 까지의 시간별 기온데이터로, 지역별(184, 185, 188, 189)로 각각 정리되어 있습니다. 해당 데이터를 일자별로 정리하되, 모든 지역을 고려한 일자별 최소, 최대, 평균 기온의 형태가 필요하다고 합니다. 이런 형태로 말이죠 :) 시작해 볼까요? 순서 시간별 지역들의 기온을 평균내거나 중앙값을 사용하여 지역을 없애기 시간별 기온에서 최소, 최대, 평균 기온을 추출하기 1. 시간별 지역들의 기온을 평균내거나 중앙값을 사용하여 지역을 없애기 지역의 속성을 모두 고려하기 위해 다음과 같은 데이터 형태를 만들어야 합니다. 밑으로 쭉 붙어있는 데이터를 같은 시간 기준으로 오른쪽으로 붙이는 작업을 해야겠네요. 블로그 '문법' ..
결측치 처리하기 (삭제 / 대체) 순서 결측치(NaN)가 포함된 행 삭제하기 - dropna() 특정값/ 평균값/ 최빈값/ 중간값으로 대체하기 - fillna() / replace() 이전/ 이후 값으로 대체하기 - fillna() / shift() ■ 결측치(NaN)가 포함된 행 삭제하기 # 전체가 NaN인 행만 삭제 : how = 'all' # NaN이 두 개 이상인 행만 삭제 : thresh = 2 # 특정 열에서만 결측치 확인하기 : subset = ['A_col','B_col',...] data.dropna(axis = 0, how = 'any', inplace=True) ■ 특정 값/ 평균값/ 최빈값/ 중간값으로 대체하기 - fillna() / replace() - fillna() data.fillna(0, inplace=Tr..