본문 바로가기
Archive/데이터 분석 관련

[Data] 로지스틱 회귀분석의 해석 및 개선

by 다람이도토리 2021. 8. 23.

로지스틱 회귀 분석의 해석

scikit-learn 혹은 stat-models를 통해서 로지스틱 회귀 분석이 진행 가능하다.

이에 따라 나온 계수의 의미의 해석에 대해 확인하자.

여기서는 stat-model을 활용한다.

import statsmodels.api as sm
X = sm.add_constant(X_train_reg)
model = sm.Logit(y_train, X)
results = model.fit()

# 결과 요약표 출력
results.summary()

# 회귀 계수 출력
results.params

stat_model을 통해서는 다음과 같이 로지스틱 회귀 분석을 진행할 수 있다.

이 때, 계수는 로지스틱에 log를 취한 값이기 때문에, 바로 오즈비로 해석을 하는 오류를 범해서는 안된다.

np.exp(results.params)

을 토대로, 계수 전체에 exponential을 취해야 오즈비의 변화를 확인할 수 있게 된다.

 

로지스틱 모델의 개선

cutoff 조절

기본적으로 로지스틱 회귀분석을 실시할 경우 target 1이 될 확률을 최종적으로 얻게 된다.

이에 따라 기본적으로는 해당 값이 0.5 이상이면 1, 아닐 경우 0 으로 분류를 한다. 이를 임계값(cutoff)이라 하는데, 이 임계값을 변경해볼 수도 있다.

규제화

릿지 회귀, 라쏘 회귀 등을 통하여 규제화 적용이 가능하다. 

일반적인 회귀분석에서는 비용 함수를 최소화하는 방향으로 나아가기에, 차원이 증가할수록 오버피팅의 위험성이 커진다. 
이에 따라, 정규화를 통해 가중치가 낮은 항의 계수는 0으로 수렴하거나, 0에 가까운 수가 되어 모델에 미치는 영향을 줄일 수 있게 된다.

Ridge 회귀 : L2-Norm을 사용한 회귀로, 영향을 거의 미치지 않는 특성을 0에 가깝게 만들어 준다.
Lasso 회귀 : L1-Norm을 사용한 회귀로, 특성값의 계수가 낮을 경우 0으로 수렴시켜 버린다.
ElasticNet : 릿지 회귀와 라쏘 회귀의 최적화 지점이 달라 이를 합쳐서 규제 정도를 조절해준다.

 

Scikit-Learn에서의 Logistic Regression

scikit-learn의 경우의 기본적으로 상수항을 포함한 상태로 회귀분석을 하며, L2규제가 적용되어 있다.

from sklearn.linear_model import LogisticRegression
clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)

다만, cutoff는 자동으로 0.5로 설정되어 있기에, cutoff의 변동을 위해서는 조금 다른 방법을 사용해야 한다.

clf.predict_proba(X_test)

를 바탕으로, 0-1 class 결과가 아닌, 확률값을 받게 된다.

이를 바탕으로, 수동으로 클래스 분류 결과를 얻을 수 있다. 예를 들어 cutoff를 0.6 으로 잡게 되면,

def cut_off(y, threshold):
    Y = y.copy()
    Y[Y>=threshold] = 1
    Y[Y<threshold] = 0
    return Y.astype(int)

pred_Y = cut_off(pred_y, 0.6)
pred_Y

 

'Archive > 데이터 분석 관련' 카테고리의 다른 글

[Data] kNN 이해하기 및 활용  (0) 2021.08.28
[Data] ROC Curve  (0) 2021.08.24
[Data] Ensemble - Gradient Boosting  (0) 2021.08.02
[Data] UnderSampling, OverSampling  (0) 2021.07.31
[Data] GridSearchCV  (0) 2021.06.14