신뢰성 머신러닝 프로젝트

[신뢰성] 머신러닝 개요 및 성능 평가

appendonly 2022. 12. 21. 18:09

* 모델 목록 및 라이브러리

라쏘 from sklearn.linear_model import Lasso
OLS from sklearn.linear_model import LinearRegression
릿지 from sklearn.linear_model import Ridge
K-NN from sklearn.neighbors import KNeighborsRegressor
LDA from sklearn.decomposition import LatentDirichletAllocation

데이터는 numpy 데이터프레임 활용

 

* Model Input Parameters(감성 분석 및 영향력으로 구분)

- 감성분석

자기 감성 분석(감성 편차 관점에서 분석)

타인 감성 분석(Retweet, Reply, Mention)

* 신뢰성이 낮은 사용자들은 콘텐츠 별로 감성 편차가 크고, 신뢰성이 높은 사용자들은 감성 편차가 작은 경향

- 영향력

그래프 점수

트윗 수

좋아요 수

리트윗 수

h-index (논문 수와 피인용 수를 트윗 수와 리트윗 수로 각각 대체)

 

사용자 평판은 두 개에 가중치를 적용해서 합한 값이다.

 

* Code

* 하이퍼파라미터: 머신러닝 알고리즘이 학습하지 않는 파라미터로 사람이 사전에 지정해줘야 함. 대표적으로 릿지와 라쏘의 alpha 규제 강도 파라미터가 있다.

* 고려한 하이퍼파라미터

1. Ridge와 Lasso 모델의 최적의 alpha 규제 강도 파라미터

2. K-NN 회귀 모델의 K값

3. 학습률 (Learning Rate) - Learning Decay Rate와 연관지어 준비 필요

4. 

 

 

Feature들은 정규화를 통해 스케일을 맞춰줘야 모든 데이터 포인트의 동일한 정도의 중요도(스케일)로 반영이 될 수 있다.(https://hleecaster.com/ml-normalization-concept/)

 

모델의 학습 데이터와 검증 데이터를 약 8:2로 나누고 설명변수와 종속변수를 나누는 코드이다.

cond = np.random.rand(len(df))>.2
train = np.where(cond)[0]
valid = np.where(~cond)[0]

train_df = df.iloc[train]
valid_df = df.iloc[valid]

train_y = train_df["rep"]
train_xs = train_df.drop(["rep"], axis = 1)

valid_y = valid_df["rep"]
valid_xs = valid_df.drop(["rep"], axis = 1)

GridSearchCV로 최적의 파라미터 탐색

- params는 딕셔너리 형태로 구성되며 cv는 cross validation의 약어로 교차 검증을 위한 fold 횟수이다.

- CV가 필요한 이유는 모델 overfitting 뿐만 아니라 underfitting까지 막으려고 쓴다.

- 시간이 오래 걸린다는 단점이 있다.

 

CV 종류는 K-Fold CV가 있다. 그 방식은 아래와 같다.(https://medium.com/@zstern/k-fold-cross-validation-explained-5aeba90ebb3)

① 전체 데이터를 K개 fold로 분할
② 분할된 fold 중 test data로 할당된 적이 없는 fold 1개를 validation set으로 할당
③ 위 ② 과정을 K번 반복
④ K개의 모델 성능 평가 결괏값을 평균 내어 최종 결괏값으로 활용

에서 제일 좋은 K값을 찾는 과정도 필요하다.

 

다중회귀를 활용한 CV에서 성능은 결정계수 혹은 RMS로 측정한다.

 

결국 가장 잘 학습된 모델을 얻게 된다.

knn = KNeighborsRegressor()

//파라미터 정보
params = {'n_neighbors':[5, 10, 15, 20, 25, 31]}

//GridSearch후 최적의 파라미터로 설정된 모델 도출
model = GridSearchCV(knn, params, cv=5)
#모델 학습
model.fit(X_train,y_train)

model.best_params_
print(model.best_params_)

https://hleecaster.com/ml-knn-regression-example/

훈련 데이터로 모델 학습(fit) 및 검증 데이터로 성능 확인. KNN은 인스턴스간 유클리디안 거리를 계산한다. 분류 모델이라면 K를 홀수로 정해야 항상 분류가 가능하다.

 

KNN은 학습 과정이라고 할 만한 절차가 없다. 모델에 데이터를 저장해놓고 새로운 데이터가 들어왔을 때 기존 데이터와의 거리를 재서 이웃들을 뽑고 회귀를 하기 때문이다. 이를 게으른 학습 또는 모델이라고 부른다. 다른 말로 Instance-based learning이라고도 하며, 데이터로부터 모델을 생성해 과업을 수행하는 Model-based와 대비된다.

 

KNN의 GridSearch는 최적의 k를 찾는 것에 의미가 있다고 볼 수 있다.

 

KNN Regressor 같은 경우는 최근접 k개 이웃들의 평균을 계산한다.

m = m.fit(train_xs, train_y)

std_score = m.score(valid_xs, valid_y)

본래 KNN은 특성 중요도를 계산하는 방법이 제공되지 않음. 하지만 특정 특성을 행끼리 서로 마구잡이로 교환했을 때의 성능 차이를 특성마다 비교하면서 해당 특성의 중요도를 추정해볼 수 있는 방법으로 계산했음.

valid_SL = valid_xs.copy()
valid_SL[graph] = np.random.permutation(valid_SL[graph])
feat_imp[graph] = std_score - m.score(valid_SL, valid_y)

 

* 다중공선성

다중 회귀 모델의 경우 다중 공선성이 발생함. 이는 독립 변수들 간에 강한 상관관계가 나타나는 문제로 데이터 분석 시 부정적인 영향을 준다. 일반적인 회귀 분석 시 설명 변수들은 독립적이라고 가정하므로 두 변수가 상관관계를 갖는 것은 회귀 분석의 전제 가정을 위배하는 것이다.

 

다중공선성이 있으면:

  • 계수 추정이 잘 되지 않거나 불안정해져서 데이터가 약간만 바뀌어도 추정치가 크게 달라질 수 있다
  • 계수가 통계적으로 유의미하지 않은 것처럼 나올 수 있다

 

진단법)

  1. 결정계수 R2값은 높아 회귀식의 설명력은 높지만 식안의 독립변수의 P값(P-value)이 커서 개별 인자들이 유의하지 않는 경우가 있다. 이런 경우 독립변수들 간에 높은 상관관계가 있다고 의심된다.
  2. 독립변수들간의 상관계수를 구한다.
  3. 분산팽창요인(Variance Inflation Factor,VIF)를 구하여 이 값이 10을 넘는다면 보통 다중공선성의 문제가 있다.

해결법)

  1. 상관관계가 높은 독립변수중 하나 혹은 일부를 제거한다.
  2. 변수를 변형시키거나 새로운 관측치를 이용한다.
  3. 자료를 수집하는 현장의 상황을 보아 상관관계의 이유를 파악하여 해결한다.
  4. 주성분 분석(PCA,Principle Component Analysis)를 이용한 diagonal matrix의 형태로 공선성을 없애준다.

분산 팽창 인수

https://laoonlee.tistory.com/12

 

다중공선성을 제거하면 회귀 계수에 따라 사용자의 신뢰성 측정 시 각 요인의 중요도를 판별할 수 있다.

 

* 성능 평가 항목

 

* 정답 셋

Forbes 랭킹 100명 점수를 기준으로 계산함. 학습은 train 데이터, valid 데이터를 8:2로 나눔.그리고 train 데이터든 valid 데이터든 다시 입력 데이터와 정답 셋으로 나뉨.

 

* 결정계수

1. 최소제곱법을 활용한 선형회귀분석에서 종속변수의 분산 중에서 독립변수로 설명되는 비율

2. 쉽게 말해, 이 통계 모델로 대상을 얼마나 잘 설명할 수 있는가를 숫자로 나타낸 것

3. 해당 모형이 타겟 변수를 얼마나 잘 예측 혹은 설명하는지 평가하는 지표 중 하나로 자주 사용

 

* 사용자 평판의 분산 및 표준편차로 사용자들의 평균이 얼마나 고르게 존재하는가도 성능 평가 항목으로 활용

 

성능 평가 결과, HITS(3.92) > 고유벡터 중심성(3.58) > 매개중심성(1.11) > 그래프 X