데이터 분석은 너므어려웠지만 이번 머신러닝 딥러닝 수업은 그래도 어느정도 따라하고~ 이해했으니까~ 2차미프는 머신딥러닝으로 하겠지? 뭐~ 쉬어가는 느낌으로 해야지~~ㅎ
데이터 분석을 하게되었다.
악성사이트 탐지 모델링
필요없는 변수를 골라내는 것은 너무 어렵다! 변수를 제거할수록 정확도가 낮아지기도 해서 굳이 제거해야하나..? 싶기 때문이다.
그래서 찾아봤다.
📍 변수 제거 필요성: 모델 단순화와 노이즈 제거
📍 제거 기준
도메인 지식: 문제와 도메인에 대한 이해를 통해 제거 필요성 판단
ex. 고객 데이터 분석) 고객 이름은 데이터를 분석하는데 영향을 미치지 않는다.
다른 변수와의 상관관계: 일부 분석에서는 너무 높은 상관관계가 있으면 부정확한 예측 가능성 발생
결측값: 변수에 결측값이 많으면 분석에 방해
데이터 품질: 변수에 오류나 불일치가 많으면 신뢰할 수 없고 분석에 부정적인 영향을 미칠 수 있습니다.
데이터 중복성: 변수가 데이터 세트의 다른 변수와 중복되는 경우
비즈니스 관련성: 해결하려는 비즈니스 문제와 변수가 관련이 없는 경우
결국 데이터를 잘 이해해야한다는 말같다. 어렵다~
결측치는 각 데이터를 파악해 중앙값, 평균, 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)
다음엔 이거 꼮 쓰고만다
모델링까지 마친 결과, 주피터랩 자체에서 예측 최고 성능은 0.9614가 나왔지만 캐글로 가져가서 올린 결과,, 0.90이 나왔다!!! 캐글 짜다짜~
평소엔 정확도가 높든낮든 대결~그런게 아니라 별 생각이 없었는데 사람들이 왜 0.01만 성능이 높아져도 좋아하는지 알것같다. 정말 0.0001도 소중하다!
혼자했으면 튜닝이든머든 그냥 한번 결과나오면 그걸로 말았을 것 같은데 캐글 컴피티션으로 남들이랑 순위를 매기니까 전처리도 튜닝도 더 잘해보려고 했고, 그 과정에서 많이 배웠다!!
😀추가 사항
강사님께서 분석과 모델링 관련 추천 책인 ISLR을 알려주셨다.
아래는 해당 책의 사이트이다. 근데 영어다.
https://www.statlearning.com/
미프정리한것만으로 쓰러질것같지만은~ 아직 이번주 수업이 더 남았다.
오랜만에 한기영강사님이 오셨다!! 갓기영 담임선생림~~
이번 수업은!
고객이 모델에게 던질 수 있는 두 가지 질문은 다음과 같다.
- 모델이 왜?? 그렇게 예측했나요???
- 모델이 비즈니스 문제를 해결할수있나요????
위 질문에 답하는 방식은 두 가지가 있다.
💡 모델이 왜! 이렇게 작동했냐면요!
처럼 답할 수 있는 방식이다.
어떤 변수가 모델에서 가장 중요하고 그 때문에 결과가 이렇게 나왔다고 이야기할 수 있다.
해석할 수 있는 모델에는 화이트박스 모델이 있다.
화이트박스 모델은 설명가능하다는 장점이 있지만, 대체로 설명이 가능하면 성능이 낮다.
💡 모델이 이렇게 학습되는 겁니다.
처럼 해석을 포함해서 설명한다.
모델 해석 방법으로 아래 네 가지를 배웠다.
개념
모델의 전체 성능에 대한 각 변수의 영향을 측정한다. 모델에 포함할 가장 관련성이 높은 변수을 선택하는데 도움이 된다.
코드 예시
fi = model.feature_importances_
개념
알고리즘과 상관없이 변수 중요도를 파악할 수 있다. 이는 다중공선성 문제 해결이 불가하다.
코드 예시
pfi = permutation_importance(model, x_val_s,y_val,n_repeats = 10, random_state = 2022)
개념
관심 변수 값이 변할때, 모델에 미치는 영향을 시각화한다.
코드 예시
from sklearn.inspection import plot_partial_dependence
plot_partical_dependence(model,
# 두 변수와 예측결과와의 관계를 구할시에는 ['a','b'] 입력
features = ['rm']
X = x_train,
kind = 'both')
plt.grid()
plt.show()
개념
전체 평균을 중심으로 예측된 값에 어떠한 영향을 주었는지 변수 별로 확인 가능
👉 상승요인과 하락요인이 제시된다.
코드 예시
# 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만 출력하였다)
코딩마스터즈일등해야지
했는데 못했다
아 할뻔했어요?
아니요그냥못했어요
ㅠㅠ
알고리즘공부를해야지. 알고리즘공부를해야지. 정말 알고리즘문제만주구장창풀어야지
그래두 마무리는 훈훈하게~^^
알고리즘 스터디원분들과 수고&화이팅인사를 나눴다.
양파팟 짱~ 다들 수고잔뜩햇서용~