지도학습의 원리: 회귀와 분류
정답이 있는 데이터에서 입력과 결과의 관계를 학습하고 회귀와 분류를 구분하는 원리
지도학습
- 지도학습(supervised learning): 입력과 정답이 짝지어진 과거 데이터에서 예측 규칙을 학습하는 방식
- 목표: 아직 결과를 모르는 새로운 사례의 결과 예측
- 예측(prediction)은 시간적으로 미래를 가리키기보다, 아직 관찰되지 않은 결과를 추측하는 것을 가리킴
- 예: 기기의 고장 여부를 예측한다고 하면, 꼭 앞으로 고장난다는 뜻이 아니라 현재 고장 여부를 진단하는 것을 포함
입력과 정답
- 특성(feature) X: 예측에 사용하는 정보(독립변수)
- 타깃(target) y: 예측하려는 정답(종속변수)
- 모델(model): X와 y의 관계를 학습한 예측 규칙
아파트 거주자의 자료를 예:
| 거주자 | 월세(만원) | 통학 시간(분) | 소음 수준 | 주거 만족도 | 재계약 여부 |
|---|---|---|---|---|---|
| A | 55 | 20 | 낮음 | 82 | 재계약 |
| B | 75 | 10 | 보통 | 76 | 재계약 |
| C | 45 | 55 | 높음 | 48 | 미재계약 |
| D | 65 | 35 | 보통 | 62 | 미재계약 |
- 입력 X: 월세, 통학 시간, 소음 수준
- 타깃 y: 주거 만족도 또는 재계약 여부
- 어떤 열을 y로 정하는지에 따라 서로 다른 예측 문제
학습과 예측
- 과거 사례에서 입력 X와 정답 y를 준비
- 모델이 X와 y의 관계를 학습
- 결과를 모르는 새로운 사례의 X를 모델에 입력
- 모델이 새로운 사례의 결과를 예측
- 실제 결과가 확인되면 예측과 비교
회귀
- 회귀(regression): 연속적인 숫자를 예측하는 지도학습 문제
- 평가의 핵심: 실제값과 예측값의 차이
- 차이를 최소화 하는 방향으로 학습
예시:
- 주거 조건으로 만족도 점수 예측
- 공부 시간과 출석 기록으로 시험 점수 예측
- 주택 특성으로 가격 예측
- 기온과 이용자 수로 전력 사용량 예측
분류
- 분류(classification): 미리 정한 범주 중 하나를 예측하는 지도학습 문제
- 평가의 핵심: 실제 범주와 예측한 범주의 일치 여부
- 범주를
0이나1처럼 숫자로 표시하더라도, 범주를 예측하는 문제이면 분류
예시:
- 장치 상태 특징을 바탕으로 정상/고장 예측
- 학습 기록으로 강의 완주/포기 예측
- 고객 행동으로 선호 상품 유형 예측
- 이메일 내용으로 스팸 여부 예측
예시: 주거 만족도
240명의 주거 조건으로 만족도를 예측하는 수업용 자료.
- 입력 X
commute: 통학 시간(분)rent: 월세(만원)noise: 소음 수준(1은 조용함, 5는 시끄러움)
- 타깃 y
score: 주거 만족도(0점에서 100점)
실습 준비
Colab에서 두 파일을 바로 내려받으려면 다음 셀 실행.
!wget -q -O housing.xlsx "https://www.mindscale.kr/media/98281ede1416a15670d419ced730f15ab08d51ff370771636544a1261bb3c53f/housing.xlsx?download=1"
!wget -q -O cases.xlsx "https://www.mindscale.kr/media/85f41d8db294086be3bd075f460463b844856bb1b72e8974f08c2088544c0cc0/cases.xlsx?download=1"
실습 프롬프트
🤖 AI 프롬프트
housing.xlsx의 data 시트를 불러와 주거 만족도 예측에 사용할 데이터를 준비해줘.
통학 시간·월세·소음 수준을 입력으로, 만족도 score를 타깃으로 나눠줘.
파이썬 코드와 초보자를 위한 한글 주석을 작성해줘.
데이터 불러오기
Excel 파일이 Colab의 현재 폴더에 준비된 상태에서 실행.
import pandas as pd
df = pd.read_excel("housing.xlsx", sheet_name="data")
df.head()
실행 결과
commute rent noise score
0 10 51 2 90.8
1 56 87 5 48.2
2 48 47 2 66.8
3 33 92 4 53.0
4 33 90 3 70.7
- 사례: 한 사람이 한 행을 차지하는 구조
- 입력 변수: 통학 시간, 월세, 소음 수준의 세 열
- 타깃: 마지막 만족도 열
입력과 타깃 나누기
features = [
"commute",
"rent",
"noise",
]
X = df[features]
y = df["score"]
X에 세 입력 변수를 함께 배치. y에는 예측할 만족도만 배치.
열 이름을 하나씩 적는 대신 drop()으로 타깃 열을 제외하는 방법도 가능.
y = df["score"]
X = df.drop(columns="score")
drop(columns="score"):score열을 제외한 나머지 열을 X로 선택- y: 제외한
score열을 타깃으로 선택
퀴즈
지도학습의 핵심적인 특징으로 가장 적절한 것은 무엇입니까?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.