본문 바로가기

Dacon 파이썬 프로젝트

1118 Lv 4-1. 교차검증과 모델 앙상블을 활용한 와인 품질 분류하기

Lv 4. 교차검증과 모델 앙상블을 활용한 와인 품질 분류하기

1. EDA

(1) 파이썬 seaborn pairplot

  seaborn pairplot:  데이터에 들어 있는 각 컬럼들의 모든 상관 관계를 출력

  3차원 이상의 데이터-> pairplot 함수를 사용해 분포도 그릴 수 있음. 

  pairplot:  격자 형태로 각 집합의 조합에 대해 히스토그램, 분포도 그림

  [실습 코드]


(2) 파이썬 seaborn distplot

  seaborn displot : 데이터의 히스토그램을 그리는 함수
  히스토그램: 수치형 데이터 분포 시각화 방법
  -> 변수를 여러개의 bin으로 분할하여 bin당 관측수를 막대그래프로 표현

  [실습 코드]

(3) 파이썬 seaborn heatmap

  히트맵(Heat Map)
  : 두개의 범주형 변수에 대한 반응변수의 크기를 색깔의 변화로 표현하는 것

  -> 데이터 분석 과정에서 변수별 상관관계 확인 시 히트맵 그래프 사용 

  * 다중공선성을 위해 히트맵을 분석해 변수별 상관관계 파악 

  [실습 코드] 

(4) 파이썬 다중공선성 Scatter plot

다중공선성(Multicollinearity)
: 상관관계가 높은 독립변수들이 동시에 모델에 포함 될 때 발생
if 두 변수가 완벽하게 다중공선성에 걸려있으면
-> 같은 변수를 2번 넣은 것
-> 모델이 결과값을 추론하는 데 방해가 됨(잘못된 변수 해석, 예측 정확도 하락)

다중공선성 확인 방법
1. Scatter plot을 통한 확인
2. Heatmap 그래프를 통한 확인
3. VIF(Variance Inflation Factors, 분산팽창요인)을 통한 확인

Scatter plot(산점도 그래프) 
-> 2 개의 연속형 변수에 대한 관계를 파악하는 데 많이 활용됨 

[실습 코드]

(5) 파이썬 다중공선성 VIF(분산 팽창 요인)

VIF(Variance Inflation Factors, 분산팽창요인)
: 변수간 다중공선성 진단 수치 (1~ 무한대 범위)
* 통계학에서 VIF 값이 10이상 -> 해당 변수는 다중공선성이 있음

 VIFk = 1 / (1 - Rj^2)

 *VIFk: k번째 변수의 VIF, Rj^2 : 회귀분석에서 사용하는 결정계수

 [실습 코드]

5.png
46.1 kB

2. 전처리

(1) 파이썬 다중공선성 해결 - 변수 정규화

    다중공선성 해결방법
      1. 변수 정규화
      2. 변수 제거
      3. PCA(주성분 분석)

      변수 정규화 : 수치형 데이터들을 Min-Max scaling 이나 Z-Score scaling등의 방법으로 정규화 시키는 것

      -> 정규화 적용 전후 분산 팽창 요인을 서로 비교하여 다중공선성 해결 확인 

    [실습 코드]


(2) 파이썬 다중공선성 해결 - 변수 제거

  변수 제거 : 변수의 VIF(분산팽창요인) 계수가 10이상인 변수 제거 하는 방법  

  [실습 코드]

(3) 파이썬 다중공선성 해결 - PCA (1)

  차원 축소 : 많은 피처로 구성된 다차원 데이터 셋의 차원을 축소해 새로운 차원의 데이터 셋을 생성하는 것 

  1. 일반적으로 차원이 증가할 수록 포인트 간 거리가 기하급수적으로 멀어지고,
  희소한(sparse) 구조를 가짐
  수백개 이상의 피처로 구성된 데이터셋 -> 상대적으로 적은 차원에서 학습된 모델보다 예측 신뢰도 떨어짐
  피쳐가 많은 경우 개별 피처 간의 상관관계 높을 가능성이 큼

  2. 선형 모델에서 입력 변수 간 상관관계가 높을 경우 
     -> 이로 인해 다중 공선성 문제 발생 -> 모델 예측 성능 떨어짐
     수십개 이상의 피처가 있는 데이터의 경우, 시각적으로 표현 해 데이터 특성 파악 어려움

  2번 -> 3차원 이하의 차원 축소를 이용해 시각적으로 데이터를 압축해 표현 가능

  차원 축소 종류
1. feature selection : 특정 피처에 종속성이 강한 불필요한 피처는 아예 제거하고, 데이터의 특징을 잘 나타내는 주요 피쳐만 선택하는 것

2. feature extraction:  기존 피처를 낮은 차원의 중요 피처로 압축해서 추출하는 것
   -> 새롭게 추출된 중요 특성은 기존 피처가 압축된 것이므로 기존 피처와는 완전 다른 값이 됨
   -> PCA 가 feature extraction의 기법 중 하나

(4) 파이썬 다중공선성 해결 - PCA (2)

  PCA : 여러 변수 간에 존재하는 상관관계를 이용해 이를 대표하는 주성분을 추출해 축소하는 기법
        기존 데이터의 정보 유실을 최소하 하기위해 가장 높은 분산을 가지는 데이터 축으로 차원 축소


  PCA -> 제일 먼저 가장 큰 데이터 변동성을 기반으로 첫 번째 벡터 축 생성
         두번째 축은 이 벡터 축에 직각이 되는 벡터를 축으로 생성
         세번째 축은 다시 두번째 축과 직교벡터를 설정하는 방식으로 생성

       -> 이렇게 생성된 벡터 축에 원본데이터 투영 시 벡터 축의 개수 만큼의 
          차원으로 원본 데이터가 차원 축소 됨.

(5) 파이썬 다중공선성 해결 - PCA (3)

 iris 데이터로 PCA 실습

 1. iris 데이터 로딩
 2. x축 : sepal length, y축 : sepal width -> 품종 데이터 분포 시각화
 3. PCA를 이용해 차원 축소 후, 변환된 데이터 셋을 2차원 상에서 시각화

 [실습 코드]



(6) 파이썬 연속형 변수 변환 (1)

  머신러닝 모델링에서 중요한 요인
  1. 데이터 증강 방법   -> 데이터 증강은 매우 제한적 
  2. 추가된 파생 변수 종류 

  연속형 변수를 범주형 변수로 변환 시키면 파생변수를 추가 할 수 있음

  연속형 변수 범주형 변수로 변환하는 방법
  1. 수치 범위 구간을 직접 지정해 레이블링 하기
  2. 판다스의 cut() 함수로 레이블링 하기 

  [실습 코드]

(7) 파이썬 연속형 변수 변환 (2)

  판다스의 cut() 함수로 레이블링 하여 연속형 변수를 범주형 변수로 변환

  train['변수명'] = pd.cut(train['변수명'], 나눌 범주의 갯수(정수형), labels=False)

  [실습 코드]
    # train 데이터의 alcohol 변수를 구간이 5개인 범주형 변수로 변환
     train['alcohol'] = pd.cut(train.alcohol, 5,labels=False)

(8) 파이썬 Polynomial Features (1)

    Polynomial Features 라이브러리
    : sklearn에 내장되어 있는 라이브러리
      현재 데이터를 다항식 형태로 변환 가능 

   만약 데이터에 x1, x2 변수가 있으면 PolynomialFeatures 라이브러리로
   1, x1, x2, x1^2, x1*x2, x^2 로 변환 가능

   [실습 코드]

(9) 파이썬 Polynomial Features (2)

   와인 품질 분류 데이터에 Polynomial Features 적용후 
   decision tree 모델 이용해 품질 분류 

   1. train 데이터 변환
   2. 모델 학습(Decision Tree)
   3. test 데이터 변환
   4. 추론
   5. 정답 파일 생성

   [실습 코드]

출처 : https://dacon.io/competitions/open/235698/talkboard/403458?page=1&dtype=recent