기본 콘텐츠로 건너뛰기

2022의 게시물 표시

Machine Learning: Target Encoding

Target Encoding은 categorical feature의 각 카테고리별 target의 통계값을 활용해 유의미한 선형성을 띄는 continues feature로 바꿔주는 방법으로. 대표적으로 카테로리별 target의 평균값으로 인코딩 하는 mean encoding이 있다. mean encoding은 binary target에 적용될때 bin counting으로 불리기도 한다. non-order 카테고리중 카테고리가 많아서 one-hot시에 오히려 학습도가 떨어지는 feature를 대상으로 한다. Smooting Target encoding은 target 정보를 이용한 feature를 만들기 때문에 data leakage로 인한 overfitting을 야기한다. 그래서 우선 data leakage를 피하기위해 train set을 encoding split과 train split으로 나누어야 한다. 그럼에도 불구하고 여전히 두종류의 문제가 존재한다.  첫번째는 unknown categories 다. 모델 학습시에 encoding에 사용되는 split은 train에 사용될 split과 독립이기 때문에 encoding split에는 존재하지 않던 카테고리가 존재할 수 있고 이 경우에 모델은 임의의 값으로 impute 해줄 수 밖에 없다. imputation된 값은 통계적 의미가 없으므로 feature의 중요도가 낮아지게 된다.  두번째 문제는 rare categories 다. 만약 카테고리가 데이터셋에 아주 드물게 존재한다면, encoding split에서 수행되는 해당 카테고리의 target에 대한 통계값의 정확도(전체 데이터셋에서의 통계값과 일치하는 정도)는 낮아질 수 밖에 없다. 이런 feature에서는 target encoding의 통계적 의미가 퇴색된다.  이러한 문제들의 해결책으로 제시되는 것이 smooting 이다. 그 방법은 카테고리 내의 평균($Avg_{cat}$)과 전체 평균($Avg$)을 섞는 것이다. $$encoding = weight

Mutual Information과 Correlation

 Mutual Information과 Correlation의 차이점 공부하다가 문득 떠오른 의문이 있다. 왜 feature engineering에서는 correlation을 안쓰고 mutual information을 사용할까? Mutual information은 correlation로 대체될수 없는 어떤 특징을 가진걸까? Mutual Information과 Correlation가 가진 정보의 차이 mutual information은 두 변수의 정보 엔트로피간의 인과관계를 나타내는 정보고 correlation 두 변수 값들의 인과관계를 나타내는 정보다. correlation으로 알수있는 정보는 오직 두 변수간의 인과관계의 선형성과 단조성이다. 이는 인과관계의 극히 일부분에 지나지 않는 정보다. 그래서 비선형의 인과관계를 지닌 변수들과 인과관계를 찾을 수 없는 변수들을 구분하지 못한다. 반면 mutual information은 그 인과관계의 구체적인 모양을 가르쳐주지 않지만 선형 비선형을 아우르는 전반적인 인과관계의 세기를 알려줄 수 있다.

PCA(Principal Component Analysis)

 PCA(Principal Component Analysis) 군집화가 근접도를 기반으로 샘플들을 여러 그룹으로 재구성했다면, PCA는 여러 변수간의 관계를 기반으로 새로운 변수들로 재구성한다. PCA는 어떤 변수 집합의 관계를 나타낸 그래프를 보고 임의의 축을 추가해 더 단순한 관계로 표현할 수가 있다면 그 축을 변수로하는 새로운 변수 집합으로 대체하는것이다. 이는 서로간의 종속성을 지닌 변수 집합을 서로 독립인 변수집합으로 분해하는 작업이다. 따라서 궁극적으로 변수 벡터의 차원이 줄어들게 된다. PCA로 기대할 수 있는 효과 Feature간의 상관관계 제거 Feature vector의 차원 감소 Anomaly Detection : Anomaly 및 outlier는 PCA로 낮은 분산을 가진 변수에서 확실해지는 경향이 있는데, PCA는 변수들의 중복제거하여 분산을 낮춘다. PCA의 구현 1. 표준화 : 변수들의 크기를 표준화하여, PCA가 특정 변수를 무시하지 못하게 한다. 크기가 상대적으로 작을수록 변수와의 관계가 노이즈로 무시될 가능성이 크다. 2. PCA 수행.

K-means Clustering in Machine Learning

 K-means Clustering in Machine Learning K-means clustering은 주어진 데이터셋을 k개로 군집화하는 알고리즘입니다. k-means라는 이름은 반복되는 군집화 과정에서 각 군집이 자신이 가지고 있는 샘플들의 평균(mean)에서 가장 가까운 유클리드거리에 위치한 외부의 샘플을 군집에 편입하기 때문이다. 이때 모든 변수를 나타낸 다차원 공간에서 각 군집의 평균을 나타내는 지점을 해당 군집의 centeroid라고 한다. Feature Rescaling의 필요성 모든 변수들을 나타낸 다차원 공간에서 각 변수들은 그들의 상대적인 크기 차이때문에 유클리드 거리를 구하는데 있어서 서로다른 가중치를 부여받게 됩니다. 따라서 변수에 따른 가중치 부여가 없는 올바른 군집화를 수행하기 위해 서로 크기 차이가 나는 변수들의 rescaling이 필요합니다. 구현

머신러닝에서의 Feature Engineering

머신러닝에서의 Feature Engineering 피쳐엔지니어링은 문제해결에 용이하게 피쳐들을 설계하는 것이다. 머신러닝에서 문제해결을 더욱 용이하게 한다는 것은 모델의 정확도를 높히거나 불필요한 계산과 데이터 요구를 줄여주는 것이다. Feature engineering의 목적은 모든 feature들이 target과 학습가능한 관계를 가지게 feature set을 구성하는 것이다. 먼저, 그 목적을 이루기 위해서 기본으로 주어진 feature들과 target간의 관계를 이해해야한다. 그 다음 모든 feature들과 target의 관계가 모델이 학습가능한 관계가 되게끔 feature set을 재설계 해야한다. 각 모델은 그 종류에 따라 자신이 학습가능한 관계가 정해져있다. 예를들어 선형모델은 오직 선형관계만 학습가능하다. 그러기 위해선 관계가 없는 feature들은 버리고 관계가 있지만 모델이 학습하기 어려운 feature들은 수정이 필요하다. Feature Engineering의 기법들 1. Feature Importance 측정 : Mutual Information(MI) mutual information은 두 변수간의 상호 의존성을 측정한 것. feature-target간의 MI는 feature importance가 된다. 여기서 측정한 target과의 MI값이 낮은 feature들의 정보들을 조합해서 더 높은 MI값을 가진 새 feature를 만들어 모델에서 정보를 더 잘 활용할 수 있게 하는 것이 Feature Engineering의 핵심이다. 기본 원리 서로다른 두 변수에 대해서, 서로간의 상호 의존성이 클수록 한 변수의 정보 엔트로피(불확실성) 감소가 다른 변수의 정보 엔트로피(불확실성) 감소에 전이되는 정도가 커진다. 따라서 한 변수의 정보 엔트로피가 줄어들때 다른 변수의 정보 엔트로피가 얼만큼 줄어드는지를 측정한다. 정보 엔트로피 어떤 상태에서 얻을 수 있는 정보량의 기대값이다. 이는 어떤 상태가 가진 정보의 불확실성으로 해석된다. 정보량 어떤

머신러닝 : Pipeline 사용법

 머신러닝 : Pipeline 사용법 pipeline은 사용자가 정의한 데이터 전처리부터 모델학습 까지의 일련의 과정들을 하나의 class로 묶어 줍니다. 이로인해 사용자가 얻을 수 있는 장점은 다음과 같습니다. 코드가 간결하다 불필요한 변수 X 가독성 ↑ ↳↳↳디버깅이 쉽다. cross-validation을 사용할 수 있다. 주요 파라미터 steps : tuple list를 받아서 순서대로 실행한다. 각 tuple은 다음과 같이 구성  (alias, transformer or estimator) 처음-중간 tuple은 transformer만 사용. 마지막 tuple은 transformer 또는 estimator사용. ↪estimator가 아니면 predict() 사용불가. 주요 메소드 fit(X, y) : X를 step에 따라 각 transformer에서 fit_transform()하고 최종적으로 estimator를 fit()한다. [ 마지막 step이 estimator일 때만 가능] transform(X) : X를 step에 따라 transform()한 결과를 반환. [마지막 step이 transformer일때만 가능] predict(X) : X를 step에 따라 transform하고 estimator로 predict()한 결과 반환. [ 마지막 step이 estimator일때만 가능] fit_transform(X) : 모든 단계에서 fit_transform()한 결과를 반환. [ 마지막 step이 transformer일때만 사용가능] fit_predict(X, y) : fit()의 최종단계에서 estimator가 fit_predict()를 수행. [ 마지막 step이 estimator일 때만 가능]

머신러닝 : Data Leakage

 머신러닝 : Data Leakage Data leakage는 모델 입력으로 들어가선 안되는 데이터들이 유출되어 들어감을 말한다. 이러한 data leakage는 학습된 모델로 하여금 validation data에서의 성능이 좋게 나와도 test data 혹은 실측 데이터에서의 성능이 크게 떨어지는 문제를 유발한다. 그 종류로는 target leakage, train-test contamination 두 가지가 있다. Target Leakage 모든 feature는 target과의 어떤 chronological order을 가진다.  chronological order target보다 앞선 feature는 대게 문제 생길일이 없지만, target보다 뒤에오는 feature들은 가끔 그 순서를 무시하게 될 때 target leakage가 발생하게 된다. 모든 feature는 target에 대한 정보를 가지고있다. 그러나 chronological order에 그들이 가진 target에 대한 정보는 차이가 생긴다. target보다 앞선 feature들은 미래에 target이 어떤 값을 가질지에 대한 정보를 가진다. 그러나 target보다 뒤에 오는 feature들은 과거에 target이 어떤 값을 가졌었는지에 대한 정보를 가진다. 이 경우 target값이 정해지지 않으면 feature 값도 정해지지 않기 때문에 해당 feature값을 구하는 것이 불가능하다. 그럼에도 불구하고 데이터가 주어진다면 chronological order를 무시한 데이터를 가져오는 일이 발생했다는 것이다.  따라서, chronological order가 뒤에 오는 feature를 사용한 모델은 historical data를 사용하는 학습및 평가 과정에서는 높은 정확도를 보여주지만 deploy시에는 chronological order를 무시한 데이터를 사용하게 되어 낮은 정확도를 가지게 된다.  target leakage를 피하려면, chronological order가 target 보다 뒤

머신러닝 전처리, Categorical variable 처리법

머신러닝 전처리, Categorical variable 처리법 회귀분석 모델이 제대로 작동하기 위해서는 변수값들이 서로 order를 가져야만 한다. 하지만 categorical variable은 모델이 사용할만큼 그 order가 명시적이지 않다. categorical variable는 두가지로 나뉠 수 있다. 하나는 category 사이에 order가 있는경우, 나머지는 그렇지 못한 경우다. 전자의 경우는 각 category를 해당하는 order로 encoding하는 방법이 있다. 후자의 경우도 조금 복잡한 전처리 과정을 거쳐서 모델이 사용가능한 데이터로 encoding이 가능하다. 방법 1: Drop 그냥 버려서 모델에 노이즈로 작용하지 않게 한다. 방법 2: Ordinal Encoding category가 자체적인 order를 가진 경우에만 사용가능한 방법이다. 각 category를 해당하는 order로 encoding 한다. 방법 3 : One-Hot Encoding category가 order를 가지지 않는 경우를 위한 방법이다. 각 category별로 column을 만들고 column의 value가 (original value == category)에 대한 boolean value를 가지도록 encoding 한다. 이러면 각 column은 boolean value를 가지기 때문에 회귀분석모델에서 충분히 이용 가능하다. 다만 category 수가 많아지면 data의 column이 너무 많아지게 된다.

Machine Learning: Missing Value에 대한 해결법

Machine Learning: Missing Value에 대한 해결법 1. Drop Columns with Missing Values 데이터 전처리가 간단하다. 그러나 컬럼을 통째로 버리면 그만큼 모델이 사용할 정보가 적어드는 단점이 있다. 2. Imputation Missing Values를 다른 데이터로 채워 넣는다. 1번 방법보단 전처리가 복잡하지만 여전히 간단하다. 또한 해당 column이 가진 정보도 그대로 이용 가능하다. 그러나 임의로 채워넣은 데이터로인해 정보에 왜곡이 생기는 단점이 있다. 모델은 임의로 채워넣은 데이터와 아닌 데이터를 구분하지 못한다. 3. An Extension To Imputation Imputation과 함깨, Imputation여부를 나타내는 새 column을 생성한다.  새 column들은 각각 자신이 나타내는 column에서 어떤 row가 missing value를 가지고 있는지 나타낸다. 이는 Model이 임의로 채워진 데이터들과 원본 데이터를 구분할 수 있게 한다. 즉 정보의 왜곡이 없다.

SHAP Values

 SHAP Values SHAP Values는 어떤 prediction에 각 feature들이 얼만큼의 영향을 끼쳤는지를 보여준다. SHAP의 의미 Shapley additive explanations의 약자. 기본 원리 만약 어떤 모델 $M(f_1, f_2, f_3)$에 대해 어떤 입력 $V$에 대해 $p_v = M(v_1, v_2, v_3)$의 prediction을 구하게 됬다고 하자. 그러면 우리는 기준값(= $f_1, f_2, f_3$의 기댓값) $B$로 구한 prediction $p_b = M(b_1, b_2, b_3)$와 비교해서 얼만큼 차이가 나는지 알 수 있다. 만약 이러한 차이를 만드는데 $v_1$이 얼마나 영향을 줬는지 알고 싶다면, $f_1$ feature를 제외한 나머지 feature $f_2, f_3$에 B또는 V의 원소를 채워넣는 각 조합의 경우마다 ($f_1 = v_1$일때의 prediction) - ($f_1=b_1$일때의 prediction)을 구하고 그 결과들의 가중평균을 구하면 된다. 이렇게 구한 값이 입력이 V일때 $v_1$이 가지는 SHAP 값이다. 그리고 V의 모든 원소의 SHAP 값들을 더하면 $p_v - p_b$가 나오게 된다. SHAP의 종류 SHAP는 그 구현 알고리즘에 따라 여러 종류가 있다. n개의 input Feature를 가지는 모델에서 SHAP 값을 구하면 한 feature에 대해서는 적어도 2^(n-1)개 모든 feature에 대해서는 중복을 제거하고 $2^n$의 prediction을 필요로한다. 따라서 input feature의 수가 많은 경우에 대한 다른 알고리즘을 필요로 하게된다. 그 대표적인게 deep learning model에서 사용하는 deep explainer 그리고 모든 model에서 SHAP 근사값을 빠르게 구할 수 있는 kernel explainer이다. 구현 Summary Plots 전체 records에 대한 SHAP values를 구하고 각 feature의 값에 따른 SHAP값을

Partial Dependence Plot(PDP)

Partial Dependence Plot 어떤 black-box model 내부에서 각 feature가 prediction에 어떻게 영향을 주는지를 시각적으로 보여주는 기법이다. 기본 원리 validation dataset에서 구하고자하는 feature의 백분위수( percentile)를 전체적으로 균등하게 추출한다음 각 percentile값만을 feature의 값으로 가지는 여러가지 dataset을 만든다. 예를들면 11개의 백분위수로 나누면 feature값으로 0%백분위수만을 가지는 dataset, 10% 백분위수만을 가진 dataset, ... 100% 분위수만을 가진 데이터셋 이렇게 11개의 dataset이 만들어진다.  이제 각 dataset을 이용해 prediction을 수행하면 해당 feature값이 변화함에 따라 predicted target이 어떻게 변하는지 알 수가 있다. "YearBuilt"값의 변화에 대한 target response의 변화를 나타낸다. 좌측에서 첫번째 점이 첫 dataset으로 prediction을 수행한 결과로 이 값이 y축의 기준점(0)이 된다. 예제에서는 "YearBuilt"값이 1880일때의 예측값이 기준이다. 각각의 점들은 각 dataset으로 예측을 수행했을때의 값을 나타내고 파란영역은 그 분산을 나타낸다. 예제를 보면 알듯이, PDP를 통해 대략적인 상관관계를 유추 가능하다. 이 model에서 target은 'YearBuilt'와 강한 양의 상관관계를 가지고 있음을 알수 있다. 예제에서는 아니지만, 2차함수나 3차함수의 모양을한 non-linear한 상관관계를 보여줄 수도