카테고리 없음
[머신러닝 특강] 머신러닝 주요기법 1회차
iron-min
2025. 11. 3. 19:40
오늘 배운것.
1. 분류 문제 이해하기
회귀(Regression): "얼마나?"의 문제
|
분류(Classification): "무엇인가?"의 문제
|
분류의 유형
이진 분류 (Binary Classification)
|
다중 분류 (Multi-class Classification)
|
2. 로지스틱 회귀 분석
로지스틱 회귀: 종속변수가 범주형(0, 1) 정상(0), 불량(1)일 때 사용하는 회귀분석 방법. 선형회귀의 한계를 극복하고 확률을 예측할 수 있는 강력한 분류 알고리즘

선형적으로 나타내는 확률 변수를 0과 1로 분류할수 있습니다.
로지스틱회귀의 해결책:
- 시그모이드 함수 사용으로 항상 0~1 사이 값 보장
- S자 곡선 형태로 자연스러운 확률 변화 표현
1) 오즈비의 이해

예시)
이기면 몇 번, 지면 몇 번인지 비율로 바꿔 싸움의 기울기를 본다.
오즈비는 실패확률 대비 성공확률의 비율입니다.
도박사들이 자주 쓰는 개념입니다. 예를 들어 도박이 성공할 확률이 80% 라면, 오즈비는 80%/20% = 4 예요. 다시 해석해보면 1번 실패하면 4번은 딴다는 소리입니다.
2) 로짓변환
오즈비가 0~ 무한대인데, 비대칭적으로 다루기가 어려워서 로그를 취하자


3) 로지스틱 함수
로짓을 다시 확률로 변환하는 역함수입니다. → 위의 로짓 함수를 X-Y 축 교체한 것
어떤 실수값이라도 0과 1 사이의 확률로 변환해줍니다


선형회귀식 도출



결론
1. 성공 확률 p를 알 수 있게 됩니다. (X 데이터를 input으로 넣게 된 후)
2. 가중치 β가 정해졌으므로, 해당 X 변수의 영향도를 파악할 수 있습니다.
3. X 변수의 단위가 1 증가할 때, exp(해당 β값)만큼 성공확률이 올라갑니다.

예시) 머신러닝 모델에서 .coef_()를 써서 회귀계수를 알수있는데 이때 e^b 만큼 확률이 증가함
코드로 확인하기
로지스틱 회귀 결과를 올바르게 해석하는 것이 실무에서 가장 중요합니다. 타이타닉 데이터를 통해 각 특성이 생존에 미치는 영향을 분석해봅시다. 특히 계수 해석을 해 보겠습니다. 로지스틱 회귀의 계수는 로그 오즈비의 변화량을 의미합니다. 양수면 해당 변수가 증가할 때 생존 확률이 높아집니다
# 모델 계수 분석
feature_names = X.columns
coefficients = model.coef_[0]
print("=== 타이타닉 생존에 영향을 미치는 요인 분석 ===")
coef_df = pd.DataFrame({
'Feature': feature_names,
'Coefficient': coefficients,
'Odds_Ratio': np.exp(coefficients)
}).sort_values('Coefficient', ascending=False)
print(coef_df)
print("\n=== 상세 해석 ===")
for feature, coef in zip(feature_names, coefficients):
odds_ratio = np.exp(coef)
print(f"{feature}: 계수 {coef:.3f}")
if coef > 0:
print(f" → 이 변수가 1단위 증가하면 생존 오즈비가 {odds_ratio:.3f}배 증가")
print(f" → 생존에 긍정적인 영향")
else:
print(f" → 이 변수가 1단위 증가하면 생존 오즈비가 {odds_ratio:.3f}배 감소")
print(f" → 생존에 부정적인 영향")
print()
3. 모델의 성능평가
# 테스트 데이터로 예측
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)
# 정확도 계산
train_accuracy = accuracy_score(y_train, y_pred_train)
test_accuracy = accuracy_score(y_test, y_pred_test)
print(f"훈련 데이터 정확도: {train_accuracy:.3f}")
print(f"테스트 데이터 정확도: {test_accuracy:.3f}")
# 상세한 분류 보고서
print("\n=== 테스트 데이터 분류 보고서 ===")
print(classification_report(y_test, y_pred_test, target_names=['사망', '생존']))
- 훈련/테스트 정확도 비교: 과적합 여부 확인
사망 0.3, 생존 0.7 ⇒ 너는 생존
- 훈련 정확도 >> 테스트 정확도: 과적합 의심
- 두 정확도가 비슷: 적절한 일반화 성능
- classification_report(): 정밀도, 재현율, F1-score 등 상세 성능 지표 제공 → 이 부분은 내일 자세히 다루도록 하겠습니다~!
- 정밀도(Precision): 생존 예측 중 실제 생존 비율
- 재현율(Recall): 실제 생존자 중 올바르게 예측한 비율
- F1-score: 정밀도와 재현율의 조화평균
- macro avg: 각 클래스별 지표의 단순 평균
- weighted avg: 클래스별 샘플 수를 고려한 가중 평균