목록Python/ML (37)
오답노트
순위 지표 순위 지표는 추천 시스템이 제공하는 추천 결과의 순서와 실제 사용자의 선호도 순서 간의 유사성을 측정하는 지표다. 순위 지표는 일반적으로 정확도 지표와는 달리, 추천 결과가 아이템 리스트의 어떤 위치에 있는지에 초점을 둔다. 이러한 이유로, 순위 지표는 추천 시스템의 실제 사용 상황을 잘 반영한다. MAP (평균 정밀도, Mean Average Precision) MAP는 Precision@k의 평균 값이다. 여기서 k는 추천 리스트에서 고려하는 상위 k개의 아이템이다. MAP는 추천 시스템이 추천한 아이템 중 실제로 관심 있는 아이템이 있는 비율에 초점을 둔다. 위 그림에서 추천은 각 인덱스는 사용자에 추천할 아이템이고 0은 모델이 추천하지 않는 것, 1은 모델이 추천했음을 의미한다. 첫번째..
정확도 지표 분류문제에서 자주 사용되는 지표들을 의미한다. 추천시스템에서는 제공하는 추천 결과 중에서 실제로 사용자가 선호하는 아이템의 비율을 측정하는 지표다. 대표적으로 정확도 (Accuracy), 정밀도 (Precision), 재현율 (Recall), F1-Score이 존재한다. 정확도 (Accuracy) 정확도는 모든 경우에서 예측과 실측이 모두 맞았을 때를 의미한다. 하지만 데이터가 편향되어 있다면 그 신뢰성이 많이 떨어진다. 예를들어 True가 일반적인 Domain에서 가끔 False가 등장한다고 했을 때, 모델이 대부분을 True로 예측할 것이다. 그렇다면 True에 대한 정확도는 높지만 False에 대한 정확도는 낮다는 단점이 있다. 정밀도 (Precision) 정밀도는 예측이 True인 것..
Collaborative Filtering 협업 필터링은 사용자와 항목의 유사성을 동시에 고려해 추천한다. 기존에 사용자의 관심사가 아닌 항목도 추천 가능하고 자동으로 임베딩 학습이 가능해 도메인 지식이 필요없다. 하지만 학습 과정에 나오지 않은 항목은 임베딩을 만들 수 없다. 또 추가 특성을 사용하기 어렵다. KNN 머신러닝에서 봤던 KNN과 같은 원리다. 가장 근접한 K 명의 이웃을 통해서 예측하는 방법. https://dhjkl123.tistory.com/226 [ML] KNN (K-Nearest Neighbors) KNN 예측 데이터의 변수로 부터 실측 데이터의 변수 사이의 거리를 계산하여 그 중 가장 가까운 k개 데이터의 평균으로 타겟 데이터를 예측하는 알고리즘 (출처 : https://pub...
Content-based Filtering Content-based Filtering은 이전의 행동과 명시적 피드백을 통해 좋아하는 것과 유사한 항목을 추천한다. 유사도를 기반으로 추천한다. 많은 수의 사용자를 대상으로 쉽게 확장 가능하고 사용자가 관심을 갖지 않던 상품까지 추천 가능한 장점이 있다. 하지만 입력 특성을 직접 설계해야 하기 때문에 많은 도메인 시직이 필요하고 사용자의 기존 관심사항을 기반으로만 추천 가능한 단점이 있다. 유클리드 거리 위에서 유사도를 기반으로 추천한다고 했는데, 그 중 사용되는 유사도인 유클리드 거리 유사도이다. 이를 Python 코드로 구현하면 아래와 같다. import numpy as np euclidean_dist = np.sqrt(np.sum(np.square(my..
CatBoostRegressor # pip install catboost import catboost as cbt model_cbt = cbt.CatBoostRegressor() params_cbt = {'depth' : [4,5,6,7,8,9, 10], 'learning_rate' : [0.01,0.02,0.03,0.04], 'iterations' : [10 ,30,50,70, 100] } model_cbt_g = GridSearchCV(model_cbt,params_cbt,cv=10,verbose=3) model_cbt_g.fit(x_train,y_train) pred_cbt = model_cbt_g.predict(x_val) ufs.Regressor_report(y_val,pred_cbt) pip ..
CatBoost CatBoost 알고리즘은 분류 모델을 만들 때 유용한 최근 알고리즘이다. 기존 Boosting 알고리즘의 문제점을 극복하는 알고리즘이다. 기존 Boosting의 한계 Prediction Shift train data에서의 조건부 확률과 test data에서 조건부 확률간 차이가 있다. Target Leakage target을 예측하기 위해 모델링을 할 떄, train data의 target이 모델에 영향을 준다. 하지만 실제 예측을 할 때는 target이 없는 모순이 존재하게 된다. 기존 Boosting 극복 Ordered Target Statistics 과 Ordered Boosting으로 위 한계를 극복하려고 한다. 두 개념은 학습에 사용될 객체들을 시계열 데이터가 아니더라도 가상의..
Shapley Additive Explanations (SHAP) Shapley Value Feature의 가능한 모든 조합에서 하나의 Feature에 대한 평균 기여도를 계산한 값을 Shapley Value라고 한다. 가중 평균을 통해 Feature의 기여도를 계산한다. 기여도 계산은 다음과 같다. (모든 Feature를 사용한 모델링의 예측 값) - ( 기여도를 알고 싶은 Feature가 존재하는 Feature들의 조합들 중 한 조합을 사용한 모델링의 예측 값) 수식은 내가 이해하지 못하므로 올리지 않겠다. https://arxiv.org/pdf/1705.07874.pdf 나중에 실력이 생기면 위 논문을 읽어보자 실습 (회귀 모델) !pip install shap from sklearn.ensembl..
Partial Dependence Plots 관심 Feature의 값이 변할때, 모델에 미치는 영향을 시각화한다. 데이터 셋의 모든 row에 관심 Feature 모든 값을 돌면서 하나로 통일하고 예측한다. 그 값들의 평균을 계산한다. from sklearn.inspection import plot_partial_dependence var = 'rm' plt.rcParams['figure.figsize'] = 12, 8 plot_partial_dependence(model, features = [var], X = x_train, kind = 'both') plt.grid() plt.show() 예측할 모델과 관심 Feature 그리고 데이터 셋을 입력해 Partial Dependence Plots를 출력한..
Permutation Feature Importance SVM 과 KNN 같은 알고리즘은 Feature Importance를 알 방법이 없다. 하지만 Permutation Feature Importance를 활용하면 알고리즘의 상관없이 변수 중요도를 파악할 수 있다. Feature 하나의 데이터를 무작위로 섞고 예측했을 때, model의 Score가 섞기 전과 섞은 후 얼마나 감소되는지 계산하는 방식이다. 특정 Feature에 대해서, 여러 번 시도해서 나온 Score의 평균 계산하여 그것을 원래 model 의 Score와 빼 변수 중요도를 판별하는 방법이다. 하지만 다중 공성성이 있는 변수가 존재할 때, 관련된 변수는 그대로 존재하므로 Score가 줄어들지 않을 수 있다. from sklearn.ins..
모델에 대한 설명 모델을 통해 예측하고 예측한 결과를 통해 비즈니스 문제를 해결한다. 하지만 인공지능이 예측한 결과라는 근거는 아무런 설득이 되지 않는다. 그 인공지능이 예측을 할 때, 어떤 변수를 고려하여 예측했는지가 중요하다. 이 모델들은 설명하기 쉬울 수록 White Box Model, 설명하기 어려울수록 Black Box Model 이라고 한다. 경향을 봤을 땐 White Box Model에 가까울 수록 성능이 낮다고 볼 수 있다. Tree 기반 모델의 변수 중요도 Tree 기반의 모델들은 feature importance라는 변수에 해당 모델의 변수 중요도가 입력되어 있다. 이 feature importance는 어느 한 노드에서 정하는 것이 아닌 모델 전체에 노드에서 봤을 때, 평균적으로 가장..