6 분 소요

강의 3

  • 데이터 => 범주형 데이터와 수치형 데이터로 구분됨
  • 범주형 데이터 => 명확한 그룹으로 구분됨, 수치형 데이터 => 수로 나타남
  • 범주형 데이터=> 명목형 데이터(순서 상관x) / 순서형 데이터(순서 존재)
  • 순서형/ 수치형 고민되면 산술연산에 의미 두기
  • 범주형 데이터 => 집단 간 분석에 용이
  • 대푯값 => 데이터 집단의 비교를 위해 추출하는 대표 값 ex.평균, 기댓값(가중평균), 최빈값, 중앙값 등
  • 명목형 데이터
  • 명목형 데이터 => 일반적으론 값이 텍스트로 구분됨 ex. 국가, 혈액형, MBTI, 과일, 성별 등
  • ML/AI 모델에 넣기 위해서 수 또는 수 배열로 치환 필요
  • 명목형 데이터 전처리 => Label Encoding
  • 가장 쉬운 전처리 => 1대 1 매핑 EX. 국가: [한국,일본,중국,미국] => [0,1,2,3]
  • 주의점1 없는 레이블에 대해서 미리 전처리 필요
  • 주의점2 2개 이상에서 [0,1,2] 등으로 레이블링 한다면 순서 존재 => 선형연산 들어가는 모델에서 좋지않은 영향
  • 순서가 존재하면 모델에 바이어스가 생기면서 결론적으로 모델에 안좋은 영향
  • 순서 정보 모델에 주입하지 않기 위한 방법 => One-Hot Encoding
  • [한국, 여자, 20] => [[1,0,0,0], [1,0,0], 20] 으로 치환 가능
  • One-Hot Encoding => 다수 범주가 동시에 포함될 수 있는 경우에도 효과적 => 변수따라 데이터 커질수도 있음
  • 이에 학습속도, 퀄리티 악영향 끼침 => 빈도 기반으로 범주를 일부 줄이는 것 추천(데이터 증강도 하나의 방법)

  • 범주가 너무 많다면 => Binary Encoding => 순서 정보 없앰, but 범주의 의미가 거의 사라짐
  • Embedding, Hashing, 특정 값에 따른 인코딩 (해당 범주가 가진 통계값 사용, ex 빈도수)
  • 특정 값에 따른 인코딩 => 범주에 대한 정보, 수치적 정보를 담아 효과적인 머신러닝 가능한 technique
  • 표본집단의 데이터가 모집단의 데이터와 통계가 일부 다를 때 결과에 나쁜 영향, 범용적인 모델 만들 때는 주의해야함

  • One-Hot EncodingLabel Encoding을 많이 사용하지만 성능을 높이기 위해 다양한 방법 사용가능!
  • 순서형 데이터
  • 순환형 데이터 => 순서는 있지만 해당 값이 순환되는 경우 ex. 월, 요일, 각도
  • 삼각함수 등 값의 크기에 따라 순화되는 값 사용할 수도 있음 => Technique
  • 수치형 데이터
  • 이산형 데이터 (인구수, 제품수, 횟수 등) / 연속형 데이터(키, 몸무게, 온도 등)
  • 구간형 데이터(온도, 시간)/ 비율형 데이터(인구수, 횟수, 밀도)
  • 대푯값 => 잘못된 정보 제공 가능
  • 단순히 대푯값만 보는것이 아니라 데이터의 분포, 밀도 차 이런것을 비교, 구성을 잘 봐야함 => 시각화!
  • 데이터의 형태 => 인사이트 도출 왜도, 첨도, 형태 등 분석
  • 데이터의 범위 => 알고리즘 정확도, 수렴속도에 영향
  • 정규화와 표준화
  • 정규화 => 범위 [0,1] 또는 [-1,1]과 같은 특정 범위로 변환
  • 표준화 => 데이터 평균 0, 표준편차 1로 만들어 데이터를 표준 정규본포 형태로 변환
  • 정규화 방법 => 최솟값 0 최댓값 1로 치환해야함, 모든 값에 최솟값 빼주고 각 값에 최댓값으로 나눠준다
  • 표준화 방법 => 각 값에 평균을 빼주어 전체 평균 0으로 만들고 이 결과를 표준편차로 나눔 => 표준편차 1로 만듬
  • 대칭성을 위해 => ex. 왼쪽에 치우쳐 있을 때, 작은 값 구간을 큰값보다 더 크게 만들거나 반대로 만들기
  • Negative Skewness
  • 큰 값 더 차이나게 => 제곱 변환 or 거듭 제곱, 지수 함수 => 표준화 등을 통한 전처리 후 연산 필요(부호 영향 받을 수 있음)
  • Positive Skewness
  • 로그, 제곱근 => 각각 (1) 0이상 실수 (2) 양수 라는 조건이 있으므로 전처리 필요
  • Box-Cox Transformation 범용적 로그 변환 방법 => 값에 따라 변환 형태 다름
  • 수치형 같은 경우 도메인지식 바탕으로 함, skewness 체크하고 바꿔서 모델에 주입하기 좋은 형태로 만드는 것
  • 중요한 것 => 어떻게 시각화가 됐고 바꼈을 때 어떻게 검증할지!

강의 4

  • 결측치

  • 결측치 => 데이터셋에 누락된 값

  • 대다수 모델에는 공백으로 넣을 수 없음(0으로 치환 시 값의 범주가 -10에서 10과 같이 0을 포함하는 범주면 큰 문제)
  • 데이터 행 제외 => 데이터 편향 더욱 강화, 열 제외 => 결측치 포함 열이 매우 중요할 수 있음
  • 결측치가 얼마나 있나 양이 중요
  • Missingno => 결측치 체크하는 시각화 라이브러리 pip install missingno
  • 결측치간의 관계도 중요하기 때문에 시각화를 통해 확인
  • 결측치가 과반수 => 유무만 사용, 결측치 데이터포함 열 제외 등

  • 결측치가 유의미하게 많은 경우(5퍼 - 10퍼 정도) => 결측치 정보가 유의미한 정보인지 우선 파악, 대푯값 전략
  • 결측치 매우 적은 경우 => 결측치 포함 행 미포함 or 대푯값 전략
  • 결측치 채우기 위한 방법론

  • 규칙 기반 => 도메인 지식이나 논리적 추론, 지나치게 복잡하거나 단순한 경우 편향 반영 가능
  • 집단 대푯값 => 집단 설계가 중요하고 이상치에 민감
  • 모델 기반 => 결측치에 대해 예측, 복잡한 패턴 예측 가능 (대회에서 자주 사용), 표본집단에 따라 과적합 이슈 발생가능
  • 이상치
  • 관측된 데이터 범위에서 과하게 벗어난 값
  • 대표적으로 사분위수/ 표준편차, 방법론을 통해 정함
  • 분포의 형태에 따라 선택 => IQR(3분위수와 1분위수의 차이), 표준편차 EX. 1분위수 - 1.5 * IQR 이상
  • IQR 앞에 곱하는 수를 작게할수록 이상치를 더 많이 보는 것
  • seaborn.boxplot 을 통해 이상치 시각화 가능
  • DBSCAN => 밀도 기반 클러스터링 방법 => 포인트의 개수/ 경계/ 노이즈 등 설정해서 집단 자동 설정, 자동 이상치
  • Isolated Forest => 루트 노드와 거리를 통해 이상치 탐지

  • 클러스터링과 차원축소

  • 피처 엔지니어링 => 보다 나은 특성을 통해 좋은 모델 만들고, 해석 용이하게 만드는 과정
    • 특성 추출 => 특성 간 결합을 통해 새롭게 특성 만들어냄
    • 특성 선택 => 중요 특성 선택
  • 위 두가지 모두 도메인 지식이 더 중요할 수 있음
  • 특성 추출 및 생성 => 다양한 결합 방법 사용 가능
  • 사칙 연산 통해 값 연산, 범주와 범주, 범주와 수치 간의 연결 통해 새로운 범주 만들고 Label Encoding
  • 클러스터링
  • 유사한 성격을 가진 데이터를 그룹으로 분류하는 것
  • K-Mean, Hierarchical Clustering, DBSCAN, GMM
  • 거리 정의 방식, 클러스터 결과 기록과 해석 => 클러스터 별로 예외치에 대한 해석, 그룹에 대한 해석이 달라질 수 있음
  • 시각화를 통해서 집단 잘 나뉘어졌는지, 대략적으로 어떤의미를 가지는지 파악하고 사용하기!

  • 차원축소
  • 데이터 특성 N개를 M개로 줄이는 방법
  • 데이터의 복잡성 감소, 시각화 => 패턴 발견에 용이, 모델 성능 향상
  • 가까운 데이터는 최대한 가깝게, 먼 데이터는 최대한 멀게 => 정보 최대한 보유, 왜곡 최소화
  • PCA, t-SNE, UMAP, LDA, Isomap, Autoencoder
  • 차원 축소와 산점도를 통해 다양한 인사이트 추출가능 => 왜곡 되어있다는 것을 염두에 두고 정답이 될수없다는 사실 인지하기

실습 4-1

  • 시간 효율적 EDA => seaborn, pygwalker 등 사용하는 것이 적합
  • sns => 순서같은 경우 order를 통해 전달
  • hue => 색을 의미, palette => 색상, hue_order를 통해 색상 order 지정
  • Box Plot => IQR에 대해 알아야함

  • Violin plot => 시각적으로 오해 줄 수 있음 => bw_method, cut, inner 활용
  • histplot , kdeplot => 중요 , ecdfplot => 0.5지점에서 50%를 알수있는 장점, rugplot
  • histplot => stack layer fill등 이용해서 다양하게 표현 가능
  • kdeplot => fill =True를 하고 보는것이 일반적, 여러개 차트를 동시에 띄워도 각 분포에 대해서 인지하기 좋음
  • rugplot => 밀도 확인
  • 2차원 histplot으로 표현가능
  • scatterplot => hue정도로 비교하면 좋음
  • regplot => 회귀선 표현
  • 상관관계 방법론 => pearson: 연속형 변수 % 연속형에 사용, Spearman, kendall => 순서형에도 사용가능

  • 상관관계 => sns.heatmap 통해 비교 => 색 범위 맞추기 위해 vmin, vmax 조정
  • mask 통해서 대칭값 제거도 가능

실습 4-2

  • jointplot
  • jointplot => 한번에 다양한 정보를 빠르게 볼 수 있는 장점
  • hue를 통해 구분 => 인사이트 얻기 조금 더 좋음
  • 다양한 종류로 분포 확인 가능 ex. kind = 'reg' 'scatter' 등등
  • pairplot
  • pair-wise 관계 시각화 => sns.pairplot()

  • hue를 통해 구분했을 때 좀더 보기좋음
  • 일일이 그릴 필요없이 한번에 확인하는 장점
  • kind를 통해 시각화 방법 조정 가능 ex. hist, kde
  • corner = True 대칭 부분 제거해서 보여줌
  • Facet Grid
  • feature와 feature 뿐만 아니라 feature's category-feature's category 의 관계도 살펴볼 수 있음
  • catplot ,displot, relplot, implot 등 다양한 함수 있음
  • catplot => kind 조정해서 다양하게 표현 가능
  • col, row 설정해서 복잡한 정보도 보기좋게 표현가능한 장점!
  • 클래스 내에서 구분된 상관관계에 대해서도 분석할 수 있음 => x, y 지정해놓고 col,row도 지정하는 방식
  • displot => 그룹 간 비교할 때 용이 => kind ='kde'로 변경해 분포 확인 조금 더 용이하게
  • relplot => scatterplotdefault
  • implot => 회귀
  • jointplot => 2개 차원의 관계에서 각각의 분포를 자세히 보는것
  • pairplot => 여러개의 pair를 한번에 보는것
  • cat, rel, displot => 여러개의 클래스들간의 관계를 분석하기 용이함

실습 4-3

  • 빠르게 데이터 전처리 format 맞추고 baseline에 적용하는 것도 연습하면 좋음
  • 차원축소에 앞서서 kmeans의 결과를 같이보는 것도 도움이 됨
  • 다양한 차원축소 방법론
  • PCA => 선형변환 기반, 데이터 비선형 구조 적절히 포착 못할 수 있음, 현실데이터에 큰정보 제공X, 이상치에 민감
  • TSNE => 각각의 그룹들이 잘모임, PCA보다 시간은 오래걸리지만 N차원에 대한 정보를 많이 보존하고 있음
  • UMPA => TSNE보다 빠름

업데이트:

댓글남기기