본문 바로가기
AI/머신러닝

[AI 부트캠프] DAY 54 - 머신러닝 9

by HOHHOH 2023. 10. 6.

[오늘의 일지]

머신러닝 실시간 강의 - 데이터 분석 문제 정의 (Boosting 마무리), 데이터 수집 및 정제, 탐색적 데이터 분석, 피처 엔지니어링

[상세 내용]

데이터 분석 문제 정의

CatBoost (CAT)

  • kaggle 같은 실전 데이터 분석 대회에 서 가장 많이 사용하는 모델 
  • GBDT가 Categorical feature에 대해서 학습이 잘돼도록 설계되어 있습니다.
  • 오랜 연구로 default parameter 설계가 잘되어있어, parameter tuning이 쉽습니다.
  • GPU 사용 최적화가 잘 되어있습니다.

 

Hyper-parameter Tuning (feature 중에 50% 이상이 categorical 일 때)

Parameter Tuning (for performance) 

one_hot_max_size : NA or 255 

iterations : # of trees (50~50000)

learning_rate : 0.3~0.01

depth : max_depth (5~25)

l2_leaf_reg : 

border_count : 254(cpu) or 32(gpu) or 128 

grow_policy : 

max_leaves : 

min_data_in_leaf

 

Speeding up the training 

boosting_type : 

bootstrap_type : 

rsm : random subspace method(local randomization, 0.5~0.8)

border_count : 254(cpu) or 32(gpu) or 128 

using np.arrays instead or pd.DataFrame

 

GBM Comparison

  • cat_features 50% 이상 ≫ CatBoost
  • cat_features 50% 이하, N ≥ 30000 ≫ LightGBM
  • cat_features 50% 이하, N < 30000 ≫ XGBoost

출처:https://medium.com/octave-john-keells-group/xgboost-light-gbm-and-catboost-a-comparison-of-decision-tree-algorithms-and-applications-to-a-f1d2d376d89c

 

ML PJT Workflow 

 

데이터 수집 및 정제

Database

SQL (Structured Query Language)

  • SQL 데이터베이스는 표 형식의 데이터 모델을 사용하며, 데이터는 열과 행으로 구성됩니다. 이러한 데이터 모델을 관계형 데이터 모델이라고 합니다.
  • SQL 데이터베이스는 데이터 스키마를 사용하여 데이터 구조를 정의하고, 데이터의 일관성과 무결성을 보장합니다.
  • SQL 데이터베이스는 ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션 속성을 지원하여 데이터 일관성과 안정성을 보장합니다.
  • SQL 데이터베이스는 복잡한 쿼리 작성 및 복잡한 데이터 관계 처리에 용이하며, 다양한 연산자와 조건을 사용하여 데이터 검색과 조작이 가능합니다.
  • 주로 정형 데이터를 다루는 데 적합하며, 관계형 데이터베이스 시스템(RDBMS)에서 주로 사용됩니다. 예시로는 MySQL, PostgreSQL, Oracle, SQL Server 등이 있습니다.

NoSQL (Not Only SQL)

  • NoSQL은 다양한 데이터 모델을 제공하며, 정형, 반정형, 비구조화 데이터를 다룰 수 있습니다. 데이터 모델은 문서, 키-값, 열 지향, 그래프 등이 있습니다.
  • oSQL 데이터베이스는 스키마 유연성을 가지고 있어, 데이터 구조를 동적으로 변경하거나 다양한 형식의 데이터를 수용할 수 있습니다.
  • NoSQL 데이터베이스는 BASE(Basically Available, Soft state, Eventually consistent) 트랜잭션 속성을 가지며, 일관성보다는 가용성과 분할 내성을 강조합니다.
  • 일반적으로 NoSQL은 SQL에 비해 단순한 쿼리 언어를 사용하며, 데이터베이스 관리가 간편합니다.
  • NoSQL 데이터베이스는 주로 대량의 비정형 또는 반정형 데이터를 다루는 데 적합하며, 대규모 웹 애플리케이션 및 분산 시스템에서 주로 사용됩니다. 예시로는 MongoDB, Cassandra, Redis, Neo4j 등이 있습니다.

 

Database 저장 및 처리 방식

데이터 웨어하우스 (Data Warehouse)

  • 데이터 웨어하우스는 조직이 비즈니스 인텔리전스(Business Intelligence) 및 의사 결정 지원을 위해 데이터를 수집, 저장, 통합 및 관리하는 중심화된 데이터 저장소입니다.
  • 데이터 웨어하우스는 주로 정형 데이터(Structured Data)를 저장하며, ETL(추출, 변환, 적재) 프로세스를 통해 데이터를 정제하고 보고용 데이터베이스에 저장합니다.
  • 데이터는 주로 시간에 따른 데이터 스냅샷을 가지며, 업무 용도에 따라 주제별로 구성된다.

데이터 레이크 (Data Lake)

  • 데이터 레이크는 다양한 종류와 형식의 데이터를 대규모로 저장하는 저장소입니다. 구조화된 데이터뿐만 아니라 비구조화 데이터나 반정형 데이터도 포함할 수 있습니다.
  • 데이터 레이크는 데이터를 빠르게 저장하고 나중에 필요한 형태로 가공 및 분석할 수 있는 유연성을 제공합니다.
  • 주로 Hadoop 및 클라우드 플랫폼에서 사용되며, Big Data 처리 및 머신 러닝 모델을 위한 데이터를 제공합니다.

데이터 마트 (Data Mart)

  • 데이터 마트는 데이터 웨어하우스와 유사하지만, 일반적으로 더 작고 특정 비즈니스 부문 또는 기능을 위해 설계된 부분적인 데이터 저장소입니다.
  • 주로 특정 부서나 팀의 요구 사항에 맞게 데이터를 구성하며, 데이터 웨어하우스로부터 데이터를 추출하여 정제 및 저장합니다.
  • 데이터 마트는 특정 비즈니스 목적을 위해 최적화된 데이터를 제공하기 위해 사용됩니다.

출처:https://panoply.io/data-warehouse-guide/data-mart-vs-data-warehouse/

 

ML PJT Workflow 

 

탐색적 데이터 분석

정의

- Exploratory Data Analysis = Get familiar with data

- 탐색적 데이터 분석(EDA)은 데이터에 여러 특징들을 파악하여 분석에 필요한 여러 통계량들을 확인하는 절차입니다.

- EDA를 수행할 때는 일반적으로 확인하는 정보도 있고, 분석 목적에 맞게 확인하는 정보도 있습니다.

 

EDA를 수행할 때 고려사항

  • 데이터의 크기 확인 - row, column, memory size 
  • column별 정보 확인 - pd.DataFrame.info() 
  • 결측치 확인 - 어떤 column에 얼마나 결측치가 있는지 
  • Categorical feature 확인 - dtype == 'object'

 

결측치

  • 결측치는 0이랑 다릅니다. (컴퓨터에서는 "Null" or "NaN"로 표시가 됩니다.) 
  • 데이터가 아예 없는 경우에는 분석 자체가 진행될 수 없습니다.
  • 지우거나, 채우거나 어떻게든 숫자를 채워줘야 합니다.
  • 어떻게 처리하느냐에 따라, 얼마나 처리하느냐에 따라 분석 결과가 차이가 납니다.

 

결측치 처리 방법

Drop missing values

  • Delete all rows 
  • Delete certain columns

 

Filling missing values

  • Filling mean values of each column 
  • Filling ground values of each column (ground value : 0, -1000,...) 
  • Filling near values of each missing cells (interpolation methods) 
  • mode, median, quantile,...

 

KNN Imputation

  • KNN Imputation은 데이터셋에서 누락된 값을 다른 데이터 포인트 주변의 가장 가까운 이웃들의 값을 사용하여 대체하는 기술입니다.
  • 이 방법은 주로 데이터의 유사성과 근접성에 기반하여 작동합니다. 즉, 비슷한 패턴을 가진 이웃 데이터 포인트들의 값을 참조하여 누락값을 추정합니다.
  • KNN Regression을 수행한 것과 같다.

 

 

피처 엔지니어링

- Feature Engineering = Fitting data for use

- 피처 엔지니어링은 데이터를 분석하고자 하는 목적에 맞게 가공하는 과정입니다.

- 분석가는 데이터에서 분석에 필요한 피처를 추출하여 모델링에 사용합니다.

- 어떤 피처를 추출하느냐는 모델링을 통한 피드백(evaluation metric)과 분석가의 직관(domain knowledge)에 의해 이루어집니다.

- 피처를 잘못 선택했을 때 발생하는 문제점들에 대해 인지합니다.

 

차원의 저주

  • feature space의 차원이 커질수록 머신러닝 모델의 예측 성능이 저하되는 문제 
  • 유의미한 패턴을 찾기가 힘들어서 overfitting 될 가능성이 높아집니다.
  • 거리값들의 차이가 무의미해집니다.(space sparsity) 
  • 차원 감소 기법(dimensionality reduction)을 이용하여 저차원 공간으로 변환해서 극복할 수 있습니다.
  • PCA(Principal Component Analysis), AutoEncoder 등을 많이 사용합니다.

 

상관관계 분석

  • input feature(X) 사이의 상관관계를 통해 비슷한 정보를 주는 피처를 확인할 수 있습니다.
  • X와 target value(y) 사이의 상관관계를 통해 어떤 feature들이 y에 직접적인 영향을 주는지 확인할 수 있습니다.
  • Correlation Matrix를 계산하여 확인합니다.
  • Heatmap을 이용하여 쉽게 시각화 가능합니다.

 

Feature Scaling

  • 서로 다른 feature들이 값을 가지는 범위가 달라서 모델링에서 문제가 발생할 수 있음 
  • feature끼리 비교 가능하려면, 동일한 범위 내에 존재해야 함 
  • Scaling을 통해서 피처들의 크기를 맞춤 
  • 피처의 스케일과 무관한 모델들도 있음 e.g. LightGBM

 

Min-Max Scaling

Standard Scaling

Robust Scaling

 

 

Encoding Categorical Features

Ordinal Encoding 

  • Ordinal Encoding은 범주형 변수의 각 범주를 정수로 매핑하여 순서나 등급을 나타내는 방법입니다.
  • 주로 범주 간에 상대적인 순서가 있는 경우에 사용됩니다. 예를 들어, 학력 수준(고졸, 학사, 석사)이나 제품 등급(초급, 중급, 고급)과 같이 범주 간에 순서가 있을 때 적용됩니다.
  • Ordinal Encoding을 사용하면 범주형 변수의 값이 정수로 변환되어 상대적인 순서 정보가 유지됩니다.
  • 예시 : 학력 수준: 고졸(1), 학사(2), 석사(3)

One-Hot Encoding

  • One-Hot Encoding은 범주형 변수를 이진 특성의 형태로 변환하는 방법입니다.
  • 각 범주는 새로운 이진 특성(더미 변수)으로 변환되며, 해당 범주에 해당하는 열은 1로 표시하고 다른 열은 0으로 표시합니다.
  • 주로 범주 간에 순서가 없거나 순서가 중요하지 않을 때 사용됩니다. 또한 범주 간의 관계를 독립적으로 처리하는 것이 목적입니다.
  • 예시 : 제품 등급: 초급(1, 0, 0), 중급(0, 1, 0), 고급(0, 0, 1)

 

Feature Selection with Feature Importance

- top K feature selection

- threshold (hyper-param)

 

Raw data into Feature Vector

- 원시 데이터(raw data)를 특징 벡터(feature vector)로 변환하는 과정

 

[마무리]

 오늘도 어제에 이어서 머신러닝 관련 프로젝트를 할 때 중요한 부분들을 파트별로 workflow의 순서대로 정리를 하는 수업이 진행되었습니다. 사실 오늘은 머신러닝과 관련된 중요 라이브러리에 대한 수업은 거의 없었고 그 이후에 진행되는 부분에 대해서 배웠는데 이 부분도 아직까지는 생소한 게 많아서 직접 프로젝트를 통해서 해결해야 될 부분이 많다고 느꼈습니다. 어찌 되었든 다음 주에 프로젝트가 진행되기 때문에 그때까지 개념적인 부분 복습을 철저하게 해야겠습니다.

반응형

댓글