타이타닉 예제로 배우는 머신러닝 튜토리얼

1912년, 영광스러운 첫 항해를 나섰던 초호화 여객선 타이타닉호. 하지만 그 영광은 짧았고, 차가운 북대서양에 가라앉으며 수많은 사람들의 안타까운 희생을 낳았어요. 타이타닉호의 비극은 단순한 역사적 사건을 넘어, 오늘날까지도 우리에게 많은 교훈을 남기고 있죠. 그런데 만약, 타이타닉호에 타고 있던 승객들의 정보를 가지고 누가 살아남고 누가 희생되었을지 미리 예측할 수 있다면 어떨까요? 마치 영화 속 한 장면처럼 말이에요! 이번 튜토리얼에서는 바로 이 흥미로운 질문에 답하기 위해, 실제 타이타닉호 탑승객 데이터를 활용하여 머신러닝의 세계로 여러분을 안내할 거예요. 머신러닝을 전혀 몰라도 괜찮아요. 타이타닉호의 이야기를 따라가다 보면, 데이터 속 숨겨진 패턴을 발견하고 예측하는 짜릿함을 느끼게 될 테니까요!

타이타닉 예제로 배우는 머신러닝 튜토리얼
타이타닉 예제로 배우는 머신러닝 튜토리얼

 

🚢 타이타닉 데이터셋 이해하기

우리가 탐험할 보물 지도는 바로 '타이타닉 데이터셋'이에요. 이 데이터셋은 타이타닉호에 탑승했던 승객들에 대한 다양한 정보들을 담고 있답니다. 각 승객은 고유한 특징을 가지고 있고, 이 특징들이 그들의 생존 여부에 어떤 영향을 미쳤는지 알아보는 것이 머신러닝의 핵심 목표가 될 거예요. 데이터셋은 보통 CSV(Comma Separated Values) 파일 형태로 제공되며, 여기에는 승객의 등급(Pclass), 이름(Name), 성별(Sex), 나이(Age), 동반 형제자매 수(SibSp), 부모/자녀 수(Parch), 탑승권 번호(Ticket), 요금(Fare), 승선 항구(Embarked) 등 다양한 정보가 포함되어 있어요. 또한, 가장 중요한 '생존 여부(Survived)'라는 타겟 변수가 있죠. 0은 사망, 1은 생존을 의미해요. 이 데이터를 가지고 우리는 누가 살아남을 가능성이 높았는지, 혹은 낮았는지에 대한 패턴을 학습하게 될 거예요.

 

타이타닉호는 당시 최고 수준의 안전 설비를 갖춘 것으로 알려졌지만, 예상치 못한 빙산과의 충돌로 인해 참사가 발생했어요. 이 데이터셋은 이러한 역사적 사건을 데이터의 형태로 되살려, 과학적인 분석을 가능하게 한다는 점에서 큰 의미를 가져요. 각 승객의 정보는 단순히 숫자로 이루어진 것이 아니라, 그 당시 사회 계층, 성별 역할, 가족 관계 등 다양한 사회적 맥락을 내포하고 있답니다. 예를 들어, 'Pclass' 정보는 당시 승객들이 탑승했던 선실 등급을 나타내는데, 이는 곧 사회경제적 지위와 직결되는 중요한 정보였어요. 높은 등급의 승객들은 일반적으로 더 안전한 공간에 접근할 수 있었을 가능성이 높았고, 이것이 생존율에 영향을 미쳤을 수도 있죠. 또한, 'Sex' 정보는 당시 구조 상황에서 여성과 어린이를 우선적으로 구조했던 사회적 관념이 반영되었을 수 있어요. 이처럼 데이터 하나하나에는 당시의 사회상과 인간적인 이야기가 담겨 있답니다.

 

데이터셋을 처음 접할 때는 모든 칼럼(Column)의 의미를 명확히 이해하는 것이 중요해요. 'SibSp'와 'Parch'는 둘 다 가족 구성원을 나타내는 정보이지만, 'SibSp'는 형제자매를, 'Parch'는 부모나 자녀를 의미하죠. 이 둘을 합쳐 '가족 수(FamilySize)'라는 새로운 변수를 만들어 분석에 활용할 수도 있어요. 'Fare'는 승객이 지불한 요금으로, 이 역시 탑승 등급이나 좌석 위치와 관련이 깊을 것으로 예상할 수 있어요. 'Embarked'는 승객이 어느 항구에서 배에 탑승했는지를 나타내는데, 각 항구마다 승객의 구성 비율이 다를 수 있으므로 생존율에 미묘한 영향을 줄 수도 있답니다. 이 모든 정보들을 종합적으로 살펴보면서, 어떤 요인이 생존에 가장 결정적인 영향을 미쳤을지 가설을 세우고 이를 데이터로 검증해 나가는 과정이 바로 데이터 분석의 재미라고 할 수 있어요. 이러한 탐색적 데이터 분석(Exploratory Data Analysis, EDA)은 머신러닝 모델을 만들기 전 필수적인 단계랍니다.

 

🚢 타이타닉 데이터셋 구성 요소

변수명 설명 예시 값
Survived 생존 여부 (0: 사망, 1: 생존) 0 또는 1
Pclass 좌석 등급 (1: 1등석, 2: 2등석, 3: 3등석) 1, 2, 3
Sex 성별 (male: 남성, female: 여성) male, female
Age 나이 10.5, 35, NaN (결측치)
SibSp 형제자매/배우자 수 0, 1, 2
Parch 부모/자녀 수 0, 1, 3
Ticket 탑승권 번호 PC 17599
Fare 요금 7.25, 71.2833
Embarked 승선 항구 (C=Cherbourg, Q=Queenstown, S=Southampton) S, C, Q, NaN
🚀 더 깊이 알고 싶으신가요? 데이터셋 탐험 시작하기

🚂 머신러닝 기본 개념

머신러닝, 이름만 들으면 어렵게 느껴질 수 있지만 사실 우리 생활 곳곳에 숨어있답니다. 스마트폰에서 얼굴을 인식하거나, 온라인 쇼핑몰에서 추천 상품을 보여주는 것 모두 머신러닝 기술 덕분이에요. 머신러닝은 컴퓨터가 데이터를 통해 스스로 학습하고, 특정 작업을 수행하는 방법을 익히는 기술을 말해요. 마치 어린아이가 경험을 통해 세상을 배우는 것과 비슷하죠. 타이타닉 데이터셋을 가지고 우리는 '지도 학습(Supervised Learning)'이라는 머신러닝의 한 분야를 사용하게 될 거예요. 지도 학습은 정답(레이블)이 있는 데이터를 가지고 모델을 학습시키는 방식이에요. 우리에게는 승객의 '생존 여부(Survived)'가 바로 이 정답이 되겠죠. 컴퓨터는 수많은 승객 데이터와 그들의 생존 여부를 비교하며, 어떤 특징을 가진 승객이 살아남았는지, 어떤 특징을 가진 승객이 희생되었는지를 학습해요.

 

머신러닝 모델은 크게 '분류(Classification)' 모델과 '회귀(Regression)' 모델로 나눌 수 있어요. 타이타닉 생존 예측 문제처럼, 결과를 명확하게 두 가지 범주(생존/사망)로 나누는 것은 '분류' 문제에 해당해요. 만약 예측하려는 결과가 연속적인 숫자, 예를 들어 주택 가격이나 내일의 기온과 같이 특정 범위 안의 어떤 값이든 될 수 있다면 그것은 '회귀' 문제라고 불러요. 이번 튜토리얼에서는 생존 여부를 예측하는 분류 문제를 다루게 될 거예요. 분류 모델에는 로지스틱 회귀(Logistic Regression), 결정 트리(Decision Tree), 랜덤 포레스트(Random Forest), 서포트 벡터 머신(Support Vector Machine, SVM), 신경망(Neural Network) 등 다양한 알고리즘이 있답니다. 각 알고리즘은 데이터를 처리하고 예측을 수행하는 방식이 조금씩 다르기 때문에, 문제의 특성과 데이터의 성격에 맞춰 적절한 알고리즘을 선택하는 것이 중요해요.

 

모델을 훈련시킨다는 것은, 컴퓨터가 데이터 속에서 패턴을 찾아내도록 하는 과정이에요. 이 과정에서 '학습 데이터(Training Data)'와 '테스트 데이터(Test Data)'를 구분하는 것이 매우 중요해요. 학습 데이터는 모델을 훈련시키는 데 사용되고, 테스트 데이터는 훈련된 모델이 얼마나 정확하게 예측하는지를 평가하는 데 사용된답니다. 마치 시험을 보기 전에 공부하는 것과, 실제 시험에서 실력을 발휘하는 것의 차이와 같다고 볼 수 있어요. 만약 테스트 데이터를 학습에 사용하게 되면, 모델은 마치 답안지를 보고 공부한 것처럼 실제 성능보다 훨씬 좋게 나올 수 있어요. 이를 '과대적합(Overfitting)'이라고 부르는데, 이는 실제 상황에서는 제대로 작동하지 못하는 결과를 초래하죠. 따라서 데이터셋을 적절하게 분할하여 모델의 일반화 성능을 객관적으로 평가하는 것이 필수적이에요.

 

머신러닝 모델의 성능을 평가하기 위한 다양한 지표들도 존재해요. 정확도(Accuracy)는 전체 데이터 중에서 올바르게 예측한 비율을 나타내지만, 데이터가 불균형할 경우에는 신뢰도가 떨어질 수 있어요. 예를 들어, 100명의 승객 중 10명만 살아남았다면, 모든 승객이 사망했다고 예측하는 모델도 90%의 정확도를 보일 수 있죠. 이럴 때는 정밀도(Precision), 재현율(Recall), F1-점수(F1-score)와 같은 지표들을 함께 고려하여 모델의 성능을 다각적으로 평가해야 해요. 분류 문제에서는 특히 '혼동 행렬(Confusion Matrix)'을 통해 모델이 각 클래스를 얼마나 잘 예측하는지를 시각적으로 파악할 수 있답니다. 이러한 평가 지표들을 제대로 이해하고 활용하는 것이, 실제로 유용하게 작동하는 머신러닝 모델을 만드는 첫걸음이에요.

 

🚂 머신러닝 기본 용어

용어 설명
지도 학습 (Supervised Learning) 정답(레이블)이 있는 데이터를 사용하여 모델을 학습시키는 방식
분류 (Classification) 데이터를 미리 정의된 범주(클래스)로 나누는 작업 (예: 생존/사망)
회귀 (Regression) 연속적인 숫자 값을 예측하는 작업 (예: 가격 예측)
학습 데이터 (Training Data) 모델을 훈련시키는 데 사용되는 데이터
테스트 데이터 (Test Data) 훈련된 모델의 성능을 평가하는 데 사용되는 데이터
과대적합 (Overfitting) 학습 데이터에 너무 맞춰져 새로운 데이터에 대한 성능이 떨어지는 현상

📊 데이터 탐색 및 전처리

머신러닝 모델을 만들기 전에, 데이터를 깨끗하게 정리하고 이해하는 과정이 필수적이에요. 마치 요리를 하기 전에 재료를 씻고 다듬는 것처럼 말이죠. 타이타닉 데이터셋에도 결측값(Missing Values)이나 잘못된 형식의 데이터가 있을 수 있어요. 예를 들어, 'Age' 칼럼에는 일부 승객의 나이 정보가 누락되어 있을 수 있고, 'Embarked' 칼럼에는 알 수 없는 이유로 비어 있는 값이 있을 수도 있어요. 이러한 결측값들은 모델 학습에 문제를 일으킬 수 있기 때문에 적절하게 처리해야 해요. 결측값을 처리하는 방법에는 여러 가지가 있는데, 평균값이나 중앙값으로 채우거나, 해당 데이터를 삭제하거나, 혹은 더 정교한 방법으로 값을 예측하여 채울 수도 있어요. 나이의 경우, 평균 나이로 채우는 것보다 다른 특징(Pclass, Sex 등)을 이용해 예측하여 채우는 것이 더 정확할 수 있어요.

 

데이터를 더 잘 이해하기 위해 시각화(Visualization)는 아주 강력한 도구예요. 히스토그램, 산점도, 상자 그림 등을 활용하면 데이터의 분포, 변수 간의 관계, 이상치(Outlier) 등을 한눈에 파악할 수 있어요. 예를 들어, 나이와 생존율 간의 관계를 히스토그램으로 그려보면, 특정 연령대에서 생존율이 높거나 낮은 경향이 있는지 확인할 수 있어요. 성별과 생존율의 관계는 막대그래프로, 좌석 등급별 생존율은 그룹화된 막대그래프로 시각화하여 비교해 볼 수 있답니다. 이러한 시각적 탐색을 통해 우리는 어떤 변수가 생존에 큰 영향을 미치는지, 그리고 변수들 간에 어떤 상호작용이 있는지에 대한 통찰력을 얻을 수 있어요. 이는 모델 구축 시 어떤 변수를 중요하게 사용할지 결정하는 데 큰 도움을 주죠.

 

머신러닝 알고리즘은 대부분 숫자 형태의 데이터를 입력으로 받기 때문에, 문자열로 되어 있는 범주형 변수(Categorical Variables)를 숫자 형태로 변환해야 해요. 'Sex' 변수처럼 'male', 'female'로 되어 있는 경우, '0'과 '1'로 매핑하는 '원-핫 인코딩(One-Hot Encoding)'이나 '레이블 인코딩(Label Encoding)'과 같은 기법을 사용할 수 있어요. 'Embarked' 변수 역시 'S', 'C', 'Q'와 같은 항구 정보를 숫자 형태로 변환해야 하죠. 또한, 'Name'이나 'Ticket'과 같이 직접적으로 모델 학습에 사용하기 어려운 정보는 제거하거나, 이름에서 따온 호칭(Mr., Mrs., Miss.)과 같은 유용한 정보를 추출하여 새로운 피처(Feature)로 활용할 수도 있어요. 이렇게 데이터를 모델이 이해할 수 있는 형태로 가공하는 과정을 '피처 엔지니어링(Feature Engineering)'이라고 부르는데, 이는 모델의 성능을 결정하는 매우 중요한 단계랍니다.

 

데이터 전처리 과정에서 또 하나 고려할 점은 '이상치(Outlier)'예요. 예를 들어, 'Fare' 칼럼에 극단적으로 높은 값이 있다면, 이는 일부 부유층 승객의 정보일 수도 있고, 데이터 입력 오류일 수도 있어요. 이러한 이상치는 모델 학습에 왜곡을 일으킬 수 있으므로, 이를 탐지하고 적절히 처리하는 것이 필요해요. 이상치를 제거하거나, 특정 범위로 값을 제한하거나, 혹은 로그 변환과 같은 수학적 변환을 통해 분포를 안정시키는 방법을 사용할 수 있어요. 모든 전처리 과정은 데이터의 특성을 이해하고, 모델의 목적에 맞춰 신중하게 결정해야 한답니다. 결국, 좋은 머신러닝 모델은 깨끗하고 잘 정제된 데이터에서 시작한다는 점을 잊지 말아야 해요.

 

📊 데이터 탐색 및 전처리 요약

작업 주요 내용
결측값 처리 누락된 데이터(나이, 승선항구 등)를 평균/중앙값으로 채우거나, 예측하여 대체
데이터 시각화 히스토그램, 막대그래프 등으로 데이터 분포 및 변수 간 관계 파악
범주형 변수 변환 문자열 데이터를 숫자 형태로 변환 (원-핫 인코딩 등)
피처 엔지니어링 새로운 유용한 변수 생성 (가족 수, 호칭 등) 또는 불필요한 변수 제거
이상치 처리 극단적인 값을 탐지하고 제거하거나 조정

📈 모델 구축 및 훈련

이제 데이터가 준비되었으니, 본격적으로 머신러닝 모델을 만들고 훈련시킬 차례예요. 어떤 알고리즘을 선택하느냐에 따라 결과가 달라질 수 있기 때문에, 몇 가지 알고리즘을 시도해보고 가장 좋은 성능을 내는 모델을 선택하는 것이 일반적이에요. 타이타닉 생존 예측 문제에 자주 사용되는 알고리즘으로는 로지스틱 회귀, 결정 트리, 랜덤 포레스트 등이 있어요. 각각의 알고리즘은 데이터를 학습하는 방식이 독특하답니다.

 

먼저 '로지스틱 회귀'는 이름에 '회귀'가 붙었지만, 실제로는 분류 문제에 주로 사용되는 알고리즘이에요. 이 알고리즘은 각 피처(특징)에 가중치를 부여하고, 이를 통해 생존 확률을 계산해요. 간단하면서도 해석이 용이하다는 장점이 있죠. 하지만 복잡한 비선형 관계를 모델링하는 데는 한계가 있을 수 있어요.

 

다음으로 '결정 트리'는 나무와 같은 구조로 의사결정을 내리는 알고리즘이에요. 데이터를 특정 기준에 따라 계속해서 분기시키면서 최종적으로 분류를 수행해요. 마치 흐름도를 따라가는 것처럼 이해하기 쉽고, 시각화하기도 편리하죠. 하지만 결정 트리 하나만으로는 과대적합되기 쉬운 단점이 있어요.

 

'랜덤 포레스트'는 이러한 결정 트리의 단점을 보완한 알고리즘이에요. 여러 개의 결정 트리를 독립적으로 생성하고, 이들의 예측 결과를 종합(앙상블)하여 최종 예측을 수행해요. 각 트리는 무작위로 선택된 데이터와 피처를 사용하기 때문에 '랜덤'이라는 이름이 붙었답니다. 여러 모델의 지혜를 모으는 것처럼, 개별 결정 트리보다 훨씬 안정적이고 높은 성능을 보여주는 경우가 많아 타이타닉 문제에서도 좋은 성능을 기대할 수 있어요.

 

모델을 훈련시키기 위해서는 앞서 준비한 학습 데이터를 사용하여 알고리즘에 학습을 시켜야 해요. 예를 들어, 랜덤 포레스트 모델을 사용한다면, 우리는 모델에게 데이터셋을 보여주면서 "이런 특징을 가진 승객은 살았고, 저런 특징을 가진 승객은 돌아가셨어"라고 알려주는 거예요. 모델은 이 정보를 바탕으로 각 피처의 중요성을 학습하고, 생존 여부를 결정하는 규칙을 스스로 만들어 나가죠. 이 과정에서 '하이퍼파라미터(Hyperparameter)'라는 모델의 학습 방식을 조절하는 설정값들이 있어요. 예를 들어, 랜덤 포레스트에서는 트리의 개수, 각 트리의 최대 깊이 등을 조절할 수 있는데, 이 값들을 어떻게 설정하느냐에 따라 모델의 성능이 크게 달라질 수 있답니다. 최적의 하이퍼파라미터를 찾기 위해 '그리드 서치(Grid Search)'나 '랜덤 서치(Random Search)'와 같은 기법을 사용하기도 해요.

 

모델 훈련이 완료되면, 우리는 이제 테스트 데이터를 사용하여 이 모델이 얼마나 잘 작동하는지 평가해봐야 해요. 마치 모의고사를 통해 실력을 점검하는 것과 같죠. 모델은 학습 데이터에서 보지 못했던 새로운 데이터에 대해 얼마나 정확하게 생존 여부를 예측하는지를 보여줄 거예요. 이 평가 결과를 바탕으로 모델을 개선하거나, 다른 알고리즘을 시도해 볼 수 있답니다. 모델 구축과 훈련은 한 번에 끝나는 것이 아니라, 반복적인 실험과 개선 과정을 통해 최적의 모델을 찾아가는 여정이에요.

 

📈 주요 머신러닝 모델

모델 특징 장점 단점
로지스틱 회귀 분류 문제에 사용, 확률 계산 간단하고 해석 용이, 빠른 학습 복잡한 비선형 관계 모델링 어려움
결정 트리 나무 구조 기반 의사결정 이해 쉽고 시각화 용이, 피처 중요도 파악 가능 과대적합되기 쉬움
랜덤 포레스트 다수의 결정 트리 앙상블 높은 정확도, 과대적합 방지, 안정적 성능 단일 결정 트리보다 해석 어려움, 계산량 많음

🚀 모델 평가 및 개선

모델 훈련이 끝났다고 해서 바로 끝나는 것이 아니에요. 이제 우리가 만든 모델이 얼마나 똑똑한지, 그리고 어떻게 하면 더 똑똑하게 만들 수 있을지 평가하고 개선하는 과정이 남아 있답니다. 앞서 이야기했듯이, 테스트 데이터는 모델의 실제 성능을 가늠하는 중요한 척도가 돼요. 여기서 모델의 성능을 평가하기 위한 다양한 지표들을 살펴볼까요?

 

'정확도(Accuracy)'는 가장 직관적인 지표로, 전체 예측 중 맞춘 비율을 의미해요. 하지만 타이타닉 데이터처럼 생존자보다 사망자가 훨씬 많은 불균형 데이터셋에서는 정확도만으로는 모델을 제대로 평가하기 어렵다는 단점이 있죠. 예를 들어, 90%가 사망한 데이터에서 모델이 모든 승객이 사망했다고 예측하면 정확도는 90%가 나오지만, 실제로는 생존자를 하나도 예측하지 못한 셈이니까요. 이런 경우를 위해 '정밀도(Precision)'와 '재현율(Recall)'을 함께 사용해요. '정밀도'는 모델이 '생존'이라고 예측한 것들 중에서 실제로 생존한 비율이고, '재현율'은 실제 생존자 중에서 모델이 '생존'이라고 올바르게 예측한 비율을 의미해요. 즉, 정밀도는 '거짓 양성(False Positive)'을 줄이는 데 집중하고, 재현율은 '거짓 음성(False Negative)'을 줄이는 데 집중한다고 볼 수 있어요.

 

이 두 지표를 조화롭게 나타내는 것이 'F1-점수(F1-Score)'예요. F1-점수는 정밀도와 재현율의 조화 평균으로, 두 지표가 모두 높을 때 높은 값을 가지게 된답니다. 즉, F1-점수가 높다는 것은 모델이 거짓 양성과 거짓 음성을 모두 효과적으로 줄이고 있다는 의미로 해석할 수 있어요. 더불어 'ROC 곡선(Receiver Operating Characteristic Curve)'과 'AUC(Area Under the Curve)'도 모델의 성능을 평가하는 데 유용하게 사용돼요. ROC 곡선은 다양한 임계값(Threshold)에서 모델의 참 양성률(True Positive Rate, 재현율과 동일)과 거짓 양성률(False Positive Rate)의 관계를 보여주며, AUC 값은 이 곡선 아래의 면적을 의미해요. AUC 값이 1에 가까울수록 모델의 성능이 우수하다고 평가할 수 있죠.

 

모델 평가 결과가 만족스럽지 않다면, 우리는 모델을 개선하기 위한 다양한 방법을 시도해 볼 수 있어요. 첫 번째는 '하이퍼파라미터 튜닝(Hyperparameter Tuning)'이에요. 앞서 언급했듯이, 모델의 학습 방식을 조절하는 하이퍼파라미터들을 최적화함으로써 성능을 향상시킬 수 있어요. 예를 들어, 랜덤 포레스트에서 트리의 수를 늘리거나, 트리의 깊이를 제한하는 등의 조정을 통해 모델의 성능을 미세하게 조정할 수 있죠. 두 번째는 '앙상블 기법(Ensemble Methods)'이에요. 여러 개의 서로 다른 모델을 결합하여 더 강력한 모델을 만드는 방법으로, 앞서 설명한 랜덤 포레스트가 대표적인 앙상블 기법 중 하나예요. '배깅(Bagging)'이나 '부스팅(Boosting)'과 같은 다양한 앙상블 기법을 활용하여 모델의 예측력을 높일 수 있답니다.

 

세 번째로 '피처 엔지니어링'을 다시 시도하는 것도 좋은 방법이에요. 기존에 사용하지 않았던 새로운 피처를 만들거나, 기존 피처들을 조합하거나, 혹은 불필요하다고 판단되었던 피처를 다시 포함시켜 보는 등 다양한 시도를 해볼 수 있죠. 예를 들어, 'Age'와 'Pclass' 정보를 조합하여 'Age_Pclass'와 같은 새로운 피처를 만드는 것이 도움이 될 수 있어요. 또한, 데이터의 양이 충분하지 않다면, 더 많은 데이터를 수집하거나 '교차 검증(Cross-Validation)'과 같은 기법을 사용하여 모델의 일반화 성능을 더 신뢰성 있게 평가할 수도 있어요. 교차 검증은 데이터를 여러 개의 폴드(fold)로 나누어, 각 폴드를 한 번씩 테스트 데이터로 사용하고 나머지 폴드로 훈련하는 방식을 반복하여 모델의 성능을 평균내는 방법이에요. 이를 통해 데이터 분할 방식에 따른 성능 편차를 줄일 수 있답니다.

 

🚀 모델 평가 지표

지표 설명
정확도 (Accuracy) 전체 예측 중 올바르게 예측한 비율
정밀도 (Precision) 모델이 '긍정'으로 예측한 것 중 실제 '긍정'의 비율
재현율 (Recall) 실제 '긍정'인 것 중 모델이 '긍정'으로 예측한 비율
F1-점수 (F1-Score) 정밀도와 재현율의 조화 평균
AUC ROC 곡선 아래 면적, 모델의 종합적인 분류 성능 평가
✨ 성능을 극대화하고 싶으신가요? 모델 개선 전략 확인하기

🚢 타이타닉 생존 예측, 직접 해보기

지금까지 타이타닉 데이터셋을 이해하고, 머신러닝의 기본 개념을 익혔으며, 데이터 전처리부터 모델 구축, 평가까지 그 과정을 살펴보았어요. 이제 여러분은 직접 타이타닉호 승객이 되어 누가 살아남았을지 예측하는 머신러닝 모델을 만들어볼 준비가 되었답니다! 파이썬(Python)과 같은 프로그래밍 언어와 pandas, scikit-learn과 같은 라이브러리를 사용하면 이러한 과정을 훨씬 쉽고 효율적으로 진행할 수 있어요. 먼저, Kaggle과 같은 데이터 과학 플랫폼에서 타이타닉 데이터셋을 다운로드받아 시작해보세요. 데이터셋을 로드한 후, 위에서 배운 탐색적 데이터 분석(EDA)을 통해 데이터의 특징을 파악하고, 결측치를 처리하며, 범주형 데이터를 숫자형으로 변환하는 전처리 과정을 직접 코드로 구현해보는 것이 중요해요.

 

이어서, 여러분이 흥미를 느낀 머신러닝 모델(예: 로지스틱 회귀, 랜덤 포레스트)을 선택하여 학습 데이터를 이용해 훈련시켜 보세요. `model.fit()`과 같은 함수를 사용하면 간단하게 모델을 훈련시킬 수 있답니다. 훈련된 모델을 가지고 테스트 데이터에 대한 예측을 수행하고, 정확도, F1-점수 등 다양한 평가 지표를 계산하여 모델의 성능을 객관적으로 평가해 보세요. 처음부터 완벽한 모델을 만들기는 어려울 수 있어요. 다양한 하이퍼파라미터 조합을 시도해보거나, 새로운 피처를 추가해보면서 모델의 성능을 꾸준히 개선해 나가는 것이 중요해요. 예를 들어, 승객의 이름에서 추출한 호칭(Mr., Mrs., Miss.)이 생존율에 어떤 영향을 미치는지 분석해보고, 이를 새로운 피처로 추가하여 모델 성능이 향상되는지 확인해볼 수 있답니다.

 

이 과정을 통해 여러분은 단순히 이론을 배우는 것을 넘어, 실제 데이터를 다루고 머신러닝 모델을 구축하는 경험을 쌓게 될 거예요. 이는 데이터 과학 분야에서 매우 귀중한 실질적인 경험이 될 것입니다. 또한, 타이타닉호의 비극적인 사건을 데이터 분석을 통해 재해석하며, 데이터 속에 숨겨진 사회적, 경제적 요인들이 인간의 삶에 미치는 영향에 대해 깊이 생각해볼 기회를 얻을 수도 있어요. 머신러닝은 단순히 기술적인 도구를 넘어, 우리 주변의 세상을 이해하는 새로운 관점을 제공해 준답니다.

 

여러분이 직접 만든 모델이 특정 승객의 생존 여부를 예측하는 것을 보면서, 마치 역사의 흐름을 바꿀 수는 없지만, 그 안의 패턴을 읽어내는 탐정처럼 느껴질지도 몰라요. 이 튜토리얼을 통해 얻은 지식과 경험은 타이타닉호 예제뿐만 아니라, 다른 다양한 머신러닝 프로젝트에서도 유용하게 활용될 수 있을 거예요. 데이터와 함께하는 여정은 끊임없이 배우고 성장하는 과정이니까요. 여러분의 첫 번째 머신러닝 프로젝트, 타이타닉 생존 예측을 성공적으로 마치시길 응원합니다!

 

더 나아가, 여러분이 만든 모델을 시각화 도구와 결합하여, 승객 등급, 나이, 성별 등의 요인이 생존율에 미치는 영향을 인터랙티브하게 보여주는 웹 애플리케이션을 만들어보는 것도 도전해 볼 만한 과제예요. 이를 통해 머신러닝 모델의 예측 결과를 더 많은 사람들과 공유하고, 그 의미를 함께 나눌 수 있을 거예요. 데이터 과학은 단순히 코드를 작성하는 것을 넘어, 데이터를 통해 스토리를 전달하고 인사이트를 발견하는 창의적인 활동이기도 하답니다.

 

✨ 타이타닉 프로젝트, 지금 시작하세요! 실습 가이드 확인하기

❓ 자주 묻는 질문 (FAQ)

Q1. 머신러닝을 전혀 모르는 초보자도 이 튜토리얼을 따라 할 수 있나요?

 

A1. 네, 이 튜토리얼은 머신러닝을 처음 접하는 분들도 쉽게 이해할 수 있도록 기본적인 개념부터 차근차근 설명하고 있어요. 타이타닉 예제를 통해 실제 데이터를 다루는 경험을 쌓을 수 있도록 구성했으니 걱정하지 마세요!

 

Q2. 파이썬 코딩 경험이 없는데 괜찮을까요?

 

A2. 파이썬 코딩 경험이 있다면 더욱 좋겠지만, 필수는 아니에요. 튜토리얼에서 제시되는 코드 예시를 따라 하면서 필요한 라이브러리(pandas, scikit-learn 등)의 기본적인 사용법을 익힐 수 있도록 안내하고 있어요. 기본적인 파이썬 문법을 미리 학습하면 더 수월하게 따라올 수 있을 거예요.

 

Q3. 타이타닉 데이터셋은 어디서 구할 수 있나요?

 

A3. 타이타닉 데이터셋은 Kaggle(www.kaggle.com)에서 가장 쉽게 구할 수 있어요. Kaggle은 데이터 과학 커뮤니티로, 다양한 데이터셋과 경진대회를 제공합니다. "Titanic - Machine Learning from Disaster"라는 이름으로 검색하면 해당 데이터셋을 찾을 수 있을 거예요.

 

Q4. 데이터 전처리 과정에서 결측값 처리는 어떻게 하는 것이 가장 좋은가요?

 

A4. 결측값 처리 방법은 데이터의 특성과 분석 목적에 따라 달라져요. 나이(Age)와 같이 연속형 변수의 결측치는 평균값, 중앙값으로 대체하거나, 다른 변수들과의 관계를 이용해 예측 모델로 채울 수도 있어요. 범주형 변수(Embarked 등)의 결측치는 최빈값(가장 자주 등장하는 값)으로 대체하는 것이 일반적이에요. 어떤 방법이 가장 효과적인지는 여러 방법을 시도해보고 모델 성능을 비교하는 것이 좋아요.

 

Q5. 로지스틱 회귀 모델이 다른 복잡한 모델보다 성능이 낮을 수 있는데, 왜 로지스틱 회귀를 먼저 배우나요?

 

A5. 로지스틱 회귀는 간단하면서도 이해하기 쉽고, 결과 해석이 용이하다는 장점이 있어요. 머신러닝의 기본적인 원리를 파악하는 데 매우 효과적인 모델이기 때문에, 복잡한 모델을 배우기 전에 기초를 다지는 데 중요해요. 로지스틱 회귀를 통해 데이터의 패턴을 학습하는 과정을 익히면, 이후 더 복잡한 모델들을 이해하는 데 큰 도움이 된답니다.

 

Q6. 과대적합(Overfitting)이란 무엇이고, 어떻게 방지하나요?

 

A6. 과대적합은 모델이 학습 데이터에 너무 과도하게 맞춰져서, 실제 새로운 데이터에 대해서는 성능이 떨어지는 현상을 말해요. 마치 시험 문제만 달달 외워서 실제 응용 문제는 풀지 못하는 것과 같아요. 과대적합을 방지하기 위해서는 학습 데이터를 충분히 확보하고, 모델의 복잡성을 줄이거나(예: 결정 트리 깊이 제한), 정규화(Regularization) 기법을 사용하거나, 교차 검증을 통해 일반화 성능을 높이는 방법을 사용할 수 있어요.

 

Q7. 랜덤 포레스트 모델에서 '랜덤'이라는 단어는 무엇을 의미하나요?

 

A7. 랜덤 포레스트는 여러 개의 결정 트리를 '무작위성(Randomness)'을 가지고 생성하여 이를 결합하는 앙상블 기법이에요. 각 트리를 만들 때, 전체 학습 데이터 중 일부만 무작위로 샘플링(부트스트랩 샘플링)하고, 각 노드에서 분기할 때 사용할 피처(특징) 또한 무작위로 선택해요. 이러한 무작위성 덕분에 개별 결정 트리들이 서로 다른 특성을 가지게 되어, 전체 모델의 성능과 안정성을 높일 수 있답니다.

 

Q8. 모델 성능 평가 시 '정밀도'와 '재현율' 중 어떤 것을 더 중요하게 봐야 하나요?

 

A8. 어떤 지표를 더 중요하게 볼지는 문제의 특성에 따라 달라져요. 만약 '생존'이라고 잘못 예측하는 것(거짓 양성)이 치명적인 결과를 초래한다면 정밀도가 중요하고, 반대로 실제 생존자를 놓치는 것(거짓 음성)이 더 문제라면 재현율이 중요해요. 타이타닉 생존 예측에서는 두 가지 모두 중요하기 때문에, F1-점수와 같이 둘을 종합적으로 고려하는 지표를 활용하는 것이 좋아요.

 

Q9. 새로운 피처(Feature)를 만든다는 것은 어떤 의미인가요?

📈 모델 구축 및 훈련
📈 모델 구축 및 훈련

 

A9. 피처 엔지니어링 과정에서 새로운 피처를 만든다는 것은, 기존에 가지고 있던 데이터들을 가공하거나 조합하여 모델 학습에 더 유용한 정보를 가진 새로운 변수를 생성하는 것을 의미해요. 예를 들어, 타이타닉 데이터셋에서 'SibSp'(형제자매 수)와 'Parch'(부모/자녀 수)를 합쳐 'FamilySize'(가족 총인원)라는 새로운 피처를 만들 수 있죠. 이렇게 만들어진 피처가 생존율 예측에 더 높은 관련성을 가질 수 있어요.

 

Q10. 머신러닝 모델을 만들고 나서, 실제 현업에서는 어떻게 활용되나요?

 

A10. 머신러닝 모델은 매우 다양하게 활용될 수 있어요. 금융 분야에서는 신용 평가, 사기 탐지 등에, 의료 분야에서는 질병 진단, 신약 개발 등에, 전자상거래에서는 상품 추천, 고객 행동 예측 등에 사용돼요. 타이타닉 생존 예측 모델처럼 실제 사건의 분석이나 시뮬레이션에도 활용될 수 있으며, 미래를 예측하는 데 중요한 역할을 합니다.

 

Q11. 결정 트리 모델의 장점 중 하나인 '피처 중요도(Feature Importance)'는 무엇인가요?

 

A11. 피처 중요도는 해당 피처가 모델의 예측 결과에 얼마나 큰 영향을 미쳤는지를 나타내는 값이에요. 결정 트리나 랜덤 포레스트와 같은 트리 기반 모델들은 학습 과정에서 각 피처의 기여도를 계산하여 중요도를 제공해요. 이를 통해 어떤 요인이 생존에 가장 큰 영향을 미쳤는지 파악하는 데 도움을 받을 수 있죠. 예를 들어, 타이타닉 데이터셋에서는 'Sex'나 'Pclass'가 'Fare'보다 생존 예측에 더 중요한 피처로 나타날 수 있어요.

 

Q12. '원-핫 인코딩(One-Hot Encoding)'이란 무엇인가요?

 

A12. 원-핫 인코딩은 범주형 변수를 머신러닝 모델이 이해할 수 있는 숫자 형태로 변환하는 기법 중 하나예요. 예를 들어, 'Embarked' 변수에 'S', 'C', 'Q' 세 가지 값이 있다면, 원-핫 인코딩을 거치면 각 값에 대해 새로운 이진(binary) 피처가 생성돼요. 'S' 승객은 'S' 피처에 1, 나머지 피처에는 0이 할당되고, 'C' 승객은 'C' 피처에 1, 나머지에는 0이 할당되는 식이죠. 이를 통해 모델이 각 범주를 독립적으로 인식할 수 있게 됩니다.

 

Q13. '교차 검증(Cross-Validation)'은 왜 필요한가요?

 

A13. 교차 검증은 데이터를 여러 개의 부분(폴드)으로 나누어, 각 부분을 번갈아 가며 테스트 데이터로 사용하고 나머지 부분으로 모델을 훈련시키는 방식이에요. 이를 통해 데이터 분할 방식에 따른 모델 성능의 편차를 줄이고, 모델의 일반화 성능을 더 신뢰성 있게 평가할 수 있어요. 특히 데이터셋의 크기가 작을 때 유용하게 사용된답니다.

 

Q14. 머신러닝 모델을 만들 때 '하이퍼파라미터'란 무엇인가요?

 

A14. 하이퍼파라미터는 모델 학습 과정에서 직접 설정해주는 변수들을 말해요. 알고리즘 자체에 속하는 것이 아니라, 알고리즘이 데이터를 학습하는 방식을 제어하는 역할을 하죠. 예를 들어, 랜덤 포레스트 모델의 결정 트리 개수, 트리의 최대 깊이, 학습률(Learning Rate) 등이 하이퍼파라미터에 해당해요. 이러한 하이퍼파라미터 값을 잘 조정하는 것이 모델 성능 향상에 중요해요.

 

Q15. 타이타닉호의 어떤 특징들이 생존율에 가장 큰 영향을 미쳤다고 분석 결과가 나오나요?

 

A15. 일반적으로 타이타닉 데이터셋 분석 결과, 'Pclass'(좌석 등급)와 'Sex'(성별)가 생존율에 가장 큰 영향을 미치는 요인으로 나타나는 경우가 많아요. 1등석 승객이나 여성 승객의 생존율이 상대적으로 높게 나타나는 경향을 보이죠. 'Age'(나이) 또한 중요한 요인으로 작용하며, 어린 승객의 생존율이 높았다는 분석 결과도 있습니다.

 

Q16. 'NaN'은 무엇을 의미하나요?

 

A16. 'NaN'은 "Not a Number"의 약자로, 데이터셋에서 값이 누락되었거나 정의되지 않았음을 나타내는 표준적인 표기 방식이에요. 주로 'Age'나 'Embarked'와 같은 컬럼에서 결측값을 표현할 때 사용된답니다.

 

Q17. 로지스틱 회귀 알고리즘은 어떤 수학적 원리를 기반으로 하나요?

 

A17. 로지스틱 회귀는 선형 회귀와 유사하게 입력 변수들의 선형 결합을 계산하지만, 그 결과 값을 시그모이드(Sigmoid) 함수에 통과시켜 0과 1 사이의 확률 값으로 변환해요. 시그모이드 함수는 S자 형태의 그래프를 가지며, 입력값이 커질수록 1에 가까워지고 작아질수록 0에 가까워지는 특성을 가지고 있어요. 이 확률 값을 기준으로 특정 임계값(보통 0.5) 이상이면 긍정 클래스, 이하이면 부정 클래스로 분류하게 됩니다.

 

Q18. '앙상블 기법(Ensemble Method)'이란 무엇인가요?

 

A18. 앙상블 기법은 여러 개의 머신러닝 모델(종종 약한 학습기라고 불림)을 결합하여 단일 모델보다 더 강력하고 안정적인 예측 성능을 얻는 기법이에요. '배깅(Bagging)'이나 '부스팅(Boosting)'과 같은 여러 방법이 있으며, 랜덤 포레스트가 대표적인 배깅 방식의 앙상블 기법이라고 할 수 있어요. 여러 모델의 예측을 종합함으로써 개별 모델의 단점을 보완하고 예측의 정확성을 높이는 것이 목적입니다.

 

Q19. '테스트 세트'로만 모델 성능을 평가하는 것이 충분한가요?

 

A19. 일반적으로 학습 데이터와 테스트 데이터로 나누어 모델 성능을 평가하는 것이 기본적인 방법이에요. 하지만 모델의 성능을 더 신뢰성 있게 평가하고 싶거나, 데이터가 적을 때는 '교차 검증'과 같은 방법을 추가로 활용하는 것이 좋아요. 교차 검증을 통해 다양한 데이터 분할 조합으로 모델을 평가하면, 특정 데이터 분할에만 의존하는 것을 피할 수 있답니다.

 

Q20. 머신러닝 모델의 '해석 가능성(Interpretability)'이란 무엇이며, 왜 중요한가요?

 

A20. 해석 가능성은 머신러닝 모델이 어떤 이유로 특정 예측을 내렸는지 인간이 이해할 수 있도록 설명하는 능력을 의미해요. 로지스틱 회귀나 결정 트리와 같이 해석이 용이한 모델도 있지만, 신경망과 같이 복잡한 모델은 '블랙박스(Black Box)'처럼 작동하여 해석이 어려운 경우가 많죠. 모델의 예측 결과를 신뢰하고, 잘못된 예측의 원인을 파악하거나, 편향성을 발견하는 등 책임감 있는 AI 개발을 위해 해석 가능성은 매우 중요한 요소입니다.

 

Q21. 머신러닝 프로젝트를 수행할 때, 데이터 탐색은 어느 정도 수준까지 해야 하나요?

 

A21. 데이터 탐색은 모델 성능에 큰 영향을 미치므로 충분히 시간을 투자해야 해요. 단순히 결측치를 확인하는 것을 넘어, 각 변수의 분포, 변수 간의 상관관계, 타겟 변수와의 관계 등을 시각화와 통계적 기법을 통해 깊이 있게 파악하는 것이 좋아요. 이를 통해 데이터에 대한 직관을 얻고, 어떤 피처를 사용할지, 어떤 전처리 방법을 적용할지에 대한 좋은 아이디어를 얻을 수 있답니다.

 

Q22. '특성 선택(Feature Selection)'과 '특성 추출(Feature Extraction)'의 차이는 무엇인가요?

 

A22. 둘 다 모델에 사용되는 피처의 수를 줄여 성능을 향상시키거나 과대적합을 방지하는 기법이지만, 방식이 달라요. 특성 선택은 원래 피처들 중에서 예측에 가장 유용한 피처들만 골라내는 것이고, 특성 추출은 여러 개의 원래 피처들을 조합하거나 변환하여 새로운, 더 적은 수의 피처를 만들어내는 방식이에요. 예를 들어, PCA(주성분 분석)는 특성 추출의 대표적인 기법입니다.

 

Q23. 모델 훈련 시 '에포크(Epoch)'란 무엇인가요?

 

A23. 에포크는 신경망과 같은 딥러닝 모델에서 전체 학습 데이터를 한 번 모두 사용하는 과정을 의미해요. 예를 들어, 학습 데이터셋에 1000개의 샘플이 있고, 10 에포크로 훈련한다고 하면, 모델은 이 1000개의 샘플을 총 10번 반복해서 학습하게 되는 거예요. 에포크 수가 너무 적으면 학습이 덜 되어 성능이 낮고, 너무 많으면 과대적합될 가능성이 있어요.

 

Q24. '테스트 세트'는 모델 훈련 과정에서 절대 사용하면 안 되나요?

 

A24. 네, 테스트 세트는 모델의 최종 성능을 객관적으로 평가하기 위해 모델 훈련이나 하이퍼파라미터 튜닝 과정에서는 절대 사용하면 안 돼요. 모델이 테스트 세트의 정보까지 학습하게 되면, 실제 새로운 데이터에 대한 예측 성능을 과대평가하게 되는 '정보 누수(Data Leakage)'가 발생할 수 있어요. 모델 개발이 완료된 후, 최종 평가를 위해서만 사용해야 합니다.

 

Q25. 타이타닉 데이터셋에서 'Ticket' 정보는 왜 보통 잘 사용되지 않나요?

 

A25. 'Ticket' 번호는 각 승객에게 고유하게 부여되는 경우가 많아, 직접적으로 생존 여부와 강한 상관관계를 가지는 패턴을 찾기 어렵기 때문이에요. 물론, 같은 티켓 번호를 공유하는 승객들끼리 동승했을 가능성이 높다는 점을 이용해 '동반 가족 수'와 같은 피처를 만들 수는 있지만, 티켓 번호 자체의 문자열이나 숫자를 직접 모델에 입력하는 것은 예측 성능 향상에 크게 기여하지 못하는 경우가 많아 보통 제외되거나 다른 방식으로 활용된답니다.

 

Q26. '버려진 승객' 데이터란 무엇인가요? (Kaggle 등에서 언급되는 경우)

 

A26. Kaggle의 타이타닉 챌린지에서 '버려진 승객 데이터(Test Set)'는 실제 생존 여부 정보가 제공되지 않는 데이터를 의미해요. 즉, 학습 데이터로 모델을 훈련시킨 후, 이 버려진 데이터에 대한 생존 여부를 예측하여 제출하는 방식으로 경진대회가 진행된답니다. 이 데이터는 모델의 실제 예측 성능을 평가하는 데 사용되는 '숨겨진' 테스트 세트 역할을 해요.

 

Q27. 머신러닝 모델의 성능을 높이기 위한 '데이터 증강(Data Augmentation)' 기법은 어떻게 적용될 수 있나요?

 

A27. 데이터 증강은 기존 데이터를 변형하여 데이터의 양을 늘리는 기법으로, 주로 이미지 데이터에서 많이 활용돼요. 예를 들어, 이미지를 조금씩 회전시키거나, 확대/축소하거나, 색상을 바꾸는 등의 변형을 통해 새로운 학습 데이터를 생성할 수 있죠. 타이타닉 데이터셋과 같은 정형 데이터에서는 직접적인 이미지 변형 같은 기법은 적용하기 어렵지만, 'SMOTE(Synthetic Minority Over-sampling Technique)'와 같이 소수 클래스의 데이터를 합성하여 불균형 데이터를 해소하는 방식이 데이터 증강과 유사한 효과를 낼 수 있습니다.

 

Q28. '회귀(Regression)' 문제와 '분류(Classification)' 문제의 가장 큰 차이점은 무엇인가요?

 

A28. 가장 큰 차이점은 예측하려는 결과의 형태예요. 분류 문제는 데이터가 속할 '범주(Category)'를 예측하는 것이고, 회귀 문제는 연속적인 '수치(Number)'를 예측하는 거예요. 예를 들어, 타이타닉 승객의 생존 여부(생존/사망)를 예측하는 것은 분류 문제이고, 내일의 최고 기온을 예측하거나 주택의 가격을 예측하는 것은 회귀 문제랍니다.

 

Q29. 머신러닝 모델을 실제 서비스에 적용할 때 고려해야 할 점은 무엇인가요?

 

A29. 실제 서비스 적용 시에는 모델의 예측 성능뿐만 아니라, 실시간 예측 속도, 시스템 부하, 데이터의 변화에 따른 모델 성능 저하(Drift), 윤리적 문제(편향성 등), 보안 문제 등 다양한 측면을 고려해야 해요. 지속적인 모니터링과 모델 업데이트가 필수적이며, 사용자 경험도 중요한 고려 사항입니다.

 

Q30. 머신러닝 학습 시 '과소적합(Underfitting)'이란 무엇인가요?

 

A30. 과소적합은 모델이 너무 단순하거나 학습이 부족하여, 학습 데이터의 패턴조차 제대로 파악하지 못하는 상태를 말해요. 이 경우, 학습 데이터와 새로운 데이터 모두에 대해 성능이 낮게 나타나죠. 과소적합을 해결하기 위해서는 모델의 복잡성을 높이거나, 더 많은 피처를 사용하거나, 학습 시간을 늘리는 등의 방법을 시도할 수 있어요. 과대적합과는 반대되는 개념입니다.

 

⚠️ 면책 조항

본 글은 머신러닝 학습을 위한 일반적인 정보 제공을 목적으로 작성되었으며, 전문적인 데이터 분석이나 모델 개발 조언을 대체할 수 없습니다. 예시로 사용된 코드나 분석 결과는 교육적 목적이며, 실제 상황에 적용 시 추가적인 검증과 전문가의 조언이 필요할 수 있습니다.

📝 요약

이 튜토리얼에서는 타이타닉 데이터셋을 예제로 머신러닝의 기본 개념, 데이터 탐색 및 전처리, 모델 구축 및 훈련, 평가 및 개선 과정을 살펴보았어요. 초보자도 쉽게 따라 할 수 있도록 구성했으며, FAQ 섹션을 통해 궁금증을 해소하고 직접 실습해 볼 수 있도록 안내했습니다. 머신러닝의 흥미로운 세계를 경험하고 데이터 분석 역량을 키우는 데 도움이 되기를 바랍니다.

댓글

이 블로그의 인기 게시물

2025년 머신러닝 플랫폼 핵심 기능별 심층 비교 분석

클라우드 ML 플랫폼 비용 비교

머신러닝 플랫폼 가격 비교표 | 기업용 vs 개인용