기본 콘텐츠로 건너뛰기

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 보다 뒤