본문 바로가기
멋쟁이사자처럼 AIS7/오늘코드

[1115] Feature Engineering(3) - Benz

by YeonGun M 2022. 11. 15.

0702 실습

Q. 결측치 대체는 어떻게 해야 할까?
A. 결측치가 많다고 삭제하는게 무조건 나은 방법이 아닐 수도 있다. 이상치, 특잇값을 찾는다면 오히려 특정 값이 신호가 되는 경우가 있다. 범주형 데이터의 결측치 채우지 않고 인코딩해주면 나머지 없는 값은 0으로 채워지게 되나 그 대신 희소한 행렬이 생성된다. 반면, 수치형 데이터인데 결측치라면 잘못채웠을 때 오해할수 있으니 주의가 필요하다. 경험치를 많이 쌓는게 필요하다.

Q. 왜도와 첨도의 정확한 수치까지 알아야 할까?
A. 정확한 수치를 모르더라도 시각화를 해보면 알 수 있다. 그러나 featrue가 100개 이상이라면 많은 시간이 소요되어 비효율적이다. 또한, Anscombe's Quartet 데이터를 생각해 보면 요약된 기술 통계는 데이터를 자세히 설명하지 못하는 부분도 있다. 따라서 변수가 많을 때, 전체적으로 왜도와 첨도가 높은 값을 추출해서 전처리를 할 수 있다. pandas, numpy 등으로 기술통계를 구해보면 왜도, 첨도(기본 값 피셔의 정의 일 때) 0에 가까울 때 정규분포에 가까운 모습이다.
Untitled
Untitled

log 변환

정규분포를 만들어주기 위해 수치형 변수에 로그변환을 진행한다. 다만, 수치형 변수지만 범주형 변수인 것들은 제외한다.

예측값과 실제값 비교

Untitled

전처리 요약

수치형

  • 결측치 대체(Imputation)
    • 수치형 변수를 대체할 때는 원래의 값이 너무 왜곡되지 않는지도 주의가 필요합니다.
    • 중앙값(중간값), 평균값 등의 대표값으로 대체할 수도 있지만,
    • 당뇨병 실습에서 했던 회귀로 예측해서 채우는 방법도 있습니다.
    • 당뇨병 실습에서 했던 인슐린을 채울 때 당뇨병 여부에 따라 대표값을 구한 것 처럼
    • 여기에서도 다른 변수를 참고해서 채워볼 수도 있습니다.
  • 스케일링 - Standard, Min-Max, Robust
  • 변환 - log
  • 이상치(너무 크거나 작은 범위를 벗어나는 값) 제거 혹은 대체
  • 오류값(잘못된 값) 제거 혹은 대체
  • 이산화 - cut, qcut

범주형

  • 결측치 대체(Imputation)
  • 인코딩 - label, ordinal, one-hot-encoding
  • 범주 중에 빈도가 적은 값은 대체하기

JD

  1. SQL 용량이 너무 크다면 데이터 파일형태로 추출해서 파이썬으로 분석하는 형태로 진행하기도 합니다.

  2. JD에 이런 용어가 있다면 GCP, AWS, MS Azure 클라우드 제품군을 사용하는 회사라고 보면 됩니다.
    기본적인 SQL, Python 과 같은 취업을 위한 스킬에 필요한 것을 먼저 익히고 제품군은 실제로 취업해서 사용해 보면 더 잘 사용할 수 있습니다. 보통은 free-tier 라고 무료로 사용할 수 있는 쿠폰 등을 제공해 주기도 하지만 배우는데 비용이 들어가기도 합니다. 클라우드에 데이터가 DB 혹은 파일 형태로 적재되어 있습니다. ELK 와 같은 제품군을 사용하기도 하는데 ELK 는 엘라스틱서치 관련 제품군 명칭입니다. 데이터엔지니어직군에는 클라우드 제품군 이름이 들어가는 경우가 더 많습니다. 왜냐하면 클라우드에 실제로 적재하는 업무를 하기 때문이다

Q. ELT, ETL이 뭘까?
A.

0801 실습

  • Mercedes-Benz Greener Manufacturing
  • 해당 데이터로 실습 후 대부분의 제조 데이터에 적용 가능
  • 보안상 이슈 문제 등으로 익명화된 데이터가 제공되어 있음
  • anonymized set of variables: a variable could be 4WD, added air suspension, or a head-up display

Q. 제조 데이터가 뭘까?
A. 제조 데이터는 보통 생산 공정 센서 데이터(온도, 습도, 위치, 환경 등에 대한 데이터)를 주요 사용한다. 센서 데이터는 해당 센서 제품에 따라 로그를 기록할 때 DB에 기록

간단한 피처 엔지니어링

nunique 값이 단일한 피처들은 학습에 큰 도움이 되지 않을 수 있다. 실제로 기술통계를 보았을 때 결측치가 없이 모두 0으로 채워져 있으므로 해당 피처들은 삭제해도 무방하다.

train_nunique = train.nunique().sort_values()
train_one_idx = train_nunique[train_nunique==1].index
train[train_one_idx].describe()

Untitled

heatmap

기술통계를 구했을 때 수치데이터가 너무 많기 때문에 히트맵으로 시각화(정답인 y를 제외하고 어떤 값이 크고 작은지 확인)

sns.heatmap(train.select_dtypes(include="number").drop(columns="y"))

Untitled

원핫인코딩

  • 현실 세계에서는 train을 기준으로 학습이 진행되어야 한다
  • handle_unknown="ignore": test에 있으나 train에 없는 경우에는 train 없는 컬럼에 대해서 원핫인코딩을 진행하지 않고 무시
  • 변수가 많을 때는 OneHotEncoder 나 pd.get_dummies() 를 사용하는 것이 좋습니다
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(handle_unknown="ignore")
train_ohe = ohe.fit_transform(train.select_dtypes(exclude="number"))
test_ohe = ohe.transform(test.select_dtypes(exclude="number"))
print(train_ohe.shape, test_ohe.shape)
>>> (4209 195) (4209, 195)

선형 회귀

  • Linear Regression
  • 종속변수 y와 한개 이상의 독립 변수 x와의 선형 상관 관계를 모델링하는 회귀분석 기법
  • 주요 파라미터
  • 특징
    1. 다른 모델들에 비해 간단한 작동원리
    2. 학습 속도가 매우 빠름
    3. 조정해줄 파라미터가 적음
    4. 이상치에 영향을 크게 받음
    5. 데이터가 수치형 변수로만 이루어져 있을 경우, 데이터의 경향성이 뚜렷할 경우 사용 용이
  • 선형 회귀 모델의 단점을 보완한 모델: Rigde, Lasso, ElasticNet

댓글