지도학습 (Supervised Learning)

XTHK·2025년 5월 16일

Anaysis

목록 보기
17/23

데이터 마이닝

  • 기계 학습 (Machine Learning) : 컴퓨터가 데이터간의 관계를 학습하여 새로운 수식(model)을 도출하는 작업
  • 기계 학습의 핵심 포인트:
    • 학습 능력 : 컴퓨터가 얼마나 데이터를 잘 학습하는가?
    • 일반화 능력 : 새로운 데이터가 들어왔을 때, 얼마나 잘 예측하는가?
  • 기계 학습의 3 요소
    1. 데이터 (교과서) : 학습의 목적에 맞게 데이터를 깔끔하게 다듬는 과정이 필요 : 특성공학 (Feature Engineering)
    2. 알고리즘 (교사) : 학습의 목적과 데이터의 특성에 맞는 알고리즘을 선택 : 선형회귀분석 / 의사결정나무 / SVM / ...
    3. 하드웨어 (학생) : CPU / GPU : 비용이 많이 든다

기계학습의 종류

1) 지도학습 (Supervised Learning)

  • 목표변수 (Y)와 설명변수 (X)간의 관계를 학습해서, 새로운 X가 들어올 때, Y를 예측/분류
  • 회귀 (Regression) : Y값이 연속형 -> 특정 값을 최대한 가깝게 예측하는 것이 목적
  • 분류 (Classification) : Y값이 범주형 -> 특정 항목인지 정확하게 분류하는 것이 목적

2) 비지도학습 (Unsupervised Learning)

  • 설명변수(X) 데이터 간의 수학적 거리, 유사성, 상관성 등을 이용하여 비슷한 유형의 데이터를 묶거나, 연관 있는 데이터를 찾거나, 데이터의 차원을 줄이는 등의 학습 기법
  • 군집분석 (Clustering) : 비슷한 위치 또는 가까운 위치의 데이터들끼리 묶어주는 기법
  • 연관분석 : 특정 데이터의 유사한 항목을 찾아주는 기법 : 장바구니 분석 추천시스템
  • 차원축소 : 특정 데이터의 항목 (Column / X)을 줄여주는 기법

3) 강화학습 (Reinforcement Learning)

  • 컴퓨터 시뮬레이션을 통해 사용자가 설정한 환경에 대해 보상이 주어지는 방향으로 학습하는 기법
  • ex)컴퓨터 AI, 알파고 (데이터가 없어도 학습이 가능)

지도학습 절차

  • 지도학습
    • 목표변수 Y와 설명변수 X의 관계를 학습해서 새로운 X가 들어올 때, Y를 예측/분류
  • 지도학습 절차 6단계:
    1. 데이터 핸들링 (데이터 불러오기 / 파생변수 생성 / 층별화 / ... ) : 데이터의 구조적인 관점에서 학습을 수행할 수 있는 데이터 셋으로 다듬는 과정
    2. 목표변수 Y와 설명변수 X를 설정
    3. 학습 데이터 (Train Set)와 검증 데이터(Test Set)으로 분할
      • 검증 데이터는 학습에 참여하지 않는다
      • 교차 검증의 validation set과 혼동하지 말 것
    4. 학습을 수행
      • 특성공학 (결측값 처리 / 스케일링 / 인코딩 / ..) -> pipeline
      • 학습
    5. 학습 모델 평가
      • 학습 능력 평가 / 일반화 능력 평가
    6. 새로운 데이터가 들어올 때 예측 / 분류
      • 모델을 파일형태로 추출 -> web / app / ..


예측모델 구축 코드
로지스틱 회귀 분류 모델

  • 필요한 모듈 import
import pandas as pd
import numpy as np
import plotly.express as px

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# 이진 / 다중 클래스 분류
# 로지스틱 회귀모델은 회귀 모델이지만 분류에 사용
from sklearn.metrics import accuracy_score

import pickle

1) 데이터 핸들링

df1 = pd.read_csv('01_Data.csv')

df1['해약여부'] = df1['State'].replace( {'계약확정' : 0, '기간만료' : 1,
                                     '해약확정' : 1, '해약진행중' : 1})
                                     
# 결측값 제거
df2 = df1.dropna()
# 컬럼 확인
# df2.columns

2) 목표변수 / 설명변수 선택

X = df2[['Age', 'Credit_Score', 'Amount_Month', 'Term']]
Y = df2['해약여부']

3) 학습 데이터와 검증 데이터를 분할

x_train, x_test, y_train, y_test = train_test_split(X, Y,
                                                    random_state = 5555)

4) 학습 실시 (분류) 로지스틱 회귀

model = LogisticRegression()
model.fit(x_train, y_train)

5. 성능 확인

y_train_pred = model.predict(x_train)
y_test_pred = model.predict(x_test)

print('학습 정확도 : ', accuracy_score(y_train, y_train_pred))
print('테스트 정확도 : ', accuracy_score(y_test, y_test_pred))

6) 새로운 데이터 입력

x1 = input('Age를 입력하시오')
x2 = input('Credit_Score를 입력하시오')
x3 = input('Amount_Month를 입력하시오')
x4 = input('Term를 입력하시오')

input_data = pd.DataFrame(data = [[x1, x2, x3, x4]])
input_data.columns = X.columns

# 새로운 값 예측
model.predict(input_data)[0]
# 예측 결과 : 정상

7. 생성한 모델을 파일로 저장

pickle.dump(model, open('model.sav', 'wb')) # wb : write binary : 쓰기
profile
Analyse the world

0개의 댓글