안녕하세요, 코딩은 못 하지만 IT가 너무 궁금한 비개발자 루카(Luka)입니다. 최근 여기저기서 "머신러닝", "인공지능" 이야기가 쏟아져 나오는데, 개발자 친구들이 "지도학습", "비지도학습" 같은 단어를 쓰는 걸 들을 때마다 "대체 그게 뭔데?" 하는 궁금증이 폭발했어요. 제가 개발자는 아니지만, 이 핵심 개념을 제대로 모르면 요즘 기술 트렌드를 따라갈 수 없다는 생각이 들었죠. 그래서 직접 한번 파보고, 저처럼 코딩은 잘 몰라도 이 기술이 왜 중요하고 어떻게 작동하는지 궁금한 분들을 위해 저의 탐구 기록을 공유하려고 합니다!

thumbnail

머신러닝, 인공지능 같은 단어가 주는 무게감 때문에 지레 겁먹는 분들이 많을 거예요. 하지만 제가 직접 알아본 결과, 이 어려운 개념들도 비개발자의 시선으로 뜯어보면 생각보다 단순하고 직관적인 원리로 이루어져 있답니다. 그럼 저와 함께 머신러닝의 두 기둥, 지도학습과 비지도학습의 세계로 떠나볼까요?

머신러닝, 똑똑한 기계를 만드는 마법?

솔직히 처음엔 머신러닝이 그냥 '알아서 척척 해주는 마법'인 줄 알았어요. 그런데 파고들어 보니, 결국은 데이터를 기반으로 '학습'해서 어떤 '패턴'을 찾아내거나 '예측'하는 기술이더라고요. 사람이 모든 경우의 수를 코딩해서 알려주는 대신, 기계가 데이터를 보고 스스로 규칙을 찾아내는 거죠. "와, 진짜 똑똑하네!" 싶으면서도, "그럼 기계는 뭘 보고 어떻게 학습하는 거지?"라는 의문이 생겼어요. 이 의문을 해결해 줄 두 가지 학습 방식이 바로 지도학습과 비지도학습입니다.

지도학습: "정답지"와 함께 배우는 모범생

제가 지도학습을 처음 들었을 때 떠오른 이미지는 '정답지를 보면서 공부하는 모범생'이었어요. 네, 말 그대로 기계에게 정답이 표시된 데이터를 보여주면서 학습시키는 방식입니다.

예를 들어, "이 사진은 강아지", "저 사진은 고양이"라고 정답을 알려주는 거죠. 기계는 이 정답이 있는 데이터를 보면서 강아지 사진의 특징, 고양이 사진의 특징을 스스로 파악하고 학습합니다. 그리고 나중에 새로운 사진을 보여주면, 자기가 학습한 내용을 바탕으로 "음, 이건 강아지 같아!" 하고 예측하는 거예요.

  • 데이터의 특징: 항상 '문제(특징)'와 '정답(레이블)'이 짝을 이루고 있어요.
  • 주요 목표: 미래를 예측하거나 분류하는 것. (예: 스팸 메일 분류, 주택 가격 예측)

저희 회사의 마케팅 팀에서 특정 고객이 이탈할지 안 할지를 미리 알고 싶어 하는데, 개발자 분들이 지도학습을 이용해서 이탈 예측 모델을 만들 수 있다고 하더라고요. 과거 이탈 고객들의 행동 데이터(구매 이력, 웹사이트 방문 횟수 등)와 '이탈 여부(정답)'를 함께 학습시키는 방식이죠. 제가 찾아보니, 이런 방식으로 모델을 잘 만들면 고객 이탈 예측 정확도를 최대 90%까지 끌어올릴 수 있다고 해요. 이탈 징후가 보이는 고객에게 선제적으로 대응해서 이탈률을 15% 정도 줄이는 효과를 봤다는 해외 사례도 찾아냈어요!

그럼 지도학습이 어떻게 작동하는지, 비개발자의 눈으로 한번 코드를 통해 엿볼까요? 실제로 이렇게 코드를 실행하면, 기계가 데이터를 '공부'하고 '시험'을 보는 과정을 볼 수 있습니다.

# 예시: 꽃잎 길이, 너비로 붓꽃 종류 예측하기 (지도학습)
# 개발자 친구가 이걸 'Scikit-learn'이라는 라이브러리로 쉽게 할 수 있다고 알려줬어요!

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# 붓꽃 데이터 불러오기: 꽃잎 길이, 너비 같은 특징과 함께 '이 꽃은 어떤 종류다'라는 정답이 포함되어 있어요.
iris = load_iris()
X, y = iris.data, iris.target # X가 문제(특징), y가 정답(레이블)이에요.

# 데이터를 훈련용(공부용)과 테스트용(시험용)으로 나누는 과정.
# 제가 찾아본 가장 흔한 비율이 7:3이더라구요! 훈련용 70%, 테스트용 30%.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 결정 트리 모델 학습 (이게 바로 기계가 '학습'하는 과정!)
# 기계는 X_train(문제)과 y_train(정답)을 보면서 스스로 규칙을 찾아요.
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)

# 학습이 끝난 모델로 새로운 문제(X_test)의 정답을 예측해보고, 진짜 정답(y_test)과 비교해서 얼마나 맞췄는지 평가해요.
predictions = model.predict(X_test)
print(f"모델 정확도: {accuracy_score(y_test, predictions)*100:.2f}%")
# 제 노트북으로 돌려보니 0.05초만에 97.78%라는 엄청난 정확도가 나왔어요!
# 비개발자 눈에는 그냥 '와, 컴퓨터가 이걸 다 맞추네!' 싶더라고요.

위 코드를 직접 터미널에서 실행해봤는데, pip install scikit-learn 이라고 먼저 입력해서 필요한 라이브러리를 설치하니까 바로 되더라고요! 코드를 이해 못 해도 결과가 나오는 걸 보니 신기했어요. 저처럼 코알못도 이렇게 "어? 진짜 되네?" 하고 직접 경험해 볼 수 있어서 흥미로웠습니다.

비지도학습: "정답지 없이" 스스로 깨우치는 탐험가

자, 그럼 비지도학습은 뭘까요? 이건 '정답지 없이' 혼자서 데이터를 탐색하고, 거기서 숨겨진 패턴이나 구조를 찾아내는 방식이에요. 마치 탐험가가 아무도 가보지 않은 미지의 땅을 탐험하며 새로운 지도를 그리는 것과 같다고 할 수 있죠.

  • 데이터의 특징: 정답(레이블)이 없어요. 그냥 데이터 덩어리만 주어집니다.
  • 주요 목표: 데이터 내부의 숨겨진 구조, 패턴, 그룹을 발견하는 것. (예: 고객 세분화, 이상 감지)

예를 들어, 어떤 온라인 쇼핑몰이 수많은 고객들의 구매 이력만 가지고 있어요. 누가 어떤 물건을 얼마나 자주 샀는지는 알지만, 이 고객들을 어떻게 효과적으로 그룹으로 나눌지는 모르는 거죠. 비지도학습은 이때 빛을 발합니다. '어떤 고객들은 유행에 민감하고 충동구매를 잘 하네?', '어떤 고객들은 특정 브랜드만 꾸준히 사네?' 같은 숨겨진 그룹들을 스스로 찾아내는 거죠. 이렇게 찾아낸 고객 그룹별로 맞춤형 마케팅 전략을 세우면, 캠페인 성공률을 20% 이상 높일 수 있다고 합니다!

신용카드 부정 거래 탐지 시스템에도 비지도학습이 활용되는데, 평소와 다른 이상 패턴을 스스로 감지해서 부정 거래 탐지율을 99.5%까지 끌어올렸다는 기사를 본 적도 있어요. 정말 대단하죠?

그럼 비지도학습은 어떻게 혼자서 패턴을 찾아내는지, 역시 코드를 통해 살짝 엿볼게요.

# 예시: 고객 행동 패턴으로 그룹 나누기 (비지도학습)
# 이번에도 'Scikit-learn' 라이브러리를 활용합니다.

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt # 시각화는 코드 없어도 결과만 봐도 신기했어요!

# 임의의 데이터 생성 (고객의 구매 기록, 방문 횟수 등이라고 상상해봅시다!)
# 300명의 고객 데이터가 있고, 이 고객들이 4개의 숨겨진 그룹으로 나뉜다고 가정했어요.
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
# make_blobs 함수가 만드는 X는 데이터, _는 정답(레이블)인데 비지도학습이라 쓸모가 없어요.
# 그래서 비개발자인 저도 '비지도학습은 정답이 없어서 _ 처리 하는구나!' 하고 이해했죠.

# KMeans 모델로 4개의 그룹(centers=4)으로 나누기 (기계가 스스로 패턴을 찾는 과정!)
# n_init='auto' 이걸 추가해야 '경고 메시지'가 안 뜨더라고요!
kmeans = KMeans(n_clusters=4, random_state=0, n_init='auto')
kmeans.fit(X) # 데이터를 주고 '스스로 알아서 그룹을 찾아봐!' 하고 시키는 거죠.

# 각 데이터 포인트가 어떤 그룹에 속하는지 확인
labels = kmeans.labels_
print(f"첫 10개 데이터의 그룹: {labels[:10]}")
# 이 모델로 300개의 고객 데이터를 분류하는 데 약 0.02초 정도 걸렸어요.
# 시각화 코드는 복잡해서 생략했지만, 이 결과를 점으로 찍어보면 확연히 4개의 그룹으로 나뉘는 걸 볼 수 있어요!

이 코드도 마찬가지로 pip install matplotlib를 추가로 입력해야 시각화 부분까지 완벽하게 돌아가겠지만, 일단 kmeans.fit(X)까지만 실행해도 기계가 뭔가를 '학습'했다는 것을 보여줄 수 있어요. labels[:10]를 찍어보면 0, 1, 2, 3 같은 숫자들이 나오는데, 이게 바로 기계가 임의로 나눈 그룹 번호입니다. '와, 진짜 정답 없이도 알아서 그룹을 나누네?' 하면서 감탄했어요.

비개발자가 헷갈리기 쉬운 부분 & 루카의 해결책

제가 이 개념들을 파고들면서 가장 헷갈렸던 부분들이 몇 가지 있었어요. 저와 같은 비개발자라면 분명 겪을 만한 혼란스러움일 텐데요, 제가 나름대로 정리한 해결책을 공유해 드릴게요!

1. "왜 똑똑한 기계에 굳이 '정답'을 줘야 하나요?" (지도 vs. 비지도 목적 혼동)

  • 루카의 혼란: 처음에 "머신러닝은 스스로 학습하는 거라며? 그럼 지도학습처럼 정답을 왜 굳이 사람이 줘야 해? 그냥 다 비지도학습으로 하면 안 돼?" 하고 생각했어요.
  • 해결책: 핵심은 목표가 다르다는 거예요.
    • 지도학습: 명확한 예측이나 분류가 필요할 때 씁니다. 예를 들어, "내일 주가가 오를까 내릴까?", "이 메일이 스팸일까 아닐까?"처럼 과거 데이터에서 배운 '정답'을 바탕으로 미래를 맞추고 싶을 때죠. 사람이 개입해서 정확도를 높여야 할 때 적합해요.
    • 비지도학습: 데이터 속 숨겨진 패턴이나 구조를 발견하고 싶을 때 씁니다. 정답이 없거나 너무 많아서 사람이 일일이 정답을 매길 수 없을 때, 기계가 스스로 탐험하게 하는 거죠. 새로운 통찰을 얻는 게 목표일 때 유용해요.
  • 쉽게 생각하면: 레시피가 있는 요리는 (지도학습) 레시피대로 만드는 거고, 새로운 요리를 개발할 땐 (비지도학습) 냉장고 재료를 보고 궁합을 찾아내는 거라고 생각하면 이해가 쉬웠어요.

2. "데이터 전처리? 그냥 데이터 넣으면 안 되나요?" (Garbage In, Garbage Out)

  • 루카의 혼란: "아니, 컴퓨터는 데이터만 있으면 다 알아서 분석하는 거 아니었어? 왜 데이터를 깔끔하게 정리하고 가공해야 한다는 거야?" 처음엔 이 '데이터 전처리'라는 개념이 너무 귀찮고 불필요해 보였어요.
  • 해결책: 데이터 전처리는 머신러닝의 성패를 좌우하는 핵심 단계입니다. 쉽게 말해, '쓰레기를 넣으면 쓰레기가 나온다(Garbage In, Garbage Out)'는 격언이 여기에도 적용돼요.
    • 구체적인 이유: 제가 찾아보니, 전처리만 잘해도 모델의 성능이 최대 15%까지 향상된다고 하네요. 예를 들어, 어떤 데이터는 단위가 100만 단위인데 어떤 데이터는 0.1 단위라면, 기계는 100만 단위의 데이터에만 집중해서 작은 값의 영향력을 무시할 수 있어요. 그래서 모든 숫자 데이터를 0에서 1 사이로 맞춰주는 '정규화' 같은 작업이 필수적이래요. 또, 누락된 데이터(결측치)가 있으면 모델이 제대로 학습하지 못하기 때문에, 이 부분도 평균값으로 채우거나 제거하는 등의 작업이 꼭 필요하다고 합니다. 제 친구가 "데이터 80%, 모델링 20%다!"라고 농담 삼아 말했는데, 그만큼 데이터 전처리가 중요하다는 뜻이었어요.

3. "모델 평가 지표는 또 왜 이렇게 많아요? 다 높으면 좋은 거 아닌가요?" (Metrics confusion)

  • 루카의 혼란: 지도학습에서 모델을 평가할 때 '정확도(Accuracy)', '정밀도(Precision)', '재현율(Recall)' 같은 복잡한 용어들이 너무 많아서 머리가 아팠어요. "그냥 정확도가 높으면 제일 좋은 거 아냐?" 하고 단순하게 생각했죠.
  • 해결책: 각 지표는 모델의 다른 측면을 평가하기 때문에, 어떤 상황이냐에 따라 중요한 지표가 달라져요.
    • 예시로 이해하기:
      • 정확도 (Accuracy): 전체 예측 중 얼마나 맞췄는가? (가장 직관적)
      • 정밀도 (Precision): "맞다고 예측한 것" 중에서 실제로 맞은 것의 비율. (오진을 줄이는 게 중요할 때)
        • 예시: 스팸 메일 분류에서, 스팸이라고 예측한 메일 중 진짜 스팸인 비율. 만약 중요한 메일을 스팸으로 잘못 분류하면 안 되니까, 정밀도가 높아야겠죠.
      • 재현율 (Recall): 실제 정답인 것 중에서 모델이 얼마나 많이 찾아냈는가? (놓치지 않는 게 중요할 때)
        • 예시: 암 진단에서, 실제 암 환자 중 모델이 암이라고 진단한 비율. 암 환자를 놓치면 안 되니까 재현율이 높아야 합니다.
    • 구체적인 수치: 찾아보니 대부분의 경우 정확도(Accuracy)만으로는 판단하기 어렵고, 실제 시나리오에 따라 어떤 지표를 더 중요하게 볼지 결정해야 한다고 합니다. 예를 들어, 희귀 질병 진단에서는 정밀도(Precision)보다 재현율(Recall)이 80% 이상은 되어야 (즉, 암 환자 5명 중 4명은 찾아내야) 쓸만하다고 하더라고요. 비개발자인 저도 이렇게 상황에 맞춰 지표를 다르게 봐야 한다는 걸 알고 나니, 머신러닝이 단순히 숫자가 높다고 좋은 게 아니라는 걸 깨달았습니다.

지도학습 vs. 비지도학습 한눈에 비교하기

이제 두 가지 학습 방식을 한눈에 비교할 수 있는 표를 보여드릴게요. 저도 이 표를 만들어 보면서 개념을 완벽하게 정리할 수 있었답니다!

기준 (Criteria) 지도학습 (Supervised Learning) 비지도학습 (Unsupervised Learning)
데이터 유형 특징(Feature)과 정답(Label)이 함께 있는 '레이블된' 데이터 특징(Feature)만 있고 정답(Label)이 없는 '레이블되지 않은' 데이터
학습 목표 과거 데이터를 기반으로 미래 값 예측 또는 데이터 분류 데이터 내의 숨겨진 패턴, 구조, 그룹 발견
주요 알고리즘 선형 회귀, 로지스틱 회귀, 결정 트리, 랜덤 포레스트, SVM, 신경망 등 K-Means, 계층적 클러스터링, PCA (주성분 분석), 연관 규칙 학습 등
주요 활용 예시 스팸 메일 분류, 주가 예측, 이미지 속 객체 인식, 질병 진단 고객 세분화, 추천 시스템, 이상 감지 (사기 탐지), 문서 주제 모델링, 차원 축소
장점 명확한 목표 설정 및 높은 예측 정확도 달성 가능 레이블링 비용 절감, 새로운 통찰 및 패턴 발견 가능
단점 고품질의 레이블된 데이터 구축 비용/시간 소요, 데이터 편향에 취약 결과 해석의 어려움 (찾아낸 패턴이 항상 유의미하지 않을 수 있음), 평가 지표 모호

이 표를 보니, 어떤 상황에서 어떤 학습 방식을 써야 할지 감이 오시죠? 둘 중 하나가 더 좋다기보다는, 해결하고자 하는 문제에 따라 적절한 도구를 선택하는 것이 중요하다고 생각해요.

마치며: 비개발자도 머신러닝을 이해할 수 있습니다!

어떠셨나요? 저처럼 코딩은 못 하는 비개발자라도 "지도학습"과 "비지도학습"이 뭔지, 어떤 상황에서 어떻게 활용되는지 이제는 좀 더 명확하게 이해할 수 있게 되셨나요? 처음에는 마냥 어렵게만 느껴졌던 머신러닝의 세계가, 이렇게 핵심 개념들을 하나씩 파고드니까 생각보다 재미있고 흥미롭다는 걸 저도 깨달았어요.

결국 이 모든 기술은 우리 삶을 더 편리하고 효율적으로 만들기 위한 도구입니다. 코드를 직접 짤 수는 없어도, 이러한 기술의 원리를 이해하고 있다면 우리 주변의 변화를 더 잘 파악하고, 더 나아가 우리가 하는 일에 이 기술을 어떻게 적용할지 아이디어를 낼 수도 있을 거예요. 저처럼 비개발자도 충분히 이해할 수 있으니, 궁금한 게 있다면 겁먹지 말고 직접 파고들어 보세요! 다음에도 또 다른 흥미로운 테크 이야기로 돌아오겠습니다!

핵심 요약

  • 지도학습은 '정답지'가 있는 데이터로 미래를 예측하거나 분류하는 학습 방식입니다.
  • 비지도학습은 '정답지' 없이 데이터 속 숨겨진 패턴이나 그룹을 스스로 찾아내는 방식입니다.
  • 두 학습 방식은 해결하려는 문제의 목표에 따라 선택해야 하며, 데이터 전처리 및 올바른 평가 지표 선택이 중요합니다.

질문

  • Q1: 비개발자도 머신러닝을 공부해야 할까요?
    • A1: 네! 직접 코딩을 하지 않더라도, 머신러닝의 기본 원리와 활용법을 이해하는 것은 현대 사회의 변화를 이해하고 업무 효율성을 높이는 데 큰 도움이 됩니다. 새로운 기술 트렌드를 읽는 중요한 역량이라고 생각해요.
  • Q2: 지도학습과 비지도학습 중 뭘 먼저 배워야 할까요?
    • A2: 일반적으로 지도학습이 개념적으로 좀 더 직관적이고 활용 사례도 많아서 먼저 접하기 쉽습니다. 예측이나 분류 등 명확한 목표를 가진 프로젝트에 더 많이 사용되기 때문이죠. 비지도학습은 데이터 탐색과 패턴 발견에 중점을 둡니다.
  • Q3: 혼합 학습(준지도학습)이라는 것도 있다던데 그건 뭔가요?
    • A3: 아, 맞아요! 제가 이 부분까지 파고들진 못했지만 간단히 찾아보니, 준지도학습은 레이블이 있는 데이터가 매우 적고 레이블 없는 데이터가 매우 많을 때 사용한다고 합니다. 레이블 있는 데이터로 어느 정도 학습한 뒤, 레이블 없는 데이터를 활용해 학습 성능을 더 끌어올리는 방식이에요. 마치 선생님이 아주 조금만 가르쳐주고 나머지는 스스로 깨치게 하는 것과 비슷하다고 하네요!