복습용 기술공부

23.03.03 공부 복습

01241 2023. 3. 3. 16:55

문제 해결 프로세스 및 체크리스트

머신러닝 문제 해결 프로세스
문제 이해 -> 데이터 수집 -> 탐색적 데이터 분석 -> 베이스라인 모델 -> 성능 개선

문제 이해 : 배경 목적 유형 .../ 왜??? 어디까지??? 유형은??(예측, or  분류, or 군집 ...) **
+ 평가 지표 파악
~> 유형 파악, 평가 지표 파악 으로 어떤 모델을 쓸지 미리 정함


탐색적 데이터 분석 : 데이터 구조 탐색, 데이터 시각화 (중요 피쳐 파악)

베이스 라인 모델 : 모델 훈련 및 성능 검증, 결과 예측 및 제출 (가능성 파악)

성능 개선 : 피처 엔지니어링, 성능 검정, 결과 예측 및 제출

분석
데이터 종류 : 수치형, 범주형
수치형 : 연속형(딱x) or 이산형(딱)
범주형 : 순서형(순위) or 명목형(순서x)

데이터 시각화
수치형 : 히스토그램(histplot), 커널밀도(kdeplot), displot, regplot ...
범주형 : 박스(boxplot), 막대(barplot), 바이올렛(violetplot), 파이 ...
데이터 관계 : 히트맵, 산점도, 라인플롯 ...

※ 작업 단계별로 현황을 그려서 남겨 놓는 게 중요함 /전처리 결과 보고서 중요!!!
수치형:
히스토그램 :  bins로 합칠 수 있음
커널밀도 : 유연한 선 그래프라고 생각하기
displot : 분포 모양 히스토 그램 빈도 등 파악할 때 그래프 같이 보여줌

범주형 :
박스 :describe 확인, IQR 식 중요
바이올릿 : boxplot 단점 보완 위해 만든 것

데이터 관계 
heatmap : 데이터 관계 파악이 쉬움
lineplot : 선형 인지 아닌지 체크할 때 특히 사용
scatterplot : 선점도 (얼마나 퍼져있는지 확인 할 때) : 얘가 애매하면
regplot : 얘로 얼마나 상관관계가 있는지 파악하기

평가지표 : 회귀(예측), 분류, 우리가 어떤 알고리즘을 쓰는지에 따라 정해져 있음
회귀 평가지표 : 예측에서 쓰이는 평가 지표
분류 평가지표 : 오차 행렬(F1 score, 제현율, 정확도), 로그손실, ROC , AUC

데이터 인코딩 : 레이블 인코딩(0,1,2...), 원-핫 인코딩(0,1->칸을 더 만듬)

피쳐 스케일링 : min-max 정규화, 표준화(standard) -> 이상치가 많으면 왜곡생김, 로지스틱
min-max : 0:min, 1:max
표준화 : 0:평균, 1:분산


교차 검증 : 적은 데이터를 가지고, 잘 학습이 되게 하는 방법(조금 검증하고 조금 학습하고 섞어가면서 ..). K폴드, 충화 K폴드
K폴드 - 쪼개서 학습 시키는 것

주요 머신러닝 모델 : 선형 회귀, 로지스틱, 결정트리, 앙상블, 랜덤포레스트, XGBoost, LightGBM
-> 주요 파라미터는 계속 바꿔가면서 돌려봐야함

하이퍼파라미터 최적화 : 그리드 서치(알아서 학습을 찾아가는? 파라미터 찾는?), 랜덤서치, 베이지만 최적화

분류 : 어떤 대상을 정해진 범주에 구분해 넣는 작업
-이진 분류 : 타깃값이 두 개인 분류
-다중 분류 : 타깃값이 세 개 이상인 분류

회귀 :
-독립변수 : 영향을 미치는 변수
-종속변수 : 영향을 받는 변수
-회귀 : 독립변수, 종속변수 간 관계를 모델링
-단순선형회귀 : 독립변수 하나(x)와 종속변수 하나(y) 사이의 관계
-다중산형회귀(multiple linear regression) : 독립변수 여러 개, 종속 변수 하나 사이의 관계 (이것도 결국 한줄로 해야함)

회귀 평가지표, (MSE, RMSLE, MAE, MSLE, RMSE + R^2 ...) : 오차가 얼만큼 나는지 파악하기 위한 것!!
평균 절대오차(MAE), 제곱오차(MSE), 제곱근오차(RMSE), 로그오차(RMSLE), 로그 제곱근 오차,.... 
R^2(결정계수)(설명력, 1에 가까울 수록 좋음 _ 어느 정도 성능이 좋은지)
R^2와 오차 두 개 지표를 놓고 비교해서 사용

로그오차
RMSLE : 아웃라이어에 강건(Robust)함, 예측값과 실제값이 툭 튀어나갈 때, RMSE도 마찬가지로 확 뛰게됨, RMSE는 굉장히 증가했지만, 증가는 미미함
ex) 예측값 40 50 60 70, 실제값 41, 52, 61, 500 일 때, RMSE는 엄청 튀는데, RMSLE는 적게 튐 _n의 갯수가 적을 때 보통 이럼
-상대적 Error를 측정해줌. 오차가 절대적 크기가 변해도 상대적 크기의 오차를 가늠이 가능
ex) 예측값 100, 실제값 90 -> RMSLE = 0.1053, RMSE = 10
ex) 예측값 10000, 실제값 9000 -> RMSLE = 0.1053, RMSE = 1000 
-Under Estimation에 큰 패널티 부여 : 예측값이 실제값보다 작을 때 더 큰 패널티 부여
ex) 예측값 600, 실제값 1000 -> RMSE = 400, RMSLE = 0.51
ex) 예측값 1400, 실제값 1000 -> RMSE = 400, RMSLE = 0.33
-> 배달음식이 30분 걸린다 했는데 20분 걸리면 큰 문제 x, 40분 걸리면 고객이 화냄

회귀  / 선형관계가 있는지가 기본 전제 (하나의 성분)
상관계수 : 두 변수 사이의 상관관계 정도를 수치로 나타낸 값
피어슨 상관계수 : 강도(strength)와 방향(direction) -1~1 사의 값을 가짐.

다중공성성 : 독립변수관의 관계에 서로 상관관계가 높아서 데이터 분석시 부정적인 영향을 미치는 현상
-x 변수를 자꾸 늘리면 R^2가 커짐, (좋아지는 게 아님!), adjust R^2 로 봐야 계산이 제대로 나옴

분류 평가 지표, 오차행렬
오차행렬(confusion matrix) : 실제 타깃값과 예측 타깃값이 어떻게 매칭되는지 보여주는 표
- 정확도 : 실젯 값과 예측 값이 얼마나 일치되는지 비율로 나타낸 평가지표
- 정밀도 : 양성 예측의 정확도 (ex, 불량인 것만 찾을 때)** 실제 모델링 할 때 아주 중요함!
- 재현율 : 실제 양성값 중 양성으로 잘 예측한 값의 비율 (ex 불량인 것들을 찾을 때) ** 실제 모델링 할 때 아주 중요함!
- F1 점수(F1 score) : 정밀도와 재현율을 조합한 평가지표 *
(가능하면 정밀도, 재현율로 해주면 좋음 _> 업무을 알아야함)

로그손실, logloss , 타깃값을 확률로 예측 할 때
ROC 곡선과 AUC, 참 양성 비율(TPR)에 대한 거짓 양성 비율(FPR) 곡선,  *
AUC : ROC 곡선 아래 면적(ROC 곡선을 수치화 시킨 것)
(ROC 곡선이 어떤지, 그래서 AUC 수치는 몇인지)

데이터 인코딩, - 레이블 인코딩, 원 핫 인코딩
-레이블 인코딩 : 범주형 데이터를 숫자로 1:1 매핑
-원 핫 인코딩 : 여러 값 중 하나만 활성화, 희석 백터 만들어서 1 0 으로 표현 // 선형 벡터일 때 얘가 안전함, 대신 사용하면 메모리를 좀 많이 먹음

피처 스케이링, 서로 다른 피처 값의 범위가 일치하도록 조정하는 작업 / 사용하는게 좋음
-min-max 정규화 , 최소 0 최대 1
-표준화 , 평균 0 분산 1
-RobustSacler : 중앙값과 IQR 사용, 아웃라이어 영향 적게 받음, 조금 더 넓게 퍼지게해줌(분포) // 데이터가 좁을 때 사용하면 좋음

교차 검증
K 폴드 교차 검증 : 전체 그룹 K 개 그룹으로 나누고, 나머지는 K-1개로 훈련(학습)데이터 지정(분산 다르게) 1개의 검증 데이터 지정
-> 돌아가면서 검증데이터와 훈련데이터를 골구로 섞어가면서 학습
-> 훈련데이터 모델을 훈련 후 평가 점수 기록 -> 다양한 분포에서 K개 검증 평가 점수의 평균을 구함
충화 K 폴드 교차 검증 : K 폴드 교차 검증에 노이즈를 끼게 해서 좀 더 다양하게 해줌