[KT AIVLE SCHOOL] 6주차: 2차 미프

ofohj·2023년 3월 12일
0

KT AIVLE SCHOOL AI 3기

목록 보기
6/21
post-thumbnail

😏미프 전 생각

데이터 분석은 너므어려웠지만 이번 머신러닝 딥러닝 수업은 그래도 어느정도 따라하고~ 이해했으니까~ 2차미프는 머신딥러닝으로 하겠지? 뭐~ 쉬어가는 느낌으로 해야지~~ㅎ

미니프로젝트 2차 - 소개

데이터 분석을 하게되었다.

주제

악성사이트 탐지 모델링

주요 기술

  • 웹 크롤링
  • 데이터 처리
  • 머신러닝

데이터 출처

  • 한국 인터넷 진흥원
  • OpenPhish
  • Phishtank

미니프로젝트 2차 - 프로젝트 진행

1. 데이터 전처리

1) 필요없는 변수 제거

필요없는 변수를 골라내는 것은 너무 어렵다! 변수를 제거할수록 정확도가 낮아지기도 해서 굳이 제거해야하나..? 싶기 때문이다.

그래서 찾아봤다.

📍 변수 제거 필요성: 모델 단순화와 노이즈 제거

📍 제거 기준

  • 도메인 지식: 문제와 도메인에 대한 이해를 통해 제거 필요성 판단
    ex. 고객 데이터 분석) 고객 이름은 데이터를 분석하는데 영향을 미치지 않는다.

  • 다른 변수와의 상관관계: 일부 분석에서는 너무 높은 상관관계가 있으면 부정확한 예측 가능성 발생

  • 결측값: 변수에 결측값이 많으면 분석에 방해

  • 데이터 품질: 변수에 오류나 불일치가 많으면 신뢰할 수 없고 분석에 부정적인 영향을 미칠 수 있습니다.

  • 데이터 중복성: 변수가 데이터 세트의 다른 변수와 중복되는 경우

  • 비즈니스 관련성: 해결하려는 비즈니스 문제와 변수가 관련이 없는 경우

결국 데이터를 잘 이해해야한다는 말같다. 어렵다~

2) 결측치 처리

결측치는 각 데이터를 파악해 중앙값, 평균, 0으로 채우기 중 알맞는 것을 택해 다르게 처리해주었다.

나중에서야 안건데 KNN Inputer라는 처리방법이 있다고 한다.
이게정말쩐대

📍 KNN imputer
개념
KNN 알고리즘을 기반으로 누락된 값의 k-최근접 이웃을 찾고 해당 값을 사용하여 누락된 값을 대치하여 누락된 값을 추정한다.

코드

from sklearn.impute import KNNImputer
import pandas as pd

data = pd.read_csv('data.csv')

# k값은 사용자지정값
imputer = KNNImputer(n_neighbors=5)

# Impute the missing values
imputed_data = imputer.fit_transform(data)

imputed_data = pd.DataFrame(imputed_data, columns=data.columns)

다음엔 이거 꼮 쓰고만다

2. 모델링

  • 사용 모델: RandomForestClassifier
  • 하이퍼파라미터 튜닝: GridSearchCV

3. 결론

모델링까지 마친 결과, 주피터랩 자체에서 예측 최고 성능은 0.9614가 나왔지만 캐글로 가져가서 올린 결과,, 0.90이 나왔다!!! 캐글 짜다짜~

평소엔 정확도가 높든낮든 대결~그런게 아니라 별 생각이 없었는데 사람들이 왜 0.01만 성능이 높아져도 좋아하는지 알것같다. 정말 0.0001도 소중하다!

혼자했으면 튜닝이든머든 그냥 한번 결과나오면 그걸로 말았을 것 같은데 캐글 컴피티션으로 남들이랑 순위를 매기니까 전처리도 튜닝도 더 잘해보려고 했고, 그 과정에서 많이 배웠다!!


😀추가 사항
강사님께서 분석과 모델링 관련 추천 책인 ISLR을 알려주셨다.
아래는 해당 책의 사이트이다. 근데 영어다.
https://www.statlearning.com/


미프정리한것만으로 쓰러질것같지만은~ 아직 이번주 수업이 더 남았다.
오랜만에 한기영강사님이 오셨다!! 갓기영 담임선생림~~

이번 수업은!

AI 모델 해석 및 평가

고객이 모델에게 던질 수 있는 두 가지 질문은 다음과 같다.

  1. 모델이 ?? 그렇게 예측했나요???
  2. 모델이 비즈니스 문제를 해결할수있나요????

위 질문에 답하는 방식은 두 가지가 있다.

1. Interpretability(해석)

💡 모델이 왜! 이렇게 작동했냐면요!

처럼 답할 수 있는 방식이다.
어떤 변수가 모델에서 가장 중요하고 그 때문에 결과가 이렇게 나왔다고 이야기할 수 있다.
해석할 수 있는 모델에는 화이트박스 모델이 있다.

화이트박스 모델

화이트박스 모델은 설명가능하다는 장점이 있지만, 대체로 설명이 가능하면 성능이 낮다.

  1. Linear Regression
  2. Decision Trees
  3. Logistic Regression
  4. SVM

블랙박스 모델

  1. Random Forest
  2. GBM
  3. KNN

2. Explainability(설명)

💡 모델이 이렇게 학습되는 겁니다.

처럼 해석을 포함해서 설명한다.


모델 해석

모델 해석 방법으로 아래 네 가지를 배웠다.

1. Feature Importance(FI)

  • 개념
    모델의 전체 성능에 대한 각 변수의 영향을 측정한다. 모델에 포함할 가장 관련성이 높은 변수을 선택하는데 도움이 된다.

  • 코드 예시

	fi = model.feature_importances_

2. Permutation Feature Importance(PFI)

  • 개념
    알고리즘과 상관없이 변수 중요도를 파악할 수 있다. 이는 다중공선성 문제 해결이 불가하다.

  • 코드 예시

    pfi = permutation_importance(model, x_val_s,y_val,n_repeats = 10, random_state = 2022)

3. Partial Dependence Plot(PDP)

  • 개념
    관심 변수 값이 변할때, 모델에 미치는 영향을 시각화한다.

  • 코드 예시

    from sklearn.inspection import plot_partial_dependence
    plot_partical_dependence(model,
    						# 두 변수와 예측결과와의 관계를 구할시에는 ['a','b'] 입력
    						features = ['rm']
                            X = x_train,
                            kind = 'both')
    plt.grid()
    plt.show()

4. Shap(SHapley Additive exPlanations)

  • 개념
    전체 평균을 중심으로 예측된 값에 어떠한 영향을 주었는지 변수 별로 확인 가능
    👉 상승요인과 하락요인이 제시된다.

  • 코드 예시

    # SHAP 값으로 모델의 예측 설명하기
    explainer1 = shap.TreeExplainer(model1)
    shap_values1 = explainer1.shap_values(x_train)
  
    shap.initjs() # javascript 시각화 라이브러리 --> colab에서는 모든 셀에 포함시켜야 함.

    # force_plot(전체평균, shapley_values, input)
    shap.force_plot(explainer1.expected_value, shap_values1[0, :], x_train.iloc[0,:])

🔻 결과 (shap는 다양한 차트를 제공하지만 그 중 force_plot만 출력하였다)


코딩마스터즈

코딩마스터즈일등해야지
했는데 못했다
아 할뻔했어요?
아니요그냥못했어요
ㅠㅠ

알고리즘공부를해야지. 알고리즘공부를해야지. 정말 알고리즘문제만주구장창풀어야지

그래두 마무리는 훈훈하게~^^
알고리즘 스터디원분들과 수고&화이팅인사를 나눴다.
양파팟 짱~ 다들 수고잔뜩햇서용~

0개의 댓글