내일배움캠프(QC,QA_5기)

[내일배움캠프_QA/QC 5기] 36일차(1) _ 머신러닝 완강

qc-standard 2026. 4. 27. 21:04

2026/04/27 Mon.

● 개인과제
● 머신러닝 기초 완강
머신러닝 심화 완강
 주간 목표 ↓
  ● 개인과제 제출
● 자격증 공부

 


⊙ 머신러닝 기초 ~1-18

● 1-11

☑️ 다중선형회귀

  • (X, y가 하나씩인 = 단순회귀분석)
  • 비선형적 관계
  • X 변수가 1개 이상(x변수가 2개 또는 x, x² 변수)

 

☑️ 범주형 데이터 사용

수치형 데이터

범주형 데이터

● 숫자로 된 데이터
● 연속형 데이터
: 50~51 사이 소수점으로 연속된 숫자들이 존재하는 데이터
● 이산형 데이터
: 두 개 값이 유한한 개ㅐ수로 나누어진 데이터 - 주사위 / 나이 
● 숫자가 아닌 데이터
● 순서형 자료
: 자료 자체에 순서가 있음 - 학점 A B C D = 100 90 80 70
● 명목형 자료
: 순서 의미 없음 - 혈액형, 성별 

 

☑️ 범주형 데이터 - 실습

  • 머신러닝 모델에 훈련 시 해당 데이터를 숫자로 바꿔야함
  • 성별 같은 범주형 데이터를 임의의 숫자로 바꿀 수 있음 ▷ Encoding 과정
더보기

 

#함수를 쓸수도, sklearn에서 제공하는 함수를 쓸 수도 있음

tips_df.head()
# Female 0, Male 1
def get_sex(x):
    if x == 'Female':
        return 0
    else:
        return 1
 
# 'apply'method - 매 행을 특정한 함수를 적용
tips_df['sex_en'] = tips_df['sex'].apply(get_sex)
tips_df.head()
# 모델설계도 가져오기
# 학습
# 평가
model_lr3 = LinearRegression()
X = tips_df[['total_bill','sex_en']]
y = tips_df[['tip']]


#학습
model_lr3.fit(X,y)

#예측
y_pred_tip2 = model_lr3.predict(X)
 
y_pred_tip2[:5]
# 단순선형회귀 mse: X변수가 전체 금액
# 다중선형회귀 mse: X변수가 전체 금액, 성별
print('단순선형회귀', mean_squared_error(y_true_tip, y_pred_tip))
print('다중선형회귀', mean_squared_error(y_true_tip, y_pred_tip2))
print('단순선형회귀', r2_score(y_true_tip, y_pred_tip))
print('다중선형회귀', r2_score(y_true_tip, y_pred_tip2))
sns.barplot(data = tips_df, x = 'sex', y = 'tip')

 

 


● 1-12

☑️ 선형회귀

  • 이해하기 쉽고 방법도 쉽지만! 선형적인 관계가 존재해야 함 = Linearity(선형성)
  • 등분산성(Honoscedasticity) : 오차의 분산이 모든 독립변수에 대해 일정한 패턴을 가져야함 
  • 정규성(Normality) : 정규분포를 따라야 한다 
  • 독립성(Independence)
    : x 변수는 서로 독립적이어야 함 = x 변수 간의 연관이 없어야 함
    : 독립변수(x)간의 강한 상관관계 = 다중공선성
    : 해결 방법 - 상관관계가 높은 변수 중 하나 선택 
  •  

☑️선형회귀 정리

장점

단점

● 직관적이고 이해가 쉬움
X-Y관계를 정량화 할 수 있음
● 모델이 빠르게 학습함 - 가중치 계산이 빠
● X-Y간의 선형성 가정이 필요
● 평균(mean)포함 하기에 이상치에 민감
● 범주형변수를 인코딩 시 정보손실이 생김 

sklearn.linear_model.LinearRegression

☑️ 데이터 프로세스


● 1-13

☑️ 로지스틱 회귀 - 타이타닉 

더보기

 

import pandas as pd

titaninc_df  = pd.read_csv('/content/train.csv', encoding= 'utf-8')
titaninc_df.head()
- 가설:
 1. 비상상황특성상 여성을 배려해서 많이 생존
  - 1. pivot table을 만들어 확인
  - 2. 그래프를 통해서 확인
pd.pivot_table(titaninc_df, index = 'Sex', columns = 'Survived',aggfunc='size')
import seaborn as sns
sns.countplot(titaninc_df, x = 'Sex', hue ='Survived')
- 정확도(Accuracy): 맞춘갯수 / 전체 데이터
- 생존을 맞춤
    - 여성은 다 살았을것이고, 남성은 모두 죽었을 것이다.
#전체개수
len(titaninc_df)
(233+468)/891*100

 

 


● 1-14

☑️ 로지스틱 회귀

  • X가 연속형 변수이고, Y가 특정 값이 될 확률
  • ex) 타이타닉 -  p(y = 1(생존)) : 생존할 확률값을 예측
    확률p가 0 ≤ p 1 여야 하지만 회귀에서는 그런게 존재하지 않음
  • 선형회귀가 적절하지 않
  • 오즈비(Odds ratio) 개념
    : "승산비" 실패확률 대비 성공확률
    : 예를 들어 도박이 성공할 확률이 80% 라면, 오즈비는 80%/20% = 4 예요. 다시 해석해보면 1번 실패하면 4번은 딴다는 소리입니다.
  • 어떤 값을 가져오더라도 반드시 특정 사건이 일어날 확률(Y값이 특정 값일 확률)이 0과 1안으로 들어오게 하는 특징을 가지게 됨
  • 중치 값을 안다면 X값이 주어졌을 때 해당 사건이 일어날 수 있는 P의 확률을 계산
  • 분류 예측에 사용

● 1-15

☑️ 분류 평가 지표

  • 정밀도(Precision) : 모델이 양성 1로 예측한 결과 중 실제 양성의 비율(모델의 관점)
  • 재현율(Recall) : 실제 값이 양성인 데이터 중 모델이 양성으로 예측한 비율(데이터의 관점)
  • f1-Score: 정밀도와 재현율의 조화 평균
  • 정확도(Accuracy)

 


● 1-16

☑️ 로지스틱 회귀 - 실습 

  • sklearn.linear_model.LogisticRegression : 로지스틱회귀 모델 클래스
    • 속성
      • classes_: 클래스(Y)의 종류
      • n_features_in_ : 들어간 독립변수(X) 개수
      • feature_names_in_: 들어간 독립변수(X)의 이름
      • coef_: 가중치
      • intercept_: 바이어스
    • 메소드
      • fit: 데이터 학습
      • predict: 데이터 예측
      • predict_proba: 데이터가 Y = 1일 확률을 예측
  • sklearn.metrics.accuracy : 정확도
  • sklearn.metrics.f1_socre: f1_score
더보기
titaninc_df.head()
- 숫자
    - Age, SibSp,Parch, Fare
- 범주형
    - Pclass, Sex, Cabin, Embarked

- X변수 1개, Y변수(Survived)
# info(): 데이터에 대한 결측치, 데이터전체 갯수 등을

titaninc_df.info()
# X변수: Fare, Y변수: Survived
X_1 = titaninc_df[['Fare']]
y_true = titaninc_df[['Survived']]
 
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
 
from sklearn.linear_model import LogisticRegression
 
sns.scatterplot(titaninc_df, x = 'Fare',y = 'Survived')
sns.histplot(titaninc_df, x = 'Fare')
# 수치형데이터를 확인하는 쉬운방법 describe()
titaninc_df.describe()
#모델 불러오기
model_lor = LogisticRegression()
model_lor.fit(X_1, y_true) 
def get_att(x):
    #x모델을 넣기
    print('클래스 종류', x.classes_)
    print('독립변수 갯수', x.n_features_in_)
    print('들어간 독립변수(x)의 이름',x.feature_names_in_)
    print('가중치',x.coef_)
    print('바이어스', x.intercept_)

get_att(model_lor)
from sklearn.metrics import accuracy_score, f1_score
def get_metrics(true, pred):
    print('정확도', accuracy_score(true, pred))
    print('f1-score', f1_score(true, pred))
 
y_pred_1 = model_lor.predict(X_1)
y_pred_1[:10]
len(y_pred_1)
get_metrics(y_true, y_pred_1)

 


● 1-17

☑️ 다중 로지스틱 회귀 - 실습

더보기
titaninc_df.info()
#Y(Surivved): 사망
#X(수치형): Fare
#X(범주형): Plcass(좌석등급), Sex
def get_sex(x):
    if x == 'female':
        return 0
    else:
        return 1
titaninc_df['Sex_en'] = titaninc_df['Sex'].apply(get_sex)
 
titaninc_df.head(3)
X_2 = titaninc_df[['Pclass','Sex_en','Fare']]
y_true = titaninc_df[['Survived']]
model_lor_2 = LogisticRegression()
model_lor_2.fit(X_2,y_true)
get_att(model_lor_2)
y_pred_2 = model_lor_2.predict(X_2)
y_pred_1[:10]
# X변수가 Fare
get_metrics(y_true, y_pred_1)

# X변수가 Fare, Pclass, Sex
get_metrics(y_true, y_pred_2)
 
# 각 데이터별 Y=1인 확률 뽑아내기(생존할 확률)
model_lor_2.predict_proba(X_2)
y_pred_2[:10]

● 1-18

☑️ 로지스틱 회귀 마무리 

  • 선형회귀의 아이디어에서 종속 변수(Y)만 가공한 것

장점

단점 

● 직관적이고 이해하기 쉽다 ● 복잡한 비선혀여 관계 모델링이 어려울 수 있음

sklearn.linear_model.LogisticRegresson

☑️ 회귀, 분류 정리 

  • 선형회귀 + 로지스틱 공통점
    1. 모델 생성이 쉬움
    2. 가중치(혹은 회귀계수)를 통한 해석이 쉬운 장점
    3. X 변수에 범주형, 수치형 변수 둘 다 사용 가능
  선형회귀(회귀) 로지스틱회귀(분류)
Y(종속변수) 수치형 범주형
평가척도 MSE
R square(Only 선형회귀)
Accuracy(정확도)
F1 - score
sklearn 모델 클래스
sklearn.linear_model.linearRegression
sklearn.linear_model.LogistricRegression
sklearn 평가 클래스
sklearn.metrics.mean_squared_error
skelarn.metrics.r2_score
sklearn.metrics.accuracy_score
skelearn.metrics.f1_score

☑️ 데이터 분석 프로세스