KT 에이블스쿨 : 머신러닝 (지도학습) 5일치 총 정리

     





    머신러닝 - 지도학습  

    24.03.27 (목)  ~ 24.04.02 (화) 


    1일차 - 머신러닝 개념

    • 데이터 전처리

      • 결측치, 이상치, 제거, 가변수화 등 
      • 머신러닝 모델링하는 것보다 전처리가 가장 시간이 많이걸리고 성능을 좌우할만큼 중요하단걸 느낌

    • 학습방법에 따른 분류 : 지도, 비지도, 강화

      • 지도 : 분류, 회귀
      • 비지도 : 군집화, 연관, 변환

    • 과제에 따른 분류 : 분류, 회귀, 클러스터링

    • 모델 선택하는 방법 

      • 딥러닝 : 어떤 미래의 값을 정확하게 예측해야할때 = 성능이 중요할때
        • 딥러닝은 성능이 좋지만 어떻게 한건지 사람은 알수가 없어서 설명은 못함
      • 머신러닝 : 비즈니스 관점으로 어떤 요소가 중요한지 설명해야할때
        • 가격이 중요한지, 경쟁사 가격이 중요한지처럼 중요한 요소가 무엇인지를 알고 설명을 위해서는 성능은 떨어지지만 설명은 가능한 기본 알고리즘을 씀


    • 지도학습을 선택했다면, 회귀 / 분류 선택해야함 
      • 수치형 변수라고 다 회귀는 아님. 연속성이 있는지를 확인하는게 중요함

      • 두 값 사이에 중간값의미가 있는 숫자인지 
      • 두 값에 대한 연산결과가 의미가 있는 숫자인지 



    • 용어 정리

      • 모델 : 데이터로 부터 패턴을 찾아 수학식으로 정리해 놓은 것
      • 모델링 :  적절한 학습을 통해 오차가 적은 최적의 모델을 만드는 과정
      • 모델의 목적 
        • 샘플(과거데이터, 표본, 부분집합)을 가지고
          전체
          (모집단, 현재와 미래데이터)를
          추정(예측/추론)하는것
      • 과대적합 (과적합) : 모델의 복잡도가 높아지는것
        • 학습 데이터에 대해서만 잘 맞는 모델 → 실전에서 예측 성능이 좋지 않음
      • 과소적합 : 모델의 복잡도가 너무 낮아서, 단순함. 학습데이터에 대한 훈련이 안된것 


    Q) train_test_split 함수를 써서, 데이터를 나눌때 stratify = y 는 무엇 ? 

    A) 범주형 종속변수가 클래스 불균형일때, 균형있게 데이터를 쪼개는 것 

    분류문제에서 타겟값이 학습, 평가데이터 비율을 비등비등하게 하기 위해서 쓰는것

    연속형 종속변수일때 평가데이터랑 학습데이터랑 비율을 동일하게 할수없는데 stratify=y를 주면 오류가남 

    범주값일때는 y를 주면되는데, 연속값일때는 하나밖에 있는걸 동일하게 줄 수가 없어서임

    연속형일때는 stratify를 쓸 이유가 없음 




    2일차 - 평가지표

    • 회귀 모델 평가

      • from sklearn.metrics import mean_squared_error, r2_score
      • 정확할 수가 없다. 잔차(오차)가 존재할거라 예상함
      • 예측값이 실제값에 가까울 수록 좋은 모델임
      • 예측한 값과 실제 값의 차이(=오차)로 모델 성능을 평가


    • 회귀 평가지표

      • SSE (sum squared error) - 오차 제곱의 합
      • MSE (mean squared error) - 오차 제곱의 평균, sse을 n으로 나눈거
      • RMSE (root mse) - mse는 오차의 제곱이므로 루트로 제곱을 품
      • MAE (mean absolute error ) - 오차의 절대값의 평균
      • MAPE (mean absolute percentage error) - mae의 퍼센트 비율

      • SST = SSR + SSE : 전체 오차 
        • SST : (y - y평균)^ 의 합
          • SSR : (y예측 - y평균)^ 의 합
          • SSE : (y예측 - y)^ 의 합
      • 결정계수 - R^ (R-squared) - R2 스코어 
        • 전체 오차 중에서 회귀식이 잡아낸 오차 비율
        • 평균과 비교해서 오차를 얼마나 커버했는지 = 평균보다 나의 모델이 얼마나 좋은지
        • 설명력이라고도 함. R^가 클수록 좋음. 설명력이 좋다. 
     

    • 분류 모델 평가 

      • from sklearn.metrics import confusion_matrix, classification_report
      • 분류 모델의 결과값은 이진수임. Yes인지 No 인지~이 인지 아닌지, 2종류임
      • 그래서 0을 0으로 예측했는지, 0을 1로 예측했는지 정확도를 체크가능
      • 정확도 = 예측값이 실제값과 많이 같을 수록 좋은 모델
      • 정확히 예측한 비율로 모델 성능을 평가
        

    • 평가 - 혼동행렬

      • 정확도 (Accuracy) : 1과 0을 정확히 예측한 비율 
      • 정밀도 (Precision) : 1이라 예측한 것 중에서 정말 1인 비율 (예측관점)
      • 재현율 (Recall) : 실제 1인것을 1이라고 예측한 비율 (실제관점)
      • 특이도 (Specificity) : 실제 Negative(TN + FP) 중에서 Negative로 예측한(TN) 비율
      • F1 score : precision, recall 의 조화평균인데, 정밀도, 재현율의 값이 차이가 많이날때 보는 값



    • 비즈니스 관점에서 혼동행렬 해석

      • 공장에서 센서가 고장나는걸 예측하는 경우
        • TP (50) : 고장나는 센서를 예측대로 알아내서, 고장이 나면 트랙 1개당 1억의 손실이라면, 50억의 손실을 막음
        • FP (8) : 고장나는 센서를 예측했지만, 고장 안나는게 8개. 말짱한 센서를 고장날 거라고 예측한것. 잘못예측했지만, 1개 당 10만원 센서를 미리 바꿔서 1억 손실을 예방함
        • FN (16) : 고장이 안난다고 했지만, 실제로 고장이 나는 경우. 트랙 16개로 16억의 손실이 날것임
      • 80만원, 16억의 손해는 봤지만, 50억의 손실을 막았다
      • 비즈니스 이익 = 50 - 16 - 80만원

    혼동행렬 시각화






    3일차 - 모델

      • 회귀

        • 회귀모델은 상관관계가 중요함 
          • 회귀계수(가중치) model.coef_
          • 편향 model.intercept_
          • 산점도 scatter
          • 회귀선 (학습데이터에 대한 최선의 직선)


      • 다중 회귀

        • 다중회귀의 회귀계수 
          • 회귀계수가 여럿이므로 독립변수 이름과 같이 확인하기를 권고 
          • 다중회귀에서는 회귀선을 그리기 어려움. 
          • x가 많아서, 변수별 회귀계수 df으로 만들어서 시각화
        • 회귀계수(변수 중요도)가 강하다고 해서, 변수의 중요도가 높다는게 아님. 
          • linear 회귀에서는 해당 변수가 가중치가 크다는것이고, 다른 모델에서는 다르게 나타날수도 있음 

        • 비즈니스 상황에 따라서 다르게 해석할 필요도 있음.
          • ex) 카페 매출증대와 관련해서, “기온” 중요도가 10, “전단지” 중요도가 2일때, 젤 중요도가 높은 기온은 우리가 어떻게 못함.  
          • ⇒ 기온보다 전단지를 더 중요하게 생각해야함. 
          • 비즈니스 이해가 동반되어야함 
        • 선형회귀는 변수가 많을수록 모델이 복잡해짐 = 과대적합이 발생할 확률이 커짐

        • 회귀모델의 대표적 평가지표 : mean_squared_error, r2_score



      • KNN (k 최근접 이웃)

        • 회귀, 분류 가능
        • 거리가 중요하므로 스케일링 필요
          • 평가데이터 스케일링할때, 학습데이터를 기준으로 스케일링(정규화) 해야함
        • K의 값 
          • k는 홀수로 설정 (짝수일때 50:50 나올수도 있으니까)
          • k의 값이 클수록 모델이 단순해짐 
            • 회귀일땐 평균
            • 분류모델일땐 최빈값 대로 결정됨 (가장 단순한 방법)
        • k의 값이 작을수록 모델이 복잡해져서 과적합이 될수도 있음


      • Decision Tree  

        • 회귀, 분류 가능
        • 과적합으로 모델 성능이 떨어지기 쉬움 : 가지치기 튜닝 필요
        • 의사결정트리가 반환하는 예측값
          • 분류모델인 경우, 마지막 노드에 있는 샘플들의 최빈값을 예측값으로 반환
          • 회귀모델인 경우, 마지막 노드에 있는 샘플들의 평균을 예측값으로 반환
        • 불순도를 수치화하는 지표 : 엔트로피, 지니 불순도 
        • 변수 중요도 해석 
          • “A 변수가 해당 데이터셋에서 가장 중요하다” 는게 아니라,
            “의사결정트리의 관점으로 보았을때, A 변수가 불순도를 가장 많이 줄여주었다. “ 를 의미함.
          • randomforest나 다른 모델을 썼을때, 다른 변수가 중요하다고 뜰수도 있음 .
          • 모델마다 다를수도있음. 같다면 정말로 중요한 변수일 수도
        • 트리의 깊이를 조절하는게 max_depth 라는 하이퍼파라미터가 있음 . 
          • max_depth가 커지면, 모델이 복잡해짐





      4일차 - 모델

      • Logistic Regression 알고리즘

        • 우리의 목적은 분류이나, 회귀처럼 0~1사이의 값으로 풀때 사용
        • 시그노이드 함수로 0~1 범위의 확률값을 가짐 


      • K-분할 교차 검증 

        • 모든 데이터가 검증데이터로 한번, 학습에 k-1번 사용되는 것.
          돌아가면서 검증데이터가 되는것
        • 분할개수(cv) 가 많을수록 시간 소요가 큼 
        • K-분할은 x_train, y_train 데이터만을 대상으로 해야함
          • 평가데이터는 그대로 두고, 학습데이터, 검증데이터를 k분활해 검증하는 것

        • 모델의 성능을 미리 예측하기 위해서, k-fold로 학습데이터의 일부를 검증데이터로 때서 성능을 예측하는 것
          • cross_val_score는 학습데이터 전체를 학습하는게 아니기때문에, model.fit()으로 정식 학습이 다시 필요함
          • 평가는 하나의 모델만 하는데, 그 전에 여러개의 모델중 뭐가 좋은지 선발


      • 하이퍼파라미터 튜닝

        • KNN 
          • n_neighbors - k
          • 거리계산법 
        • Decision Tree 
          • max_depth
          • min_samples_leaf
          • min_samples_split


      • Search

        • Grid Search : 다 돌리고 최적 뽑음
        • Random Search : 랜덤 돌려서 최적 뽑음 
        • Random + Grid 
          • 1 ~ 20개 중에서 랜덤서치로 하나 선정
          • 하나 선정된것의 주변 범위를 grid 서치 



      5일차 -앙상블

      • 앙상블 : 여러 모델을 한방에 쓰는것. 모델로 이뤄진 숲 
      • 보팅서로 다른 모델의 예측 결과를 종합해서 예측결과를 결정
      • 배깅 (Bootstrap Aggregating)
        • 부트스트랩으로 샘플 데이터를 만드는 것

          샘플링을 하는데 중복된 값이 존재하게 하는 것 (복원추출)

        • 배깅은 같은 모델들의 예측값을 집계해 최종 결과를 얻음

        • 범주형 데이터 : 투표 방식으로 결과 집계

        • 연속형 데이터 : 평균으로 결과를 집계

        • 랜덤 포레스트
          • 복원추출로 샘플 데이터를 100개 뽑음 (부트스트랩 샘플)

          • 트리구조가 다 다르다

            1. 랜덤 데이터 샘플링 : 샘플데이터를 무작위로 100개 뽑음
            2. feature를 랜덤하게 선정 : 각각의 샘플 데이터마다 무작위로 뽑은 n개의 feature로 서로 다른 트리를 만듦

              1개의 트리만을 볼때는 학습데이터에 과적합이 발생할 수 있는데,
              100개 각각의 트리를 종합하면 과적합은 발생하지 않음

      • 부스팅
        • 대표적인 부스팅 알고리즘: XGBoost, LightGBM

          sklearn에 속해있는 알고리즘이 아님.

          그래서, 타깃에 문자열이 있으면 안됨. 다른걸로 변환해야함

        • 앞의 모델이 예측하지 못한걸 계속 해서 오차 개선시킴

        • XGBoost : gradient boost (GBM)알고리즘을 병렬학습 가능하도록 구현한 것 

          • 결측치 알아서 처리해줌 
          • 주요 하이퍼파라미터 : n_estimators, max_death
                

      • 스태킹 (Stacking)

        여러 알고리즘이 예측한 값을 feature로 사용해 최종 예측함

        • KNN, 로지스틱 회귀, XGBoost 모델 등 기본모델 4개 이상을 선택하고
          각 모델별 예측값을 구한 후, 
          이 예측 값을 최종 모델의 학습 데이터로 사용하는 것 
        • 현실모델에서 많이 안씀. 대회에서 꽤 씀






      댓글

      이 블로그의 인기 게시물

      [KT 에이블스쿨 - IT 트랜드] 국내외 AI 관련 규제

      KT 에이블스쿨 : 핀테크 아이디어 공모전

      KT 에이블스쿨 : 6-7차 미니프로젝트 - 제안서 기반 솔류션 기획 및 설계