Ngân hàng câu hỏi phỏng vấn Data Science tổng hợp, kèm ý chính trả lời ngắn gọn và chính xác. Chia theo năm khối: Thống kê & Xác suất, Machine Learning, SQL & Coding, Case study nghiệp vụ, và Behavioral. Cuối bài là checklist ôn tập một tuần. Mục tiêu không phải học vẹt đáp án, mà nắm được bản chất để trả lời tự nhiên và đào sâu khi bị hỏi tiếp.
Q1. p-value là gì? p = 0.03 nghĩa là gì?
Là xác suất quan sát được kết quả (hoặc cực đoan hơn) nếu giả thuyết H0 đúng. p = 0.03 nghĩa là: giả sử H0 đúng, chỉ có 3% khả năng thu được dữ liệu cực đoan như vậy — thường ⇒ bác bỏ H0 ở mức α = 0.05. Lưu ý: p-value KHÔNG phải xác suất H0 đúng, và không đo độ lớn hiệu ứng.
Q2. Định lý giới hạn trung tâm (CLT)?
Khi cỡ mẫu đủ lớn (thường n ≥ 30), phân phối của trung bình mẫu tiệm cận phân phối chuẩn, bất kể phân phối gốc — với mean = mean tổng thể và độ lệch chuẩn = σ/√n. Đây là nền tảng cho hầu hết kiểm định & khoảng tin cậy.
Q3. Sai lầm loại I và loại II?
Type I (dương tính giả): bác bỏ H0 khi H0 đúng — xác suất = α. Type II (âm tính giả): không bác bỏ H0 khi H0 sai — xác suất = β; power = 1 − β. Giảm α thường làm tăng β; cân bằng tuỳ chi phí sai lầm nào tệ hơn (vd chẩn đoán ung thư sợ Type II).
Q4. Khoảng tin cậy 95% nghĩa là gì?
Nếu lặp lại thí nghiệm nhiều lần và tính CI mỗi lần, khoảng 95% số khoảng đó sẽ chứa giá trị thật của tham số. KHÔNG phải "có 95% xác suất giá trị thật nằm trong khoảng cụ thể này" (giải thích Bayesian, khác).
Q5. Định lý Bayes & ứng dụng?
P(A|B) = P(B|A)·P(A) / P(B). Cập nhật niềm tin (prior → posterior) khi có bằng chứng mới. Kinh điển: bài toán xét nghiệm — bệnh hiếm (prior thấp) khiến ngay cả xét nghiệm chính xác cao vẫn cho nhiều dương tính giả. Nền tảng của Naive Bayes classifier.
Q6. Thiết kế & đọc kết quả một A/B test?
Xác định metric & H0/H1 → tính cỡ mẫu (dựa trên MDE, power 80%, α 5%) → random assignment → chạy đủ thời gian (tránh peeking sớm, tính cả tính chu kỳ theo tuần) → kiểm định (t-test/z-test tỉ lệ) → xét cả ý nghĩa thống kê lẫn ý nghĩa thực tiễn. Coi chừng novelty effect và multiple testing.
Q7. Correlation vs Causation?
Tương quan chỉ nói hai biến biến thiên cùng nhau; không suy ra nhân quả vì có thể do biến gây nhiễu (confounder) hoặc trùng hợp. Muốn khẳng định nhân quả cần thí nghiệm ngẫu nhiên (RCT) hoặc phương pháp causal inference (IV, diff-in-diff, DAG).
Q8. Type I/II đánh đổi & các phân phối hay dùng?
Nắm được: Chuẩn (đối xứng, CLT), Nhị thức (số lần thành công), Poisson (số sự kiện/đơn vị thời gian), Mũ (thời gian giữa các sự kiện), Đều. Biết khi nào dùng t-test (n nhỏ, chưa biết σ) vs z-test (n lớn/biết σ), chi-square (biến phân loại), ANOVA (so >2 nhóm).
| Câu hỏi | Ý chính trả lời |
|---|---|
| Bias–variance tradeoff? | Bias cao = mô hình quá đơn giản, underfit. Variance cao = quá phức tạp, nhạy với nhiễu, overfit. Tổng lỗi = bias² + variance + nhiễu. Mục tiêu: cân bằng để lỗi trên tập test nhỏ nhất. |
| Overfitting là gì & cách chống? | Mô hình học cả nhiễu của train nên kém trên dữ liệu mới (train acc >> test acc). Chống: thêm dữ liệu, cross-validation, regularization (L1/L2), giảm độ phức tạp, early stopping, dropout, ensembling, feature selection. |
| Precision vs Recall? | Precision = TP/(TP+FP): trong số dự đoán dương, bao nhiêu đúng. Recall = TP/(TP+FN): trong số thực dương, bắt được bao nhiêu. F1 = trung bình điều hoà hai cái. Spam ưu tiên precision; sàng lọc ung thư ưu tiên recall. |
| ROC-AUC nghĩa là gì? | ROC vẽ TPR theo FPR ở mọi ngưỡng. AUC = xác suất mô hình xếp một mẫu dương ngẫu nhiên cao hơn một mẫu âm ngẫu nhiên. 0.5 = ngẫu nhiên, 1.0 = hoàn hảo. Với dữ liệu mất cân bằng nặng, PR-AUC thông tin hơn. |
| Regularization L1 vs L2? | L1 (Lasso) phạt tổng |w| → đẩy nhiều hệ số về đúng 0 ⇒ feature selection, mô hình thưa. L2 (Ridge) phạt tổng w² → co hệ số về gần 0 nhưng hiếm khi bằng 0, xử lý đa cộng tuyến tốt. ElasticNet kết hợp cả hai. |
| Random Forest vs Gradient Boosting? | RF: nhiều cây độc lập, song song (bagging), giảm variance, ít tune, khó overfit. GBM (XGBoost/LightGBM): cây tuần tự, mỗi cây sửa lỗi cây trước (boosting), giảm bias, thường accuracy cao hơn nhưng nhạy hyperparameter & dễ overfit hơn. |
| Xử lý dữ liệu mất cân bằng (imbalanced)? | Resampling (oversample lớp thiểu số/SMOTE, undersample lớp đa số), class weights, đổi metric (F1, PR-AUC thay vì accuracy), điều chỉnh ngưỡng quyết định, anomaly detection nếu quá hiếm. Không dùng accuracy làm metric. |
| Curse of dimensionality? | Khi số chiều tăng, dữ liệu trở nên thưa thớt, khoảng cách mất ý nghĩa, cần lượng mẫu tăng theo hàm mũ. Ảnh hưởng nặng KNN/clustering. Khắc phục: giảm chiều (PCA), feature selection, regularization. |
| Generative vs Discriminative? | Discriminative học trực tiếp P(y|X) — ranh giới quyết định (Logistic Regression, SVM). Generative học P(X,y) rồi suy P(y|X) qua Bayes, mô hình hoá cả cách sinh dữ liệu (Naive Bayes, GANs). Discriminative thường phân loại tốt hơn khi đủ dữ liệu. |
| Supervised vs Unsupervised vs Reinforcement? | Supervised: có nhãn (phân loại/hồi quy). Unsupervised: không nhãn, tìm cấu trúc (clustering, PCA). Reinforcement: agent học qua thưởng/phạt khi tương tác môi trường. |
| Cross-validation để làm gì? | Ước lượng khả năng tổng quát hoá đáng tin hơn 1 lần chia. K-fold chia K phần, luân phiên 1 phần làm validation. Dữ liệu mất cân bằng dùng StratifiedKFold; chuỗi thời gian dùng TimeSeriesSplit (không được xáo trộn tương lai). |
| Xử lý missing data? | Hiểu cơ chế (MCAR/MAR/MNAR). Cách: xoá dòng/cột nếu ít, impute (mean/median/mode, KNN, model-based), thêm cờ "was_missing", hoặc dùng model tự xử lý null (LightGBM). Tránh impute gây leakage (fit trên train, transform test). |
Q1. Tìm mức lương cao thứ nhì (second highest salary).
-- Cách dùng subquery: an toàn khi có trùng lặp SELECT MAX(salary) AS second_highest FROM employees WHERE salary < (SELECT MAX(salary) FROM employees); -- Cách dùng window function (linh hoạt cho hạng N bất kỳ) SELECT DISTINCT salary FROM ( SELECT salary, DENSE_RANK() OVER (ORDER BY salary DESC) AS rnk FROM employees ) t WHERE rnk = 2;
Q2. Top-N mỗi nhóm (top 3 sản phẩm bán chạy theo từng category).
SELECT category, product, revenue FROM ( SELECT category, product, revenue, ROW_NUMBER() OVER ( PARTITION BY category ORDER BY revenue DESC) AS rn FROM sales ) t WHERE rn <= 3; -- ROW_NUMBER: hạng duy nhất | RANK: nhảy số khi bằng | DENSE_RANK: không nhảy
Q3. Khử trùng lặp (dedupe) — giữ 1 bản ghi mỗi email, mới nhất.
WITH ranked AS ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY email ORDER BY created_at DESC) AS rn FROM users ) SELECT * FROM ranked WHERE rn = 1;
Q4. Đếm số user hoạt động mỗi ngày & tỉ lệ giữ chân (retention) đơn giản.
-- DAU theo ngày SELECT event_date, COUNT(DISTINCT user_id) AS dau FROM events GROUP BY event_date ORDER BY event_date; -- Self-join tìm user quay lại đúng ngày hôm sau SELECT a.event_date, COUNT(DISTINCT b.user_id) * 1.0 / COUNT(DISTINCT a.user_id) AS next_day_retention FROM events a LEFT JOIN events b ON a.user_id = b.user_id AND b.event_date = a.event_date + INTERVAL '1 day' GROUP BY a.event_date;
Q5. INNER vs LEFT JOIN & bẫy với NULL/aggregate?
INNER chỉ giữ dòng khớp cả hai bảng; LEFT giữ toàn bộ bảng trái, phần không khớp bên phải là NULL. Bẫy hay gặp: COUNT(col) bỏ qua NULL (dùng COUNT(*) nếu muốn đếm cả dòng); lọc bảng phải trong WHERE sẽ vô hiệu hoá LEFT JOIN (phải đặt điều kiện trong ON). Nhớ WHERE lọc trước khi group, HAVING lọc sau aggregate.
Q6. Python/pandas: doanh thu trung bình theo nhóm & lọc.
import pandas as pd # Doanh thu TB mỗi category, chỉ giữ category có > 100 đơn g = (df.groupby("category") .agg(avg_rev=("revenue", "mean"), n_orders=("order_id", "count")) .reset_index()) g = g[g["n_orders"] > 100].sort_values("avg_rev", ascending=False) # Đếm trùng & khử trùng lặp giữ bản ghi mới nhất df = (df.sort_values("created_at") .drop_duplicates(subset="email", keep="last")) # Fizzbuzz kiểu phỏng vấn nhanh for i in range(1, 16): print("FizzBuzz" if i%15==0 else "Fizz" if i%3==0 else "Buzz" if i%5==0 else i)
ROW_NUMBER/RANK/LAG/SUM OVER). Thành thạo window function là bạn qua được phần lớn vòng SQL.Câu case study kiểm tra tư duy sản phẩm & hệ thống chứ không phải một đáp án đúng duy nhất. Luôn nghĩ thành tiếng theo khung dưới đây, và hỏi lại trước khi lao vào giải:
Ví dụ 1 — Dự đoán khách hàng rời bỏ (Churn):
Clarify: churn = không hoạt động 30 ngày hay huỷ gói? Metric: recall cao để không bỏ sót khách sắp rời, nhưng cân với ngân sách chăm sóc ⇒ tối ưu theo lợi nhuận giữ chân. Data: hành vi sử dụng, tần suất, tickets hỗ trợ, thanh toán; nhãn từ lịch sử. Model: baseline logistic → gradient boosting; feature xu hướng giảm sử dụng. Validate: tách theo thời gian, sau đó thử nghiệm chiến dịch giữ chân trên nhóm nguy cơ cao vs nhóm đối chứng. Deploy: batch scoring hằng tuần, đẩy danh sách nguy cơ cao cho team CSKH. Monitor: theo dõi tỉ lệ churn thực tế của nhóm được can thiệp.
Ví dụ 2 — Phát hiện gian lận giao dịch (Fraud):
Clarify: chặn tức thời hay gắn cờ để review? Metric: cực mất cân bằng ⇒ PR-AUC, và cân recall (bắt gian lận) với precision (tránh phiền khách thật); tính chi phí mỗi loại lỗi. Data: đặc trưng giao dịch, hành vi lịch sử, thiết bị/vị trí; nhãn trễ (chargeback đến sau). Model: gradient boosting + rule engine; anomaly detection cho mẫu mới. Validate: đánh giá theo thời gian, chú ý feedback loop. Deploy: real-time API độ trễ mili-giây trong luồng thanh toán. Monitor: concept drift mạnh vì kẻ gian đổi chiêu ⇒ retrain thường xuyên, theo dõi tỉ lệ chặn nhầm.
Ví dụ 3 — Hệ gợi ý (Recommendation):
Clarify: tối ưu click, thời gian xem hay doanh thu? Metric: offline dùng Precision@K/NDCG, online dùng CTR/engagement qua A/B test. Data: tương tác user-item ngầm (view/click/mua), thuộc tính item; lưu ý cold-start. Model: baseline popularity → collaborative filtering/matrix factorization → mô hình lai (two-tower) kèm content. Validate: chia theo thời gian, chú ý bias phản hồi. Deploy: tính candidate offline + rerank online. Monitor: đa dạng & filter bubble, novelty, drift theo mùa.
Câu hành vi đánh giá cách bạn làm việc, xử lý xung đột & thất bại. Trả lời theo STAR: Situation (bối cảnh) → Task (nhiệm vụ/mục tiêu) → Action (bạn đã làm gì, cụ thể) → Result (kết quả, có số liệu). Tập trung vào "tôi" đã làm gì, kết thúc bằng bài học.
| Câu hỏi | Gợi ý trả lời |
|---|---|
| Kể về một dự án bạn tự hào nhất. | Chọn dự án có tác động đo được; nêu rõ vai trò cá nhân, thách thức kỹ thuật, và impact bằng con số (giảm X%, tăng Y). |
| Một lần phân tích của bạn sai/thất bại? | Thành thật về lỗi, nhấn mạnh cách bạn phát hiện, khắc phục và bài học rút ra để không lặp lại. Thể hiện sự trưởng thành. |
| Khi bất đồng với stakeholder/PM về kết quả? | Lắng nghe, dùng dữ liệu làm trọng tài, tìm giải pháp dung hoà; cho thấy giao tiếp & tôn trọng góc nhìn nghiệp vụ. |
| Giải thích khái niệm kỹ thuật cho người không chuyên? | Kể ví dụ dùng phép loại suy, bỏ jargon, tập trung vào "vậy thì sao" đối với quyết định kinh doanh. |
| Ưu tiên nhiều việc gấp cùng lúc thế nào? | Nêu cách bạn đánh giá impact vs effort, trao đổi với quản lý về kỳ vọng, và ví dụ cụ thể. |
| Ngày | Trọng tâm |
|---|---|
| Ngày 1 | Thống kê & Xác suất: p-value, CLT, Type I/II, CI, Bayes. Làm lại 10 câu, tự giải thích "nó KHÔNG phải là...". |
| Ngày 2 | ML nền tảng: bias-variance, overfitting, regularization, metric (precision/recall/ROC-AUC). Vẽ tay ma trận nhầm lẫn. |
| Ngày 3 | ML thuật toán: cây, RF vs boosting, imbalanced, curse of dimensionality, cross-validation. Ôn ưu/nhược từng model. |
| Ngày 4 | SQL & coding: luyện 15–20 câu (window function, join, aggregate) trên LeetCode/StrataScratch + vài bài pandas. |
| Ngày 5 | Case study: chạy khung clarify→monitor trên 3–4 bài (churn, fraud, recommendation, pricing) — nói to. |
| Ngày 6 | Behavioral (viết 5–6 câu chuyện STAR) + ôn dự án cá nhân trong CV, chuẩn bị câu hỏi ngược cho nhà tuyển dụng. |
| Ngày 7 | Mock interview toàn diện với bạn/gương, rà lại điểm yếu, nghỉ ngơi sớm. Chuẩn bị logistics (thiết bị, IDE, môi trường). |