Appearance
📝 Portfolio DA: Đừng làm bài tập, hãy làm project thật
Mở đầu — "47 đơn, 0 phỏng vấn"
Bảo, 25 tuổi, tốt nghiệp ngành Kinh tế Quốc tế tại ĐH Ngoại thương TP.HCM — GPA 3.4/4.0, có chứng chỉ Google Data Analytics, hoàn thành 3 khóa DataCamp, biết SQL "khá ổn", Python "beginner-intermediate", từng dùng Power BI làm báo cáo học kỳ. Resume 2 trang, đẹp, format chuẩn. Skills section liệt kê đầy đủ: SQL, Python, Excel, Power BI, Tableau, Statistics.
Tháng 8/2025, Bảo bắt đầu apply vị trí Junior Data Analyst. Mục tiêu: các công ty tech/e-commerce tại TP.HCM — Shopee, Tiki, MoMo, VNG, Grab, các startup fintech, edtech. Bảo gửi CV mỗi ngày — customize cover letter, research công ty, follow up qua email.
Kết quả sau 6 tuần:
| Metric | Số liệu |
|---|---|
| Đơn gửi đi | 47 |
| Auto-reject (immediate) | 28 |
| "We'll keep your resume on file" | 14 |
| Mời phỏng vấn | 3 |
| Qua vòng 1 | 1 |
| Nhận offer | 0 |
Callback rate: 6.4%. Trung bình ngành DA ở Việt Nam năm 2025 là ~12% cho fresh grad. Bảo dưới average.
Ba lần phỏng vấn, cùng một pattern:
Phỏng vấn 1 — Startup fintech:
- HR: "Em ghi biết SQL, Python, Tableau. Có portfolio hay project nào không?"
- Bảo: "Dạ em có làm bài tập trên DataCamp, với assignment trường..."
- HR: "Bài tập à... em có project nào tự làm với data thật không?"
- Bảo: "Dạ... chưa."
- Kết quả: Reject.
Phỏng vấn 2 — E-commerce company:
- Hiring Manager: "Cho anh xem GitHub đi."
- Bảo: "Dạ em có GitHub nhưng... chưa có gì trên đó."
- Kết quả: Reject.
Phỏng vấn 3 — Consulting firm (qua vòng 1, rớt vòng 2):
- Senior DA: "Bài SQL test em làm tốt. Giờ cho anh xem analysis nào em tự hào nhất."
- Bảo: "Em... có bài Titanic prediction trên Kaggle."
- Senior DA: "Titanic à. 400,000 notebooks trên Kaggle rồi em. Có gì khác biệt không?"
- Kết quả: Reject. Feedback: "Cần portfolio thực tế hơn."
Bảo ngồi trước laptop, 9 giờ tối thứ 6, stare vào GitHub profile trống trơn. 0 repositories. 0 contributions. Green squares = 0. Resume ghi "biết SQL, Python, Tableau" — nhưng không có bằng chứng nào.
"Mình học bao nhiêu course mà sao không ai tuyển?"
Phần 1: Bài học cay đắng — "Skills ≠ Portfolio"
"Biết" vs "Chứng minh được"
Tuần tiếp theo, Bảo nhắn hỏi chị Trang — alumni Ngoại thương, hiện Senior DA tại Grab, 4 năm kinh nghiệm. Chị Trang đồng ý gặp coffee 30 phút.
"Chị Trang ơi, em apply 47 công ty, 0 offer. Em làm sai gì?"
Chị Trang xin xem resume. Đọc 2 phút. Rồi nói:
"Resume em đẹp. Skills list đầy đủ. Nhưng chị hỏi em: nếu em là hiring manager, nhận 200 CV, 180 CV đều ghi 'SQL, Python, Excel, Tableau' — em chọn ai?"
"Người... có kinh nghiệm?"
"KHÔNG. Người CÓ BẰNG CHỨNG. Fresh grad nào cũng ghi biết SQL. Nhưng bao nhiêu người SHOW được SQL analysis thật? Đó là sự khác biệt."
Chị Trang mở laptop, show LinkedIn:
"Đây — Minh Anh, đợt trước apply cùng position Grab với 150 người. Fresh grad từ Bách Khoa, GPA 3.2 — thấp hơn em. NHƯNG GitHub có 3 projects: customer segmentation (Olist dataset), marketing campaign ROI, employee attrition analysis. Mỗi project có README đẹp, notebook clean, dashboard trên Tableau Public. Chị xem GitHub 5 phút là biết bạn này làm được. Bạn đó nhận offer."
Bảo thấm: Skills liệt kê trên resume = claim. Portfolio project = evidence.
| Resume Only | Resume + Portfolio | |
|---|---|---|
| Hiring Manager xem | 30 giây → "Uh huh, next" | 5 phút → "Interesting, schedule interview" |
| Phỏng vấn | "Tell me about a time..." → generic stories | "Walk me through this project..." → specific, concrete |
| Competitive edge | 1 trong 200 identical resumes | 1 trong 15 có portfolio → top shortlist |
| Salary negotiation | "Em muốn X" → no leverage | "Project em giúp insight Y, tiết kiệm Z" → evidence-based |
Chị Trang nhấn mạnh thêm:
"Hiring manager đọc resume trung bình 7.4 giây. KHÔNG ĐỦ để đánh giá skill. Nhưng nếu resume có link GitHub → click vào → thấy project thật → 5 phút đã đủ để impress. Em cần MỘT project tốt. Không phải 10 bài tập DataCamp."
Bảo nhận ra sai lầm
❌ Bảo đã làm:
- Hoàn thành 3 khóa online → chỉ có certificates
- Làm bài tập theo hướng dẫn → không có sáng tạo riêng
- Skills trên resume → không evidence
- GitHub trống → red flag cho hiring manager
✅ Bảo cần làm:
- 1 capstone project thật → data thật, business context thật
- README đẹp → "landing page" cho nhà tuyển dụng
- Code clean, có comments → chứng minh tư duy
- Dashboard interactive → chứng minh BI skills
- Presentation slides → chứng minh storytellingPhần 2: Chọn đề tài — "Đề tài nào giúp mình nổi bật?"
Sai lầm: Chọn vì dễ, không phải vì hay
Bảo mở Kaggle, tìm dataset. Bản năng đầu tiên: Titanic survival prediction. Ai cũng làm, tutorial đầy YouTube, copy-paste xong 2 tiếng.
Rồi Bảo nhớ lời Senior DA phỏng vấn: "400,000 notebooks trên Kaggle rồi."
Chị Trang gợi ý framework DRBST:
"Đề tài tốt = Data có sẵn, Real business context, Business impact, Scope 2 tuần, Tell-able story. Titanic fail tiêu chí R (overused, không real business context cho tuyển dụng 2025), B (no actionable insight), và T (ai cũng biết story rồi)."
Bảo brainstorm 5 ideas:
| # | Đề tài | D | R | B | S | T | Score |
|---|---|---|---|---|---|---|---|
| 1 | Titanic | ✅ | ❌ | ❌ | ✅ | ❌ | 2/5 |
| 2 | E-commerce Olist (Brazil) | ✅ | ✅ | ✅ | ✅ | ✅ | 5/5 |
| 3 | Netflix User Ratings | ✅ | ⚠️ | ❌ | ✅ | ⚠️ | 2.5/5 |
| 4 | HR Employee Attrition (IBM) | ✅ | ✅ | ✅ | ✅ | ✅ | 5/5 |
| 5 | Personal Spotify Data | ✅ | ⚠️ | ❌ | ✅ | ✅ | 3/5 |
Bảo chọn #2: E-commerce Olist — dataset 100K orders từ Brazilian marketplace. Tại sao:
- Data: 100K orders, 8 tables (orders, customers, products, sellers, reviews, payments, geolocation, categories). Đủ lớn, đủ phức tạp.
- Real context: E-commerce marketplace — relevant cho Shopee, Tiki, Lazada. Hiring manager ở các công ty này sẽ relate.
- Business impact: Customer segmentation → personalized marketing. Revenue forecast → inventory planning. Seller performance → platform quality.
- Scope: 2 tuần vừa đủ — clean, EDA, segmentation, dashboard, presentation.
- Tell-able: "Marketplace 100K orders — segment nào giá trị nhất? Seller nào cần can thiệp? Revenue trend ra sao?"
5 Business Questions
Bảo viết 5 câu hỏi — theo format chị Trang dạy: cụ thể metric, so sánh được, dẫn đến action:
- "Customer segments nào (RFM) có highest LTV, và marketing strategy nào phù hợp cho mỗi segment?"
- "Delivery time ảnh hưởng thế nào đến review rating? Threshold nào gây negative?"
- "Revenue trend 12 tháng — seasonal patterns nào? Forecast Q+1?"
- "Top 10% sellers contribute bao nhiêu % revenue? Bottom sellers — quality concern?"
- "Category nào growing fastest? Opportunity cho product mix optimization?"
Phần 3: Data Audit — "Dataset này có dùng được không?"
Bài kiểm tra 10 điểm
Bảo download dataset Olist từ Kaggle, chạy data audit:
python
import pandas as pd
# Load dataset chính
orders = pd.read_csv('olist_orders_dataset.csv')
items = pd.read_csv('olist_order_items_dataset.csv')
customers = pd.read_csv('olist_customers_dataset.csv')
products = pd.read_csv('olist_products_dataset.csv')
reviews = pd.read_csv('olist_order_reviews_dataset.csv')
print(f"Orders: {orders.shape}") # (99,441, 8)
print(f"Items: {items.shape}") # (112,650, 7)
print(f"Customers: {customers.shape}") # (99,441, 5)
print(f"Products: {products.shape}") # (32,951, 9)
print(f"Reviews: {reviews.shape}") # (99,224, 7)Checklist result:
| # | Tiêu chí | Kết quả | Pass? |
|---|---|---|---|
| 1 | Size ≥ 1,000 rows | 99,441 orders | ✅ |
| 2 | ≥ 8 columns mix types | 8+ tables, đa dạng dtypes | ✅ |
| 3 | Date/time column | order_purchase_timestamp | ✅ |
| 4 | Missing ≤ 30% | Max missing: 2.8% (review_comment) | ✅ |
| 5 | Documentation | Kaggle descriptions detailed | ✅ |
| 6 | Business context | E-commerce marketplace Brazil | ✅ |
| 7 | Target variable | review_score, revenue, churn | ✅ |
| 8 | License | CC BY-NC-SA 4.0 | ✅ |
| 9 | Data ≤ 5 năm | 2016-2018 (hơi cũ but OK) | ⚠️ |
| 10 | Không overused | Popular nhưng ít hơn Titanic | ⚠️ |
Score: 8.5/10 — đạt yêu cầu.
Bảo ghi note: "Data 2016-2018 là hạn chế — acknowledged trong README. But analysis methods và business logic vẫn applicable 2025."
Phần 4: Setup Git — "Lần đầu tiên push code lên GitHub"
Từ 0 repo đến repo đầu tiên
Bảo chưa bao giờ dùng Git ngoài git clone tutorial projects. Chị Trang gửi checklist:
bash
# 1. Tạo folder project
mkdir capstone-ecommerce-analysis
cd capstone-ecommerce-analysis
# 2. Init git
git init
# 3. Tạo cấu trúc folder
mkdir data data/raw data/processed notebooks dashboards reports
# 4. Tạo .gitignore
echo "*.csv" > .gitignore
echo ".ipynb_checkpoints/" >> .gitignore
echo "__pycache__/" >> .gitignore
# 5. Tạo README.md (basic version, sẽ cập nhật dần)
# 6. First commit
git add .
git commit -m "feat: initial project setup with folder structure and README"
# 7. Push to GitHub
git remote add origin https://github.com/bao-analyst/capstone-ecommerce.git
git push -u origin mainGreen square đầu tiên xuất hiện trên GitHub contribution graph. Bảo chụp screenshot, gửi chị Trang. Chị reply: "Congrats! Commit 1 of hopefully 100+. Keep pushing."
README v1 — "Em chưa biết viết gì"
Bảo viết README v1 — chưa hoàn thiện, nhưng structure rõ ràng:
markdown
# 📊 E-commerce Marketplace Analysis: Customer Segmentation & Revenue Insights
> Phân tích 100K+ orders từ Olist marketplace — segment customers (RFM),
> analyze delivery impact on ratings, forecast revenue trends.
## 🎯 Business Problem
Olist marketplace needs to understand customer behavior to optimize
marketing spend and improve seller quality. This project answers...
## 🔧 Tools
Python | pandas | matplotlib | seaborn | SQL | Tableau
## 📈 Status
🔄 In Progress — Week 1: Data Cleaning & EDAChị Trang feedback: "Good start! Nhớ update dần. Đến khi xong project, README phải có: findings, dashboard screenshot, recommendations. Đó là thứ hiring manager đọc đầu tiên."
Phần 5: Kết quả — "1 project thay đổi mọi thứ"
2 tuần sau
Bảo hoàn thành capstone project:
| Deliverable | Chi tiết |
|---|---|
| GitHub repo | 42 commits, 6 notebooks, README 500+ words, .gitignore, data dictionary |
| Notebooks | 01_cleaning → 02_eda → 03_rfm_segmentation → 04_delivery_analysis → 05_revenue_forecast → 06_seller_analysis |
| Dashboard | Tableau Public: 4 tabs, interactive filters, KPI cards, segment breakdown |
| Presentation | 12 slides: problem → data → analysis → 5 key insights → 3 recommendations |
| Key findings | "Champions (8% customers) contribute 42% revenue — focus retention. Delivery > 15 days → review score drops 1.8 stars" |
Apply lại — vòng 2
Bảo apply thêm 12 công ty, lần này resume có link GitHub:
| Metric | Lần 1 (trước portfolio) | Lần 2 (sau portfolio) |
|---|---|---|
| Đơn gửi | 47 | 12 |
| Callback rate | 6.4% (3/47) | 41.7% (5/12) |
| Qua vòng 2 | 1 | 4 |
| Offer | 0 | 2 |
Phỏng vấn giờ hoàn toàn khác:
- Hiring Manager mở GitHub TRƯỚC khi phỏng vấn — đã đọc README
- "Anh thấy project Olist của em. Walk anh qua RFM segmentation đi."
- Bảo trình bày tự tin — vì đã LÀM thật, không phải kể chuyện người khác
- "Delivery > 15 days gây drop 1.8 sao — em đo bằng cách nào?"
- Bảo show code, giải thích methodology, discuss limitations
Bảo nhận offer Junior DA tại một e-commerce company. Lương 15 triệu/tháng — not bad cho fresh grad. Quan trọng hơn: hiring manager nói thẳng: "CV em bình thường, nhưng portfolio project impress team. Đó là lý do em được chọn."
Kết luận — "Project 1 mở cửa, project 2 định giá bạn"
6 tháng sau, Bảo có thêm 2 projects trên GitHub — một về marketing campaign ROI (dùng data công ty, anonymized), một về HR attrition side project. GitHub contribution graph xanh đều.
Bảo chia sẻ trên LinkedIn:
"6 tháng trước, mình apply 47 công ty, 0 offer. Portfolio trống. Giờ — 2 offers, đang làm DA tại e-commerce company, salary đã tăng 20% sau probation.
Bài học duy nhất: ĐỪNG LÀM BÀI TẬP. Hãy làm PROJECT THẬT.
Course dạy bạn skill. Project chứng minh bạn biết dùng skill. Hiring manager không care bạn hoàn thành bao nhiêu course — họ care bạn LÀM ĐƯỢC GÌ.
Fresh grad nào đang apply DA: hãy dành 2 tuần làm 1 capstone project on a real dataset. Đặt lên GitHub. Link vào resume. Đó là thứ thay đổi game."
Post đó được 1,200 likes và 43 comments — nhiều fresh grad hỏi cách làm portfolio. Bảo nhận ra: mình từ người cần help → người có thể help người khác.
📌 Bài học từ câu chuyện Bảo
- Skills ≠ Portfolio: 3 khóa online < 1 project thật trên GitHub
- Đề tài tốt = DRBST: Data + Real context + Business impact + Scope + Tell-able
- README = First impression: 30 giây để convince hiring manager
- Callback rate tăng 6.5x: Từ 6.4% → 41.7% chỉ bằng 1 project
- Project 1 mở cửa: Nhưng đừng dừng lại — mỗi project mới tăng giá trị portfolio
"The best time to build a portfolio was yesterday. The second best time is today."
🔗 Đọc thêm
- Buổi 18: Capstone Project Kickoff — Framework đầy đủ
- Workshop Buổi 18 — Hands-on Git setup + Data audit
- Case Study Buổi 18 — Portfolio thành công từ Grab, Shopee