이 저장소가 대체 무엇인가.
ML-For-Beginners는 코드 프로젝트가 아니라 학습 자료집(교육 커리큘럼)이다. "1-Introduction"부터 "9-Real-World"까지 9개 모듈, 26개 레슨으로 구성되며, 각 레슨은 실제로 실행 가능한 Jupyter 노트북과 함께 온다. 신경망·트랜스포머 같은 딥러닝은 다루지 않고, 그 이전 단계인 회귀, 분류, 클러스터링, 자연어처리(고전 기법), 시계열, 강화학습에 집중한다.
비유하자면: 딥러닝이 "자동차 운전을 배우는 것"이라면, 이 커리큘럼은 "엔진이 어떻게 동작하는지, 기어는 왜 필요한지"를 먼저 이해시키는 과정이다. Scikit-learn이라는 표준 라이브러리 하나로 대부분의 실습을 진행하기 때문에, 복잡한 GPU·프레임워크 설정 없이 노트북 하나로 실습이 끝난다.
다른 ML 강의 대비 장점 · 트렌딩 이유.
ML 입문 강의는 시중에 셀 수 없이 많다. 그런데 이 저장소가 GitHub에서 스타 수십만 개를 받으며 꾸준히 트렌딩에 오르는 이유는 "완결성"에 있다. 유튜브 강의나 블로그 글은 파편적이지만, 이 커리큘럼은 주제 선정 → 데이터 → 강의 → 실습 → 퀴즈 → 과제 → 정답까지 하나의 완결된 학습 사이클을 26번 반복 제공한다. 게다가 Microsoft 공식 저장소라는 신뢰도, MIT 라이선스로 자유로운 재사용, 40개 이상 언어 자동 번역이라는 접근성까지 갖췄다.
| 기준 | 유튜브/블로그 튜토리얼 | 대학 MOOC (Coursera 등) | ML-For-Beginners |
|---|---|---|---|
| 비용 | 무료(광고) | 대부분 유료/인증서 유료 | 완전 무료 (MIT License) |
| 구조화된 커리큘럼 | 파편적 | ✓ | ✓ (12주 26강 고정 순서) |
| 실습 노트북 제공 | 일부 | 일부 | ✓ (레슨마다 notebook.ipynb + 정답) |
| 프리/포스트 퀴즈 | — | 일부 | ✓ (52개 퀴즈, 레슨마다 2개) |
| 다국어 지원 | 드묾 | 일부 | ✓ (40개+ 언어 자동 번역) |
| R / Julia 버전 병행 | — | — | ✓ (대부분 레슨에 solution/R) |
| 실제 프로젝트(웹앱 배포까지) | 일부 | 일부 | ✓ (Flask 웹앱, 추천 시스템) |
| 딥러닝 포함 여부 | 제각각 | 제각각 | ✗ (의도적 배제 — 고전 ML 전용) |
저자들은 README에서 두 가지 교육학적 원칙을 명시한다 — hands-on project-based(직접 만들어보며 배우기)와 frequent quizzes(잦은 퀴즈). 여기에 "세계를 여행하며 배운다"는 테마를 더해, 북미 호박 가격·나이지리아 음악·아시아 요리·유럽 호텔 리뷰 같은 실제 데이터로 학습 흥미를 유지한다. 이 조합이 "그냥 읽는 강의"가 아니라 "직접 실행해서 확인하는 강의"로 만드는 핵심이다.
ML을 처음 배우는데 "선형회귀부터 신경망까지 다 알려주는" 강의를 들었더니, 정작 Scikit-learn 하나도 제대로 못 다루는 채로 끝났다면? 이 커리큘럼은 반대로 접근한다. 딥러닝은 아예 빼고, 회귀·분류·클러스터링만 12주 동안 깊게 판다. 8주차에 도달하면 "북미 호박 가격을 예측하는 모델"과 "그 모델을 서비스하는 Flask 웹앱"을 스스로 만들 수 있게 된다.
딥러닝이 궁금해지면 그때 자매품인 AI-For-Beginners로 넘어가면 된다 — 이 저장소 README가 직접 안내하는 다음 단계다.
Python/Scikit-learn 중심 + R/Julia 대체 경로 + 웹앱 + 퀴즈 앱 각각 상세.
| 라이브러리 | 역할 | 주로 쓰이는 모듈 |
|---|---|---|
scikit-learn | 커리큘럼의 심장 — 회귀·분류·클러스터링 전 알고리즘 | 2-Regression ~ 5-Clustering 전체 |
pandas | CSV 데이터 로드·정제·가공 (DataFrame) | 거의 모든 notebook.ipynb 1번째 셀 |
numpy | 배열 연산, 수치 계산 기반 | 회귀 계수 계산, 특성 배열 변환 |
matplotlib | 산점도·선그래프 등 기본 시각화 | 2-Regression (가격 vs 날짜 산점도 등) |
seaborn | 고급 통계 시각화 (swarm plot, heatmap 등) | 4-Classification, 5-Clustering |
statsmodels / pmdarima | ARIMA 시계열 모델링 | 7-TimeSeries/2-ARIMA |
NLTK / TextBlob | 고전 자연어처리 — 토큰화, 감성분석 | 6-NLP 전체 |
OpenAI Gym (Gymnasium) | 강화학습 환경 시뮬레이션 (CartPole 등) | 8-Reinforcement/2-Gym |
Responsible AI Toolbox | 모델 디버깅 — 공정성/에러 분석 대시보드 | 9-Real-World/2-Debugging-ML-Models |
Flask | 학습한 모델을 웹앱으로 서빙 | 3-Web-App/1-Web-App |
pickle | 학습된 Scikit-learn 모델 저장/로드 | Flask 앱에서 ufo-model.pkl 로드 |
| Jupyter Notebook | 대화형 실습 환경 — 레슨마다 notebook.ipynb | 전체 51개 노트북 |
| 도구 | 역할 |
|---|---|
tidyverse | 데이터 조작·시각화 (dplyr, ggplot2 등) |
tidymodels | R의 Scikit-learn 격 — 모델링 프레임워크 |
caret | 분류/회귀 모델 학습·평가 통합 인터페이스 |
R Markdown (.Rmd) | 코드+설명+출력을 한 문서에 결합 (YAML 헤더 + 코드 청크) |
R Notebook (.ipynb) | 일부 레슨은 R 커널 Jupyter 노트북으로도 제공 |
solution/R/lesson_N.Rmd로 함께 제공하며, 미리 렌더링된 lesson_N.html도 같이 들어있다.| 구성요소 | 역할 |
|---|---|
| Flask (Python) | UFO 목격 데이터로 학습한 분류 모델을 REST 형태로 서빙하는 초경량 백엔드 |
Jinja2 템플릿 (templates/index.html) | 사용자 입력 폼 → 예측 결과 렌더링 |
순수 CSS (static/css/styles.css) | 프레임워크 없이 직접 작성한 스타일시트 |
pickle 모델 파일 | 노트북에서 학습한 모델을 .pkl로 저장 후 Flask가 로드 |
| 구성요소 | 역할 |
|---|---|
| Vue 3 | 52개 퀴즈(레슨마다 프리/포스트 각 1개, 3문항씩)를 구동하는 SPA 프레임워크 |
| vue-router 3 | 퀴즈 간 라우팅 (public/routes.json 기반) |
| vue-i18n 8 | 퀴즈 다국어 표시 |
| @vue/cli-service 5 | 빌드·개발 서버 (webpack 기반) |
| ESLint | 코드 스타일 검사 (npm run lint) |
| Azure Static Web Apps | 공식 배포 대상 — GitHub Actions로 자동 배포 |
| 도구 | 역할 |
|---|---|
| Docsify | 빌드 단계 없이 저장소 루트의 Markdown을 그대로 문서 사이트로 서빙 (docsify serve) |
| GitHub Actions (Co-op Translator) | Azure AI/OpenAI 기반 자동 번역 — main 브랜치 푸시 시 40개+ 언어로 자동 갱신 |
| GitHub Discussions | 학습자들이 PAT(진행 평가 도구)를 공유하는 커뮤니티 공간 |
PDF 변환 (docsifytopdf.js) | 전체 커리큘럼을 PDF 한 장으로 변환해 배포 |
이 저장소의 "아키텍처"는 코드 구조가 아니라 학습 설계 구조다.
모든 레슨 시작 전에 배경지식을 점검하는 프리렉처 퀴즈가 있고, 끝난 후 같은 주제를 다른 각도로 묻는 포스트렉처 퀴즈가 있다. 총 52개 퀴즈(26레슨 × 2), 문항당 3문제. 심리학적으로 "사전 퀴즈는 학습 의도를 설정하고, 사후 퀴즈는 기억 정착을 돕는다"는 원리를 그대로 적용한 설계다.
2-Regression 모듈은 "북미 호박 가격" 데이터 하나로 4강을 이어간다 — 툴 준비(1강) → 데이터 정제(2강) → 선형/다항 회귀(3강) → 로지스틱 회귀(4강). 4-Classification은 "아시아·인도 요리" 데이터로 마찬가지로 4강을 이어간다. 매 강의 새 데이터셋을 배우는 부담 없이, 같은 데이터를 점점 더 어려운 기법으로 다시 보게 만든다.
정답 코드는 항상 별도의 solution/ 폴더에 있다. 레슨 루트의 notebook.ipynb는 학습자가 직접 채워야 하는 실습용이고, solution/notebook.ipynb가 완성된 정답이다. R 학습자를 위한 solution/R/, Julia 학습자를 위한 solution/Julia/도 같은 구조로 병렬 제공된다. "먼저 스스로 풀고, 막히면 정답을 본다"는 학습 순서를 파일 구조로 강제한다.
README는 "레슨은 주로 Python으로 작성되지만 많은 레슨이 R로도 제공된다"고 명시한다. R 레슨을 원하면 solution 폴더에서 .Rmd(R Markdown) 확장자를 찾으면 된다. 즉 같은 개념(예: 로지스틱 회귀)을 Python 생태계와 R 생태계 양쪽에서 동시에 배울 수 있게, 커리큘럼 설계 단계에서부터 언어 이중화를 반영했다.
사람이 직접 번역하지 않는다. .github/workflows/co-op-translator.yml 워크플로우가 main 브랜치에 푸시될 때마다 Azure AI/OpenAI 서비스로 40개 이상 언어의 translations/<lang>/README.md를 자동 생성한다. AGENTS.md는 "번역 파일을 수동으로 절대 편집하지 말 것"을 명시한다 — 콘텐츠 원본과 번역본의 생성 경로를 완전히 분리한 설계다.
레슨 폴더 명명 규칙 · translations/ · quiz-app/ · solution/ 분석.
4-Classification) 안의 하위 레슨은 N-주제명 형식으로 번호가 매겨진다(1-Introduction, 2-Classifiers-1 등). 모듈 번호와 레슨 번호가 조합되면 README의 26강 표에 있는 "Lesson Number"(01~25 + Postscript)와 매핑된다. 파일 시스템 순서 = 학습 순서로 설계한 것.8-Reinforcement/1-QLearning/translations/README.ko.md처럼, 레슨 폴더 안에 translations/ 서브폴더가 따로 있고 그 안에 언어 코드가 붙은 파일이 들어간다. 저장소 전체를 클론하면 용량이 크게 늘어나서, README가 git sparse-checkout으로 번역 없이 받는 방법을 별도 안내할 정도다.각 ML 주제에서 실제로 무엇을 배우는가 + 실습 아이디어.
북미 호박 가격 데이터로 선형회귀 → 다항회귀 → 로지스틱회귀 순서로 진행한다. 원본 데이터는 지저분한 실제 시장 데이터(단위 불일치, 결측치)라서, 첫 단계부터 데이터 정제(cleaning)를 실습하게 만든다.
# 2-Regression/3-Linear/notebook.ipynb 핵심 패턴
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
lin_reg = LinearRegression()
lin_reg.fit(X_train, y_train)
pred = lin_reg.predict(X_test)
print('MSE:', mean_squared_error(y_test, pred))
배울 것: train_test_split 데이터 분할, 선형회귀 계수 해석, 다항 특성 변환(PolynomialFeatures), MSE/RMSE 평가지표, 로지스틱회귀로 분류 경계 그리기.
노트북에서 학습만 하고 끝나지 않는다. UFO 목격 데이터로 학습한 분류 모델을 pickle로 저장하고, Flask로 감싸 실제 웹 서비스로 만든다. "모델 학습"과 "모델 서빙"이 별개의 기술임을 체감하는 유일한 레슨이다.
배울 것: pickle.dump/load로 모델 직렬화, Flask 라우팅(@app.route), HTML 폼 → 예측 API 연결, 최소 프론트엔드(Jinja2 템플릿) 작성.
아시아·인도 요리 데이터로 여러 분류기를 비교한다. 마지막 레슨(4-Applied)에서는 배운 분류 모델로 "재료를 입력하면 어떤 요리인지 추천하는 웹앱"까지 만든다.
배울 것: 여러 분류 알고리즘 비교(로지스틱회귀, SVM, 결정트리, 랜덤포레스트 등), 혼동행렬(Confusion Matrix)과 ROC 커브로 성능 비교, 클래스 불균형 다루기, 분류 모델을 추천 시스템으로 응용.
나이지리아 음악 스트리밍 데이터(Spotify에서 스크랩)로 비지도학습을 처음 접한다. 정답 레이블이 없는 데이터에서 패턴을 찾는 것이 지금까지의 회귀·분류와 근본적으로 다른 점이다.
# 5-Clustering/2-K-Means 핵심 패턴
from sklearn.cluster import KMeans
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, init='k-means++', random_state=42)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
# wcss를 그려서 "엘보우 포인트"로 최적 클러스터 수 결정
배울 것: 비지도학습 vs 지도학습 개념 차이, K-Means 알고리즘 동작 원리, 엘보우 메서드로 K값 결정, 클러스터 시각화(2D 산점도로 차원 축소 없이).
딥러닝 기반 트랜스포머 이전의 고전 NLP 기법을 다룬다. 첫 레슨은 노트북 대신 순수 Python 스크립트(bot.py)로 규칙 기반 챗봇을 만들며 시작하고, 이후 제인 오스틴 텍스트로 번역·감성분석, 호텔 리뷰로 실전 감성분석을 두 차례에 걸쳐 심화한다.
배울 것: 토큰화(tokenization), 규칙 기반 대화 시스템 설계, TextBlob으로 감성 점수 계산, 실제 리뷰 텍스트의 노이즈 처리(다국어 혼재, 이모지 등).
세계 전력 사용량 데이터로 ARIMA와 SVR(Support Vector Regressor) 두 가지 접근법을 비교한다. 이 모듈만 유일하게 environment.yaml(Conda 환경 파일)과 별도의 common/utils.py 유틸리티 모듈을 포함해, 실전 프로젝트에 가까운 코드 구성을 보여준다.
배울 것: 시계열 데이터의 정상성(stationarity) 개념, ARIMA(p,d,q) 파라미터 튜닝, 시계열을 지도학습 문제로 변환해 SVR 적용, 시계열 전용 train/test 분할(시간 순서 유지).
"피터가 늑대를 피해 도망치는" 보드게임을 직접 구현(rlboard.py)하며 Q-Learning 알고리즘을 밑바닥부터 배운다. 두 번째 레슨은 OpenAI Gym(Gymnasium)의 CartPole 환경으로 표준 RL 라이브러리 사용법으로 넘어간다.
배울 것: 벨만 방정식(Bellman Equation)과 Q-테이블, 탐험 vs 활용(exploration vs exploitation) 트레이드오프, OpenAI Gym 표준 인터페이스(step/reset/render), 보상 함수 설계.
Postscript 모듈. 1강은 고전 ML이 실제로 어디에 쓰이는지 사례를 정리하고, 2강은 Responsible AI(RAI) 대시보드로 이미 학습한 모델의 공정성·에러 분포·반사실적 설명(counterfactual)을 디버깅하는 실습을 다룬다. 지금까지 "모델을 만드는 법"을 배웠다면, 여기서는 "만든 모델을 검증하는 법"을 배운다.
배울 것: 모델 에러 분석(Error Analysis) 히트맵, 데이터/특성 코호트별 성능 비교, 공정성(fairness) 지표 해석, What-If 반사실적 분석으로 개별 예측 설명.
Python 환경 · Jupyter · 노트북 실행 방법.
| 항목 | 요구사항 |
|---|---|
| Python 버전 | 3.8 이상 (AGENTS.md 권장) |
| 필수 패키지 | jupyter, scikit-learn, pandas, numpy, matplotlib, seaborn |
| 레슨별 추가 패키지 | Flask(웹앱), NLTK/TextBlob(NLP), statsmodels/pmdarima(시계열), gymnasium(강화학습) |
| R 환경(선택) | R + RStudio 또는 Jupyter R 커널(IRkernel), tidyverse/tidymodels/caret 패키지 |
| 퀴즈 앱 실행 환경(선택) | Node.js + npm (Vue 3 / @vue/cli-service 5) |
| 문서 사이트(선택) | Docsify CLI (npm install -g docsify-cli) |
| 하드웨어 | 일반 노트북/PC로 충분 — GPU 불필요 (딥러닝을 다루지 않기 때문) |
| 디스크 용량 | 번역 포함 풀 클론은 용량이 큼 → sparse-checkout으로 !translations !translated_images 제외 권장 |
레슨 폴더로 이동해 jupyter notebook notebook.ipynb 한 줄이면 실습이 시작된다. Colab에 업로드해서 돌려도 무방하다. 클라우드 GPU, Docker, 별도 서버 설정이 필요 없다는 점이 "입문자용"이라는 이름값을 하는 핵심 이유다.
40개 이상 언어의 전체 폴더 미러가 포함돼 있어 일반 git clone은 매우 느리고 용량이 크다. README가 공식으로 안내하는 git clone --filter=blob:none --sparse 후 git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' 방식을 쓰면 훨씬 빠르게 받을 수 있다.
난이도별 5개 — 커리큘럼 활용법.
1-Introduction/1-intro-to-ML부터 시작한다. 프리퀴즈 → README 읽기 → assignment.md 확인 → 포스트퀴즈까지 학습 사이클 하나를 처음부터 끝까지 그대로 따라가 본다.
git clone --filter=blob:none --sparse https://github.com/microsoft/ML-For-Beginners.git
cd ML-For-Beginners
git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'
cat 1-Introduction/1-intro-to-ML/README.md
확인 포인트: README 안의 "Pre-lecture quiz"·"Post-lecture quiz" 링크를 실제로 클릭해서 3문항을 풀어본다. 사이클 전체를 한 번 겪어야 이후 레슨이 왜 이렇게 설계됐는지 체감된다.
2-Regression/3-Linear/notebook.ipynb를 Jupyter로 열어 셀을 순서대로 실행한다. 특성(Feature)을 하나 바꿔보고(예: Month 대신 DayOfYear) 결과가 어떻게 달라지는지 비교한 뒤, solution/notebook.ipynb와 비교한다.
cd 2-Regression/3-Linear
jupyter notebook notebook.ipynb
# 실행 후 solution/notebook.ipynb 와 diff 비교
확인 포인트: MSE 값이 어떻게 바뀌는지, 산점도의 회귀선 기울기가 왜 달라지는지 직접 눈으로 확인한다.
3-Web-App/1-Web-App/solution/web-app을 로컬에서 실행하고, UFO 모델 대신 직접 다른 CSV(예: 캐글의 다른 분류 데이터셋)로 학습한 모델로 교체해본다.
cd 3-Web-App/1-Web-App/solution/web-app
pip install -r requirements.txt
python app.py
# http://127.0.0.1:5000 접속 후 폼 제출 테스트
확인 포인트: app.py의 pickle.load 경로와 predict() 함수의 출력 매핑(countries 리스트)을 자신의 모델 클래스에 맞게 수정할 수 있는지 확인.
Python으로 이미 푼 로지스틱 회귀 레슨(2-Regression/4-Logistic)을 R로 다시 풀어본다. solution/R/lesson_4.html을 먼저 훑어본 뒤, RStudio에서 tidymodels로 직접 구현한다.
# R 콘솔에서
install.packages(c("tidyverse", "tidymodels"))
# solution/R/ 안의 .Rmd 파일을 RStudio로 열어 Knit 실행
확인 포인트: 같은 개념(로지스틱 회귀)이 Python(Scikit-learn)과 R(tidymodels)에서 API 철학이 어떻게 다른지 비교 노트를 작성해본다.
이 저장소의 설계 패턴(프리퀴즈 → README → 노트북 → 과제 → 포스트퀴즈)을 그대로 차용해, 자신이 관심 있는 도메인(예: 한국 프로야구 기록, 국내 부동산 시세)으로 회귀+분류+클러스터링 3강짜리 미니 커리큘럼을 직접 설계한다.
my-mini-curriculum/
├── 1-Regression/{README.md, notebook.ipynb, assignment.md, solution/}
├── 2-Classification/{...}
└── 3-Clustering/{...}
확인 포인트: 각 강의마다 "지식 체크" 질문 최소 2개, "도전 과제" 1개를 반드시 포함시켜 이 저장소의 교육학적 구조를 그대로 재현했는지 스스로 점검한다.
이 커리큘럼 완주 이후 딥러닝 · MLOps로 확장하는 주차별 경로.
목표: 이 저장소의 2~5모듈(회귀·분류·클러스터링)을 실습하며 Scikit-learn API 패턴(fit/predict/transform)에 완전히 익숙해진다.
자료: Scikit-learn 공식 사용자 가이드(scikit-learn.org/stable/user_guide.html), 이 저장소의 solution 노트북들.
실습: 매 레슨의 notebook.ipynb를 직접 실행 + assignment.md 과제 제출.
목표: 6~8모듈을 완주하고, 고전 기법의 한계(문맥 이해 부족, 장기 의존성 문제 등)를 직접 체감한다.
자료: 저장소의 6-NLP·7-TimeSeries·8-Reinforcement 레슨 전체, NLTK 공식 문서.
실습: bot.py 챗봇 확장, ARIMA 파라미터 그리드서치, Q-Learning 보드를 다른 맵으로 변형.
목표: 9-Real-World/2-Debugging-ML-Models를 완주하고, "정확도 높은 모델"과 "신뢰할 수 있는 모델"의 차이를 이해한다.
자료: Microsoft Responsible AI Toolbox 문서, Fairlearn 라이브러리.
실습: 자신이 만든 분류 모델에 RAI 대시보드를 붙여 에러 코호트 분석해보기.
목표: 고전 ML의 한계를 넘어 신경망·CNN·트랜스포머로 넘어간다. 이 저장소 README가 직접 추천하는 자매 커리큘럼이다.
자료: microsoft/AI-For-Beginners(딥러닝 커리큘럼), microsoft/generative-ai-for-beginners(생성형 AI).
실습: 6-NLP에서 배운 감성분석을 트랜스포머 기반 모델(예: Hugging Face)로 다시 구현해 성능 비교.
목표: 모델링 이전 단계인 데이터 수집·정제·탐색적 분석(EDA) 역량을 별도로 강화한다.
자료: microsoft/Data-Science-For-Beginners — 이 저장소와 나란히 병행하도록 README가 권장하는 짝꿍 커리큘럼.
실습: 이 저장소의 pumpkin/nigerian-songs 데이터셋을 Data-Science-For-Beginners의 EDA 기법으로 처음부터 다시 정제해보기.
이 저장소를 이해하는 데 필요한 핵심 용어.
모델.fit(X, y) → 모델.predict(X_new)라는 동일한 인터페이스로 통일해 제공한다. 딥러닝 프레임워크(PyTorch, TensorFlow)와 달리 GPU 없이 CPU로도 충분히 빠르게 동작한다.더 깊이 파고들기 위한 공식 자료.