24일차는 머신러닝을 본격적으로 들어가기 전에, 머신러닝이 결국 무엇을 하려는 과정인지를 크게 잡는 날에 가까웠다. 전날까지 Tableau로 데이터를 보여주는 방법을 봤다면, 이번에는 데이터를 가지고 “예측하는 함수”를 어떻게 만들고, 그 함수가 잘 만들어졌는지 어떻게 평가할지로 넘어갔다.
처음에 가장 크게 남은 건 머신러닝 포트폴리오에 대한 현실적인 이야기였다. 머신러닝은 예전처럼 새로운 알고리즘이 계속 나오는 분야라기보다, 이제는 어느 정도 정해진 프로세스와 알고리즘을 상황에 맞게 쓰는 쪽에 가까워졌다. 그래서 단순히 데이터를 수집하고 모델을 돌려서 정확도 몇 %가 나왔다고 쓰는 것만으로는 차별화가 어렵고, 오히려 문제 설정, EDA, 변수 처리, 평가 기준 선택이 더 중요하게 느껴졌다.
1. 머신러닝은 결국
Y = f(X)
를 찾는 과정이었다
머신러닝을 수식으로 보면 결국 Y = f(X)를 찾는 과정이다. 어떤 입력 X가 들어왔을 때, 우리가 원하는 출력 Y를 잘 예측해주는 함수 f를 찾는 것이다. 강의록에서도 “주어진 X와 Y의 관계는 무엇인가?”라는 질문으로 시작하고, 이 관계를 Y = f(X)로 표현했다.
Y = f(X)
예를 들어 X가 고객의 나이, 구매 횟수, 방문 시간이라면 Y는 구매 여부가 될 수 있다. X가 주택 면적, 방 개수, 위치라면 Y는 주택 가격이 될 수 있다. 결국 모델링은 주어진 데이터에 잘 맞는 f를 찾는 과정이었다.
그런데 이 f의 모양은 하나로 정해져 있지 않다. 어떤 사람은 1차식으로 볼 수도 있고, 어떤 사람은 2차식이나 더 복잡한 식으로 볼 수도 있다.
Y = W1X1 + W2X2
Y = W1X1² + W2X2²
여기서 어떤 모양의 f를 쓸지 정하는 것이 알고리즘 선택에 가깝고, 그 안에서 W1, W2 같은 값을 찾는 것이 학습에 가까웠다. 즉 머신러닝은 “모델을 돌린다”가 아니라, 어떤 함수 형태를 선택하고, 그 함수 안의 파라미터를 데이터에 맞게 찾는 과정이었다.
2. 용어가 조금씩 달라도 결국 같은 구조였다
머신러닝으로 들어오면서 용어도 다시 정리했다. 통계 쪽에서는 X를 독립변수, Y를 종속변수라고 부르는 경우가 많고, 머신러닝 쪽에서는 X를 feature, Y를 target 또는 label이라고 부르는 경우가 많다.
통계 쪽 표현
X = 독립변수
Y = 종속변수
머신러닝 쪽 표현
X = feature
Y = target / label
행 단위 데이터도 분야에 따라 sample, instance, observation, row처럼 다르게 불릴 수 있었다. Pandas에서는 행이라고 생각했던 것이 머신러닝에서는 하나의 sample이 되고, 각 컬럼은 feature가 된다. 강의록에서도 하나의 sample data는 여러 개의 측정값을 모은 vector로, N개의 sample data는 2차원 matrix로 표현된다고 정리되어 있었다.
1개의 sample
= 여러 feature 값을 가진 1개의 vector
N개의 sample
= 여러 vector가 쌓인 2D matrix
이 부분은 단순 용어 정리 같지만, 뒤에서 전통적인 머신러닝과 딥러닝을 구분할 때 중요해졌다. 전통적인 머신러닝은 기본적으로 한 샘플이 1D vector 형태로 들어가야 하고, 전체 데이터셋은 2D matrix 형태가 된다.
3. 전통적인 머신러닝과 딥러닝은 데이터 차원에서 갈렸다
전통적인 머신러닝은 주로 2D 테이블 데이터를 다룬다. 회사의 고객 데이터, 매출 데이터, 인사 데이터처럼 한 행이 하나의 사람 또는 하나의 사건이고, 각 컬럼이 그 대상의 속성인 데이터는 전통적인 머신러닝에 잘 맞는다.
문제는 이미지나 영상처럼 한 샘플 자체가 2D 또는 3D 구조를 가진 데이터다. 예를 들어 컬러 이미지 한 장은 단순히 한 줄짜리 vector가 아니라, 가로 × 세로 × RGB 채널을 가진 3차원 데이터에 가깝다. 전통적인 머신러닝에 넣으려면 이걸 억지로 1D vector로 펴야 한다.
컬러 이미지 1장
= height × width × RGB
전통 ML에 넣으려면
= 1D vector로 flatten
이렇게 flatten하면 픽셀 간의 공간적인 관계가 깨진다. 이미지에서 위아래, 좌우 픽셀의 관계가 중요한데, 한 줄로 펴버리면 원래 가까웠던 픽셀들이 멀리 떨어져 버릴 수 있다. 그래서 이미지나 영상처럼 공간적 구조가 중요한 데이터에서는 전통적인 ML이 한계가 있고, CNN 같은 딥러닝 구조가 훨씬 잘 맞는다는 흐름이었다.
이 부분이 딥러닝을 따로 배우는 이유와 연결됐다. 딥러닝은 머신러닝의 한 종류지만, 입력과 출력의 차원에 대한 자유도가 훨씬 크고, 이미지·텍스트·영상 같은 비정형 데이터의 구조를 더 잘 살릴 수 있다.
4. 학습은 파라미터를 찾는 과정이었다
모델의 함수 형태를 정했다고 끝나는 것이 아니다. 예를 들어 선형 모델을 쓴다고 하면, X1, X2 앞에 붙는 가중치 W1, W2를 찾아야 한다.
Y = W1X1 + W2X2
여기서 W1, W2가 아무 값이나 되면 안 된다. 주어진 train data에서 실제 Y와 예측한 Y의 차이가 작아지도록 값을 찾아야 한다. 이 값을 찾는 과정이 learning이었다.
강의에서는 “구두(Data)에 잘 맞는 사람(Model)을 찾자”는 비유가 나왔다. 결국 주어진 데이터에 잘 맞는 모델을 찾는 것이고, 수식으로 보면 Cost Function의 값을 최소로 만드는 W를 찾는 과정이었다.
학습의 목표
주어진 데이터에 맞는 f를 정한다.
f 안의 파라미터 W를 찾는다.
실제값과 예측값의 차이가 작아지게 만든다.
이제 모델을 학습한다는 말이 조금 다르게 들렸다. 단순히 fit()을 호출하는 것이 아니라, 내부적으로는 loss를 줄이는 방향으로 파라미터를 조정하는 과정이었다.
5. Loss Function은 이상과 현실의 차이를 숫자로 만든다
모델이 잘하고 있는지 보려면 기준이 필요하다. 이때 나오는 것이 Loss Function 또는 Cost Function이다. 실제값과 예측값의 차이를 계산해서, 그 차이가 얼마나 큰지를 숫자로 표현한다.
회귀 문제에서는 보통 실제값과 예측값의 차이를 본다.
error = 실제값 - 예측값
그런데 그냥 error를 모두 더하면 양수와 음수가 서로 상쇄될 수 있다. 편차의 평균이 0이 되는 것과 비슷하다. 그래서 제곱을 사용한다.
Loss = Σ(실제값 - 예측값)²
강의에서는 slope를 0.64로 고정하고, intercept b를 바꿔가며 실제값과 예측값의 차이 제곱합을 계산하는 예시가 나왔다. b가 바뀔 때마다 전체 error가 달라지고, 결국 error의 제곱합이 가장 작아지는 b를 찾는 것이 목표였다.
이게 조금 감이 왔던 이유는, 처음에는 모델의 “정답”을 바로 구하는 느낌이었는데 실제로는 그렇지 않았기 때문이다. 현실 데이터는 완벽하게 맞는 함수가 없을 수 있고, 그래서 “완벽한 정답”이 아니라 오차를 가장 작게 만드는 파라미터를 찾는다.
6. Gradient Descent는 파라미터를 하나씩 찍어보는 노가다를 줄이기 위한 방법이었다
처음에는 intercept 값을 여러 개 바꿔가며 Loss를 계산할 수 있다. 하지만 파라미터가 하나면 몰라도, slope와 intercept를 동시에 봐야 하고, feature가 많아지면 찾아야 할 값도 많아진다. 이걸 전부 하나씩 찍어보는 것은 너무 비효율적이다.
그래서 나온 것이 Gradient Descent였다. 강의록에서도 여러 intercept에 대해 오차제곱합을 구해 가장 작은 값을 찾는 방식은 노가다에 가깝고, 이런 경우에 Gradient Descent가 등장한다고 설명되어 있었다.
Gradient Descent의 핵심은 현재 위치에서 기울기를 보고, loss가 줄어드는 방향으로 조금 이동하는 것이다.
next = current - learning_rate × gradient
기울기가 음수라면 loss가 줄어드는 방향은 오른쪽일 수 있고, 기울기가 양수라면 왼쪽일 수 있다. 그래서 현재 위치의 미분값을 그대로 쓰는 것이 아니라, 반대 방향으로 이동한다. 이때 learning_rate는 한 번에 얼마나 이동할지 정하는 값이다.
learning_rate가 너무 작으면
→ 너무 느리게 움직이거나 local minimum에 갇힐 수 있음
learning_rate가 너무 크면
→ 최적 지점을 지나치거나 튈 수 있음
여기서 20일차에 배웠던 gradient가 다시 연결됐다. 입력 변수가 하나면 미분값 하나로 이동 방향을 정하지만, 파라미터가 여러 개면 각 파라미터에 대한 편미분을 모아야 한다. 이게 gradient vector였다.
7. 데이터 분리는 모델 평가를 위해 필요했다
모델을 학습할 때는 데이터를 나누는 것도 중요했다. train data는 모델이 학습하는 데 사용하고, validation data는 모델을 조정하거나 중간 평가하는 데 쓰고, test data는 최종 평가에 사용한다.
Training set
= 모델 학습용 데이터
Validation set
= 모델 조정 및 검증용 데이터
Test set
= 최종 평가용 데이터
강의록에서도 Test Set은 절대로 학습에 사용되면 안 된다고 강조되어 있었고, Overfitting을 피하기 위해 train/validation/test를 나누어 사용한다고 정리되어 있었다.
이 부분은 모의고사와 수능 비유로 이해됐다. train data만 계속 맞추면 그 데이터에는 잘 맞을 수 있지만, 새로운 test data에서는 성능이 떨어질 수 있다. 즉 모델은 train data를 외우는 것이 아니라, 새로운 데이터에도 잘 작동해야 한다.
8. 회귀와 분류는 Y의 성격에 따라 달라졌다
지도학습에서는 Y가 명확히 있는 데이터를 다룬다. 이때 Y가 어떤 형태인지에 따라 회귀와 분류로 나뉜다.
회귀
= 숫자 값을 예측
예: 주택 가격, 주가, 매출
분류
= 정해진 클래스 중 하나를 예측
예: 상승/하락, 스팸/정상, 암/정상
같은 주가 데이터라도 질문을 어떻게 잡느냐에 따라 달라진다. “삼성전자 종가가 얼마일까?”라고 하면 회귀 문제다. 반면 “삼성전자 주가가 오를까, 내릴까?”라고 하면 분류 문제다.
분류도 다시 나뉜다.
이진 분류
= 두 가지 중 하나
예: 스팸 / 정상
다중 클래스 분류
= 여러 클래스 중 하나
예: 0~9 숫자 분류
다중 레이블 분류
= 하나의 샘플에 여러 라벨이 동시에 가능
예: 사진 안에 고양이, 집, 나무가 함께 있음
강의록에서도 회귀는 실제 숫자를 예측하는 모델이고, 분류는 이진분류, 다중 클래스 분류, 다중 레이블 분류로 나눌 수 있다고 정리되어 있었다.
9. 회귀 평가는 실제값과 예측값의 차이를 본다
회귀 문제에서는 예측값과 실제값의 차이를 기준으로 모델을 평가한다. 대표적으로 MSE, RMSE 같은 지표가 있다.
MSE = 평균 제곱 오차
RMSE = MSE에 root를 씌운 값
MSE는 실제값과 예측값의 차이를 제곱한 뒤 평균을 낸다. 제곱을 하기 때문에 큰 오차에 더 민감하게 반응한다. RMSE는 MSE에 루트를 씌워서 원래 단위와 더 가까워지게 만든다. 강의록에서도 MSE는 오차를 제곱해서 크게 측정하는 경향이 있고, RMSE는 그 결과에 root를 처리한 지표라고 설명되어 있었다.
MSE
= 평균((실제값 - 예측값)²)
RMSE
= sqrt(MSE)
이 부분은 loss function과 평가 지표가 연결되면서도 약간 다르다는 점이 남았다. 학습 과정에서 loss를 줄이지만, 최종적으로 모델을 비교할 때는 목적에 맞는 평가 지표를 선택해야 한다.
10. 분류 평가는 Confusion Matrix에서 시작했다
분류 문제에서는 단순히 맞았는지 틀렸는지만 보면 부족할 수 있다. 특히 데이터가 한쪽으로 치우쳐 있으면 accuracy가 높은데도 별로 쓸모 없는 모델이 될 수 있다.
예를 들어 연체 예측에서 대부분의 사람이 연체를 하지 않는다면, 모델이 전부 “연체 안 함”이라고 찍어도 accuracy는 높게 나올 수 있다. 하지만 실제로 찾고 싶은 연체 고객을 못 찾으면 모델의 목적에는 맞지 않는다.
그래서 Confusion Matrix가 중요했다.
예측 Positive 예측 Negative
실제 Positive TP FN
실제 Negative FP TN
여기서 단순히 맞았다/틀렸다만 보는 것이 아니라, 어떻게 틀렸는지를 본다. 실제 positive를 negative로 예측한 것인지, 실제 negative를 positive로 예측한 것인지에 따라 문제의 심각도가 달라진다. 강의에서도 Confusion Matrix는 분류 모델에서 자주 묻기 좋은 기본 개념이라고 언급되었다.
11. Accuracy만 보면 안 되는 이유: 스팸과 암 진단 예시
스팸 메일 분류와 암 진단 예시는 헷갈리기 쉬우면서도 제일 기억에 남았다. 둘 다 이진 분류지만, 줄여야 하는 오류가 다르다.
스팸 분류에서는 실제 정상 메일을 스팸으로 잘못 분류하는 것이 더 큰 문제가 될 수 있다. 중요한 계약 메일이 스팸함으로 들어가면 사용자가 큰 피해를 볼 수 있기 때문이다. 이 경우에는 모델이 스팸이라고 한 것 중 진짜 스팸의 비율, 즉 precision이 중요해진다.
Precision
= TP / (TP + FP)
반대로 암 진단에서는 실제 암 환자를 정상이라고 놓치는 것이 더 치명적이다. 정상인데 암이라고 잘못 진단하면 추가 검사를 통해 바로잡을 여지가 있지만, 암인데 정상이라고 판단하면 치료 시기를 놓칠 수 있다. 이 경우에는 실제 암 중에서 모델이 얼마나 잘 잡아냈는지, 즉 recall이 중요해진다.
Recall
= TP / (TP + FN)
이 부분은 “어떤 지표가 제일 좋은가?”가 아니라, **모델이 해결하려는 문제에서 어떤 오류를 더 줄여야 하는가?**를 먼저 봐야 한다는 내용이었다. 같은 이진 분류라도 스팸 분류와 암 진단은 평가 지표 선택이 달라진다.
마무리
24일차는 머신러닝을 모델 이름부터 외우기보다, 모델링이 실제로 무엇을 하는 과정인지 잡는 날이었다. 처음에는 머신러닝이 알고리즘을 고르고 돌리는 일처럼 보였지만, 다시 정리해보면 Y = f(X)에서 좋은 f를 찾고, 그 안의 파라미터를 loss가 줄어드는 방향으로 최적화하는 과정이었다.
또 모델을 잘 만들었다는 말도 단순하지 않았다. 회귀라면 실제값과 예측값의 차이를 어떻게 볼지 정해야 하고, 분류라면 accuracy만 볼지 precision이나 recall을 볼지 판단해야 했다. 특히 데이터가 불균형하거나, 틀리는 방향에 따라 리스크가 다르면 평가 지표를 다르게 선택해야 한다는 점이 크게 남았다.
전통적인 머신러닝과 딥러닝의 차이도 조금 더 현실적으로 보였다. 전통적인 머신러닝은 2D 테이블 데이터에서는 여전히 잘 작동하지만, 이미지나 영상처럼 차원과 구조가 중요한 데이터에서는 한계가 있다. 결국 어떤 모델을 쓸지는 데이터의 형태, 문제의 목적, 평가 기준을 같이 보고 결정해야 한다.
24일차는 머신러닝을 알고리즘 목록이 아니라, 데이터에 맞는 함수 형태를 고르고 loss를 줄이는 파라미터를 찾은 뒤, 문제 목적에 맞는 지표로 평가하는 흐름으로 이해한 날이었다.
'[SK플래닛] ASAC 빅데이터전문가 11기 > 학습기록' 카테고리의 다른 글
| [SK플래닛] ASAC 빅데이터전문가 11기 | 26일차 (0) | 2026.05.26 |
|---|---|
| [SK플래닛] ASAC 빅데이터전문가 11기 | 25일차 (1) | 2026.05.22 |
| [SK플래닛] ASAC 빅데이터전문가 11기 | 22일차 (0) | 2026.05.20 |
| [SK플래닛] ASAC 빅데이터전문가 11기 | 21일차 (0) | 2026.05.19 |
| [SK플래닛] ASAC 빅데이터전문가 11기 | 20일차 (0) | 2026.05.18 |
